AI大模型预先学习笔记二:prompt提问大模型、langchain使用大模型框架、fine tune微调大模型

news/2024/2/24 8:42:32/文章来源:https://blog.csdn.net/weixin_43679037/article/details/135588456

文章目录

    • 一、Prompt Engineering(怎么去提问大模型)
      • 1)环境准备
      • 2)交互代码的参数备注
      • 3)交互代码
    • 二、LangChain(一个框架去使用大模型)
      • 1)LangChain核心介绍:I/O模块、数据链接模块、记忆模块
      • 2)I/O模块(Prompts、Language models、Output parsers)
      • 3)数据链接模块(Data connection)
      • 4)记忆模块(针对多轮对话强相关,这种大模型有个特点:都是话痨)
    • 三、Fine-tuning(如果在自己领域中改变大模型)
      • 1)from scratch:从头训练
      • 2)finetune:微调/接着别人的训练
        • (1)全参数 fine tune
        • (2)小参数fine tune
        • (3)小参数的LoRA原理解析:
        • (4)训练大模型

一、Prompt Engineering(怎么去提问大模型)

1)环境准备

①安装OpenAI库

pip install --upgrade openai
  • 附加
    安装来源
python setup.py install

②生成API key
在这里插入图片描述
③设定本地的环境变量
在这里插入图片描述
④代码的准备工作
在这里插入图片描述

⑤在代码运用prompt(简单提问和返回)
在这里插入图片描述

2)交互代码的参数备注

temperature:随机性(从0到2可以调节,回答天马行空变化大可以选2)
model:跟什么类型的model互动
role:(定义交互中的角色)
①user:交互中的我
②assistant:交互中的model
③system:交互中的大环境(需要预先设定。比如告诉模型,你是一个AI专家,在接下来的互动中,回答尽量用专业术语)
在这里插入图片描述

3)交互代码

  • 单论交互代码
import openai
import os#从.env文件中读取 key-value键值对,并将其设置为环境变量
from dotenv import load_dotenv,find_dotenv 
_ = load_dotenv(find_dotenv())#获取OPENAI_API_KEY对应键值对数据
openai.api_key = os.getenv('OPENAI_API_KEY')def getResponse(prompt,model='gpt-3.5-turbo-16k-0613'):messages = [{'role':'user','content':prompt}]  #只有单论对话response = openai.ChatCompletion.create(model = model,messages = messages,temperature = 0,            #对应随机性,0随机性最小)def example():instruction = """帮我生成一个课程的大概框架,主题是prompt的框架,150字之内"""prompt = f"""{instruction}"""response = getResponse(prompt)print(response)return response.choices[0].messages['content']

二、LangChain(一个框架去使用大模型)

  • 介绍
    通过输入自己的知识库来定制化自己的大语言模型

1)LangChain核心介绍:I/O模块、数据链接模块、记忆模块

  • 备注
    这篇文章主讲I/O模块、数据链路模块、记忆模块(时间关系讲的少)

  • 模块主题可以完整拆分为6部分
    I/O模块
    数据链路模块
    记忆模块
    ④链(Chain)模块
    ⑤智能体(Agent)模块
    ⑥Callbacks

2)I/O模块(Prompts、Language models、Output parsers)

①Prompts:主要管理/协助构送入model的输入
在这里插入图片描述
②Language models:用哪种model
1)LLM:普通的model(大语言模型)

from langchain.llms import OpenAI
llm = OpenAI() #默认是text-davinci-003 模型
print(llm.predict("Hello, "))

2)chat_models:对话式model

from langchain.chat_models import ChatOpenAI
chat_model = ChatOpenAI()  #默认是gpt-3.5-turbo
print(chat_model.predict("Hello, "))

③Output parsers:解析输出结果

在这里插入图片描述

3)数据链接模块(Data connection)

  • 整体流程图

在这里插入图片描述

  • 流程解释

①source:数据源
②load:加载器
这里介绍一个文件加载器 Document loaders,能加载CSV\HTML\JASON\Markdown\PDF

from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader(""WhatisChatGPT.pdf")
pages  = loader.load_and_split()print(pages[0].page_content) 

③Transfrom (数据转换,也就是对数据的预处理
1)splitters:将数据按照要求切开成数据块,如按text,按character
2)translate:将数据翻译

translator = DoctraTextTranslator(openai_api_model = "gpt-3.5-turbo",language="chinese") # 定义translate
translated_document = await translator.atransform_documents(pages) # 使用translate
print(translated_document[0],page_content)

④embed操作
这里的translate就是将人类语言的数据转成模型认识的特征(feature)(所谓特征:在数学上就是一组张量,也就是一组数字)
在这里插入图片描述

