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 ConversationBufferMemory

history = 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 ConversationBufferWindowMemory

window = 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:我期待模型返回给我什么

在这里插入图片描述

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

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

相关文章

debian 11 arm64 aarch64 D2000 平台编译 box86 box64 笔记

参考资料 https://github.com/ptitSeb/box86/blob/master/docs/COMPILE.md 源码地址 GitHub - ptitSeb/box86: Box86 - Linux Userspace x86 Emulator with a twist, targeted at ARM Linux devices deb在线源地址(打不开): Itais box86…

宿舍管理系统的设计与实现:基于Spring Boot、Java、Vue.js和MySQL的完整解决方案

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

vue前端开发自学,祖孙多层级组件嵌套关系数据传输

vue前端开发自学,祖孙多层级组件嵌套关系数据传输!官方提供了一个解决方案,就是,在根组件内使用provide,哪个子孙组件想调用这个数据,就可以inject接收就行了。虽然是方便了,但是这个有点要求,就是只能自上…

05-HAL库硬件SPI点亮板载LCD屏幕

05-HAL库硬件SPI点亮板载LCD屏幕 1、本节内容介绍 1.1、HAL库硬件SPI 在cubemx中的配置及注意事项;1.2、HAL库SPI详解与结构介绍;1.3、实现硬件SPI驱动板载ST7789显示屏,240*240像素; 源码地址:https://gitee.com/MR_Wyf/hal-cubemx-rt-thread/tree/h…

李宏毅LLM——机器学习基础知识

文章目录 机器学习基本概念生成式学习 Structured Learning总结 机器学习基本概念 机器学习 机器自动找出一种函数 根据函数的不同,可以分为回归问题(输出数值)和分类问题(输出类别,选择题) 生成式学习 …

【征服redis1】基础数据类型详解和应用案例

博客计划 ,我们从redis开始,主要是因为这一块内容的重要性不亚于数据库,但是很多人往往对redis的问题感到陌生,所以我们先来研究一下。 本篇,我们先看一下redis的基础数据类型详解和应用案例。 1.redis概述 以mysql为…

用julia演示蝴蝶效应:洛伦兹吸引子

文章目录 Lorentz吸引子julia绘图关闭抗锯齿 蝴蝶效应的名字来源于蝴蝶扇动翅膀的动作,虽然这个动作微小,但可能会在数周后引起飓风等极端天气的发生。这种现象表明,微小的变化可能会被放大并产生非线性的结果。这个概念最早由美国气象学家爱…

Jmeter接口测试(2024版)

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,薪资嘎嘎涨 Jmeter介绍&测试准备: Jmeter介绍:Jmeter是软件行业里面比较常用…

控制网页的灰度显示

1.代码&#xff1a; 普通网页 <style>html {filter: grayscale(100%);}</style> 或是:webkit内核浏览器写法 <style>html {-webkit-filter: grayscale(100%)}</style> 2.说明&#xff1a; grayscale(amount) :进行灰度转换。 amount转换值的大小&…

MySQL系列之数据导入导出

前言 大数据与云计算作为当今时代&#xff0c;数据要素发展的“动力引擎”&#xff0c;已经走进了社会生活的方方方面。而背后承载的云服务或数据服务的高效运转&#xff0c;起了决定作用。 作为数据存储的重要工具&#xff0c;数据库的品类和特性也日新月异。从树型、网络型…

数据库开发工具:Navicat Premium 16 (Win/Mac)中文激活版

Navicat Premium 16 是一款强大的数据库管理工具&#xff0c;旨在帮助用户更轻松地管理和维护各种数据库类型。 以下是关于 Navicat Premium 16 的详细介绍&#xff1a; 数据库支持&#xff1a;Navicat Premium 16 支持多种数据库类型&#xff0c;包括 MySQL、PostgreSQL、SQLi…

C++核心编程之类和对象---C++面向对象的三大特性--多态

目录 一、多态 1. 多态的概念 2.多态的分类&#xff1a; 1. 静态多态&#xff1a; 2. 动态多态&#xff1a; 3.静态多态和动态多态的区别&#xff1a; 4.动态多态需要满足的条件&#xff1a; 4.1重写的概念&#xff1a; 4.2动态多态的调用&#xff1a; 二、多态 三、多…

Git 使用与问题记录 二(公司快速上手版)

写在前面 记录自己学习的内容&#xff0c;方便后面忘记的时候查看。给像我一样的新手提供一点参考 正文 上一章已经安装好了Git&#xff0c;如何使用呢。我这里会分享两种办法&#xff0c;第一种是在VS2022中克隆代码&#xff0c;修改和提交&#xff1b;第二种是用命令提交。…

Linux Centos7静默安装(非图形安装)Oracle RAC 11gR2(Oracle RAC 11.2.0.4)

Oracle RAC (全称Oracle Real Application Clusters &#xff09;静默安装&#xff08;非图形安装&#xff09;教程。 由于这篇文章花费了我太多时间&#xff0c;设置了仅粉丝可见&#xff0c;见谅。 环境说明&#xff1a; 虚拟机软件&#xff1a;VMware Workstation 16 Pro…

Java IO流

目录 一.字符集 二.JavaIo流体系 三.如何提升读取和写入速度&#xff1f; 四.文件读取乱码问题 一.字符集 ASCII:一个字节存储&#xff0c;首尾是0 GBK: 两个字节存储&#xff0c;首位是1 Unicode:统一码&#xff0c;4个字节存储&#xff0c;容纳世界所有文字 UTF-8:Un…

acwing 图的深度搜索DFS

写目录 邻接表的构建邻接表DFSAcWing 846. 树的重心无向图 pat 1034 Head of a Gang有向图的深度搜索&#xff0c;各连通块分别搜索 邻接表的构建 邻接表DFS const int N 1e5 10, M 2*N; int h[N], e[M], ne[M]; // h[N]: 顶点Ni的第一个连接点 bool visited[M]; …

机器学习周报第27周

目录 摘要Abstract一、文献阅读 摘要 本周阅读了一篇混沌时间序列预测的论文&#xff0c;论文模型主要使用的是时间卷积网络&#xff08;Temporal Convolutional Network&#xff0c;TCN&#xff09;、LSTM以及GRU。在数据集方面除了使用现实的时间序列数据外&#xff0c;还通…

接口防刷方案

1、前言 本文为描述通过Interceptor以及Redis实现接口访问防刷Demo 2、原理 通过ip地址uri拼接用以作为访问者访问接口区分 通过在Interceptor中拦截请求&#xff0c;从Redis中统计用户访问接口次数从而达到接口防刷目的 如下图所示 3、案例工程 项目地址&#xff1a; htt…

MongoDB Compass当前版本及历史版本下载安装

mongoDB compass 当前版本下载 官网 https://www.mongodb.com/try/download/compass 官网下载一般只能下载最新版本。 github https://github.com/mongodb-js/compass MongoDB Compass与MongoDB的版本对应关系 MongoDB CompassMongoDB1.9.12MongoDB 2.6.11 Community

STM32H5 Nucleo-144 board开箱

文章目录 开发板资料下载 【目标】 点亮LD1&#xff08;绿&#xff09;、LD2&#xff08;黄&#xff09;和LD3&#xff08;红&#xff09;三个LED灯 【开箱过程】 博主使用的是STM32CubeMX配置生成代码&#xff0c;具体操作如下&#xff1a; 打开STM32CubeMX&#xff0c;File-…