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

文章目录

    • 一、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.hqwc.cn/news/410374.html

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

相关文章

231012期高薪就业榜来啦!就业班平均就业薪资8065元!就业路上,优橙与你并肩同行!!

承诺一定会抵达,无远弗届。231012期优橙就业薪资榜来啦!! 231012期,平均就业薪资8065元,彰显优橙的就业底气!! 231012期,最高就业薪资10000元,明晰学员的就业实力&…

《C++入门篇》——弥补C不足

文章目录 前言一.命名空间二.缺省参数三.函数重载四.引用4.1引用做参数4.2引用做返回值 五.内联函数六.小语法6.1auto6.2范围for6.3空指针 前言 C是业内一门久负盛名的计算机语言,从C语言发展起来的它,不仅支持C语言的语法,还新添加了面向对…

LLM漫谈(三)| 使用Chainlit和LangChain构建文档问答的LLM应用程序

一、Chainlit介绍 Chainlit是一个开源Python包,旨在彻底改变构建和共享语言模型(LM)应用程序的方式。Chainlit可以创建用户界面(UI),类似于由OpenAI开发的ChatGPT用户界面,Chainlit可以开发类似…

MongoDB认证考试小题库

Free MongoDB C100DBA Exam Actual Questions 关于MongoDB C100 DBA 考试真题知识点零散整理 分片架构 应用程序 --> mongos --> 多个mongod对于应用来说,连接分片集群跟连接一台单机mongod服务器一样分片好处, 增加可用RAM、增加可用磁盘空间、…

Js-web APIs(一)

目录 Web API 基本认知 • 作用和分类 • 什么是DOM • DOM树 • DOM对象(重要) 获取DOM对象 • 根据CSS选择器来获取DOM元素 (重点) 1.选择匹配的第一个元素 2.选择匹配的多个元素 • 其他获取DOM元素方法(了解) 操作元素内容 • 对象.innerT…

二十几种未授权访问漏洞合集

未授权访问漏洞是一个在企业内部非常常见的问题,这种问题通常都是由于安全配置不当、认证页面存在缺陷,或者压根就没有认证导致的。当某企业对外的服务端口、功能无限制开放,并且对用户的访问没有做任何限制的时候,可能会泄露出某…

Spring Boot - Application Events 同步 VS 异步 发布订阅事件实战

文章目录 PreCode基础工程启动类切入口事件 发布事件同步 Listener异步Listener增加EnableAsync增加 Async 测试 Pre Spring Boot - Application Events 的发布顺序_ApplicationStartingEvent Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEv…

Centos7 安装与卸载mysql

卸载 ps ajx | grep mysql : 查看当前服务器是否有mysql 没有的话就不需要卸载咯。 centos7 通过yum下载安装包通常是以.rpm为后缀,rpm -qa 可以查看当前服务器上所有的安装包: rpm -qa | grep mysql | xargs yum -y remove :将查询到的mysql…

JavaScript 学习笔记(Day1)

「写在前面」 本文为 b 站黑马程序员 pink 老师 JavaScript 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。 目录 1 课程介绍 2 课程软件准备工作 3 JavaScript 介绍 4 变量 5 常量 6 数据类型 7 类型转换 8 实战案…

uniapp中uview组件库丰富的CountTo 数字滚动使用方法

目录 #平台差异说明 #基本使用 #设置滚动相关参数 #是否显示小数位 #千分位分隔符 #滚动执行的时机 #API #Props #Methods #Event 该组件一般用于需要滚动数字到某一个值的场景,目标要求是一个递增的值。 注意 如果给组件的父元素设置text-align: cente…

windows编程-网络编程快速入门(非常核心)

目录 1.windows编程 1.1 windows编程基础知识 (1) 窗口 (2)事件驱动 (3)句柄(非常重要!) 1.2windows编程一般流程 (1)程序入口函数&#xff0…

寒假已开启,你的毕业论文写到哪了?

先来看1分钟的视频,对于要写论文的你来说,绝对有所值! 还在为写论文焦虑?免费AI写作大师来帮你三步搞定 体验免费智元兔AI写作:智元兔AI 第一步:输入关键信息 第二步:生成大纲 稍等片刻后&…