在这里插入图片描述
⑤store储存和retirve
看哪个数据最合适,比对之后从store的地方拿出来
在这里插入图片描述

  • 向量和向量之间如何比对?
    1)常用的方式:余弦举例(看向量之间的夹角越小越进)
    2)最直接:欧式距离(看坐标点距离)
    在这里插入图片描述
# 1)存储
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS# 2)embedding
embeddings = OpenAIEmbeddings()
db = FAISS.from_documents(paragraphs,embeddings)# 3)比对
query = "What can ChatGPT do?"
docs = db.similarity_search(query)
print(docs[0].page_content)

4)记忆模块(针对多轮对话强相关,这种大模型有个特点:都是话痨)

①基本原理构造
从之前的提问数据写回去,再提问的时候丢给Prompt(这里回答的内容是你也好啊你又好啊

from langchain.memory import ConversationBufferMemoryhistory = ConversationBufferMemory()
history.save_context({"input":"你好啊"},{"output":"你也好啊"}) #保存字符串
# 打印保存的字符串
print(history.load_memory_variables({}))history.save_context({"input":"你再好啊"},{"output":"你又也好啊"}) #保存字符串
# 打印保存的字符串
print(history.load_memory_variables({}))

在这里插入图片描述

在这里插入图片描述

②如果上下文太长怎么办?(给定特定参数)

from langchain.memory import ConversationBufferWindowMemorywindow = ConversationBufferWindowMemory(k=2)  #k值参数决定保留多长参数
window.save_context()

在这里插入图片描述
③或是自动对历史信息取最摘要(ConversationSummaryMemory)
在这里插入图片描述

三、Fine-tuning(如果在自己领域中改变大模型)

  • 训练成本
    可以看到LLaMA这个模型,训练一轮需要21天,没个几百万不行,包括存储数据的成本
    在这里插入图片描述

1)from scratch:从头训练

2)finetune:微调/接着别人的训练

(1)全参数 fine tune
  • 备注
    全部参数都参与调试
(2)小参数fine tune
  • 备注
    小部分参数加入调试
  • 举例
    ①Adapter
    ②prompt tuning
    ③LoRA

在这里插入图片描述

(3)小参数的LoRA原理解析:

原始模型量:R(dxd),比如 4096x406,这个是LLaMA的真实参数量(神经网络的d乘d阶乘)
Efficient模型量:R(dxr),比如 r=8,这个是真实实验数值

  • 代码库
    在这里插入图片描述

  • 代码
    在这里插入图片描述

  • 参数解释
    在这里插入图片描述

(4)训练大模型

创建训练器trainer
在这里插入图片描述

  • 提供训练数据
    ①context:我说了啥
    ②target:我期待模型返回给我什么

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_925718.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java NIO (二)NIO Buffer类的重要方法

1 allocate()方法 在使用Buffer实例前,我们需要先获取Buffer子类的实例对象,并且分配内存空间。需要获取一个Buffer实例对象时,并不是使用子类的构造器来创建,而是调用子类的allocate()方法。 public class AllocateTest {static…

四、Sharding-JDBC系列04:分库分表后,如何不停机迁移数据?

目录 停机迁移方案 双写迁移方案 一般会有两种方案: 停机迁移方案 这种方案最简单也是最low的。 数据迁移前,在网站或者app挂个公告,说0点到早上6点系统进行维护,无法访问。 接着到0点停机,系统停掉,…

k8s---配置资源管理

目录 配置资源管理的方式 secret pod如何来引用secret??? 陈述式创建: 声明式创建 Secret创建加密文件 使用token挂载 环境变量使用 docker-registry ConfigMap 陈述式 热更新 总结: 配置资源管理的方式 …

Go-gin-example 第二部分 jwt验证

文章目录 使用 JWT 进行身份校验jwt知识点补充认识JWTTOKEN是什么jwt的使用场景jwt的组成headerpayloadsignature 下载依赖包编写 jwt 工具包jwt中间件编写如何获取token 编写获取token的Apimodels逻辑编写路由逻辑编写修改路由逻辑 验证token将中间件接入Gin功能验证模块 续接…

【开源】基于JAVA语言的固始鹅块销售系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 鹅块类型模块2.3 固始鹅块模块2.4 鹅块订单模块2.5 评论管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 鹅块类型表3.2.2 鹅块表3.2.3 鹅块订单表3.2.4 鹅块评论表 四、系统展示五、核心代码5.…

FPGA之初探

FPGA的构成 基本逻辑单元CLB CLB是FPGA的基本逻辑单元, 一个 CLB 包括了 2 个 Slices,所以知道Slices的数量就可以知道FPGA的“大概”逻辑资源容量了。一个 Slice 等于 4 个6输入LUT8个触发器(flip-flop)算数运算逻辑,每个 Slice 的 4 个触发…

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-17 串讲

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-17 串讲

Komodor:Kubernetes 监控工具全面指南

为了方便起见,Komodor 提供了一个简单的 Web 界面,以帮助您监控 Kubernetes 集群的状态。它拥有付费和免费增值计划,除了在出现问题时通知用户外,还拥有一系列方便的工具,用于跟踪和管理集群中部署的资源的状态。让我们…

如何用GPT进行论文润色与改写?

详情点击链接:如何用GPT进行论文润色与改写? 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析,AI画图,图像识别,文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Claude2二定…

逻辑回归(解决分类问题)

定义:逻辑回归是一种用于解决分类问题的统计学习方法。它通过对数据进行建模,预测一个事件发生的概率。逻辑回归通常用于二元分类问题,即将数据分为两个类别。它基于线性回归模型,但使用了逻辑函数(也称为S形函数&…

MR-GCN

∘ Φ \circ_Φ ∘Φ​ denotes a convolution Let b l o c k d i a g blockdiag blockdiag(A) be a n1n3-by-n2n3 block diagonal matrix, f o l d fold fold indicate its inverse operator diagonal degree tensor D \mathcal{D} D 作者未提供代码

【学习心得】Git深入学习

若您还未安装Git或是只想简单使用,可以先看看我的文章“Git快速上手”【学习心得】Git快速上手http://t.csdnimg.cn/gsaGj 一、深入学习Git必须熟悉两个概念 (1)【四个区】Git本地有三个区,远程仓库也可以看出成一个区域 工作区…

vtk9.3 + Visual Studio2019 + Cmake3.28 win11 上的环境安装(这个过程网上比较多,自己记录下过程加深下印象)

开始 介绍 欢迎来到 VTK!我们建议您首先阅读《VTK book》,这是一本全面的 VTK 指南,涵盖了其功能的所有方面。此外,您可能会发现探索 VTK 示例很有帮助,这是一组有用的参考资料,演示了如何使用 VTK 的不同模…

ASP.NET Core 的 Web Api 实现限流 中间件

Microsoft.AspNetCore.RateLimiting 中间件提供速率限制(限流)中间件。 它是.NET 7 以上版本才支持的中间件,刚看了一下,确实挺好用,下面给大家简单介绍一下: RateLimiterOptionsExtensions 类提供下列用…

Elasticsearch 7.8.0从入门到精通

安装Elasticsearch 7.8.0 官网:Elasticsearch 7.8.0 | Elastic 大家下载所需要的安装包即可。然后解压缩: Elasticsearch是通过java编写的,所以自带jdk。多好,下载Elasticsearch赠送jdk 0.0,不过一般我们用自己的jdk…

利用Lambda表达式实现vector中pair/结构体的排序

众所周知&#xff0c;对于vector<pair<int, int> >若直接使用sort排序&#xff0c;会默认按照pair的第一个关键字从小到大进行排序&#xff1a; #include <bits/stdc.h>using namespace std;int main() {vector<pair<int, int> > p;p.push_back…

select子句简单查询

Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 目录 数据查询 起别名 连接 ​编辑 去重 ​编辑 另外补充几个不常用的命令 如果要进行查询,那么需要使用数据操纵语言&#xff08;Data Manipulation Language&#xff0c;DML&am…

EChars

1.引入 Apache ECharts <!DOCTYPE html> <html><head><meta charset"utf-8" /><!-- 引入刚刚下载的 ECharts 文件 --><script src"echarts.js"></script></head> </html> 2. <!-- 为 ECharts 准…

[自动驾驶算法][从0开始轨迹预测]:二、自动驾驶系统中常用的坐标系及相应的转换关系

自动驾驶中常见的坐标系与坐标转换 1. 传感器坐标系1.1 相机坐标系统1) 相机相关基础知识2) 相机各坐标系图像/像素坐标系相机坐标系像平面坐标系 3) 相机各坐标系之间的转换像平面坐标系到像素坐标系的转换&#xff08;平移缩放变换&#xff09;相机坐标系转像平面坐标系&…

tcpdump常用参数以及wireshark密文解密

tcpdump常用参数以及wireshark密文解密 文章目录 一、tcpdump命令和常用参数二、在wireshark中协议解析 tcpdump常用参数 一、tcpdump命令和常用参数 tcpdump常用命令&#xff1a;tcpdump -i eth0 src host 11.6.224.1 and udp port 161 -s 0 -w 161.pcap &#xff08;161为sn…