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.mzph.cn/news/628131.shtml

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

相关文章

TypeError: (0 , _ahooks.createUpdateEffect) is not a function

版本 "next": "14.0.4", "antd-mobile": "^5.34.0", next中使用antd-mobile可困难了.主要是因为antd-mobile不支持ssr 1.下载antd-mobile包,在next.config.js中加入 transpilePackages: [antd-mobile,], 2.在页面中引入antd-mobi…

蓝桥杯备赛day02 -- 算法训练题 拿金币Java

目录 题目: 问题描述 输入格式 输出格式 解题过程 第一步 定义dp数组 第二步 确定 dp 数组递推公式 第三步 dp数组的初始化 第四步 dp数组的遍历顺序 第五步 举例说明 报错:内存超限 用dp数组去存储位置上的金币 dp数组从二维降为一维 收获&a…

【MCAL】MCU模块详解

目录 前言 正文 1. MCU模块介绍 2. MCU依赖的模块 3. MCU模块提供服务 3.1 时钟的初始化 3.2 MCU模式的配置 3.3 MCU软件复位功能 3.4 RAM的初始化 4.MCU重要数据类型 4.1 Mcu_ResetType 4.2 Mcu_ModeType 5. MCU重要API 5.1 Mcu_Init 5.2 Mcu_InitClock 5.3 M…

信息系统安全——Linux 访问控制机制分析

实验 4 Linux 访问控制机制分析 4.1 实验名称 《Linux 访问控制机制分析》 4.2 实验目的 1 、熟悉 Linux基本访问控制机制使用和原理 2 、熟悉 Linux S 位的作用和使用 3 、熟悉强制访问控制 Selinux 原理及其使用 4.3 实验步骤及内容 1 、Linux 基本访问控制机制 &#xff08…

vue el-table 多选框回填

主要代码: //选中列,所有列,表名toggleSelection(selectRows, totalRows, tablename) {this.$refs.table.clearSelection();if (selectRows.length > 0) {this.$nextTick(() > {selectRows.forEach(item > {totalRows.forEach(item1 > {if (…

C语言天花板——指针(经典题目)

指针我们已经学习的差不多了,今天我来给大家分享几个经典的题目,来让我们相互学习🏎️🏎️🏎️ int main() {int a[4] { 1, 2, 3, 4 };int* ptr1 (int*)(&a 1);int* ptr2 (int*)((int)a 1);printf("%x,%…

连锁品牌如何引流获客?小魔推短视频矩阵助你流量爆棚

近几年因为大环境的影响,大多数实体行业的生意都不太好做,为了帮助更多实体行业提升品牌知名度,带来更多的流量与转化,餐赞小魔推也在不断的更新迭代,同时考虑到了单门店与连锁品牌使用的便捷性。 目前针对连锁品牌方&…

功能权限篇

文章目录 1. 如何设计一套权限系统1.1 目标1.2 权限模型1.2.1 模型一RBAC1.2.2 模型二ABAC 2.如何实现菜单的创建?2.1 表结构2.2 前端实现2.3 后端实现 3. 如何实现角色的创建?4.如何给用户分配权限 —— 将菜单赋予角色?5.如何给用户分配权限…

【目标跟踪】跨相机如何匹配像素

文章目录 前言一、计算思路二、代码三、结果 前言 本本篇博客介绍一种非常简单粗暴的方法,做到跨相机像素匹配。已知各相机内外参,计算共视区域像素投影(不需要计算图像特征)。废话不多说,直接来,见下图。…

QT -狗狗管理工具

QT -狗狗管理工具 一、演示效果二、UML三、关键代码四、程序链接 一、演示效果 二、UML 三、关键代码 #include <QFrame> #include <QHBoxLayout> #include <QVBoxLayout> #include <QLabel> #include <QSizePolicy> #include <QDialog> …

算法第十八天-打家劫舍Ⅱ

打家劫舍Ⅱ 题目要求 解题思路 [打家劫舍Ⅱ]是说两个相邻的房间不能同时偷&#xff0c;并且首尾两个房间是相邻的&#xff08;不能同时偷首尾房间&#xff09;明显是基于[打家劫舍Ⅰ]做的升级。[打家劫舍Ⅰ]也是说两个相邻的房间不能同时偷&#xff0c;但是首尾房间不是相邻的…

Nas群晖中安装Cpolar实现内网穿透

1、到Cpolar官网中安装对应的套间 cpolar官网&#xff1a; cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站 2、到群晖nas中安装套间 选择好套间无脑下一步 已完成

时间序列数据的季节性检测

时间序列分析是统计学和数据科学的一个基本研究领域&#xff0c;它为理解和预测序列数据中的模式提供了一个强大的框架。特别是时间序列数据&#xff0c;它捕获连续时间间隔内的信息&#xff0c;使分析师能够揭示趋势&#xff0c;季节性模式和其他时间依赖性。在时间序列分析的…

GPT应用开发:运行你的第一个聊天程序

本系列文章介绍基于OpenAI GPT API开发应用的方法&#xff0c;适合从零开始&#xff0c;也适合查缺补漏。 本文首先介绍基于聊天API编程的方法。 环境搭建 很多机器学习框架和类库都是使用Python编写的&#xff0c;OpenAI提供的很多例子也是Python编写的&#xff0c;所以为了…

PTA(浙大版《C语言程序设计(第3版)》题目集

PTA(浙大版《C语言程序设计&#xff08;第3版&#xff09;》题目集 学习C语言程序设计的PTA题目 目录 PTA(浙大版《C语言程序设计&#xff08;第3版&#xff09;》题目集PTA(浙大版《C语言程序设计&#xff08;第3版&#xff09;》题目集) 习题2-1 求整数均值 (10 分)输入格式:…

JS常用插件 Swiper插件 实现轮播图

Swiper介绍 Swiper 是一款免费以及轻量级的移动设备触控滑块的js框架 中文官网地址: https://www.swiper.com.cn/ 点击查看Swiper演示&#xff0c;里面的功能和样式十分丰富&#xff0c;根据自己的需求选择 中文教程中详细介绍了如何使用Swiper API文档中介绍了各个模块以及参…

如何画出优秀的系统架构图-架构师系列-学习总结

--- 后之视今&#xff0c;亦犹今之视昔&#xff01; 目录 早期系统架构图 早期系统架构视图 41视图解读 41架构视图缺点 现代系统架构图的指导实践 业务架构 例子 使用场景 画图技巧 客户端架构、前端架构 例子 使用场景 画图技巧 系统架构 例子 定义 使用场…

C++面试宝典第19题:最长公共前缀

题目 编写一个函数来查找字符串数组中的最长公共前缀,如果不存在公共前缀,返回空字符串""。说明:所有输入只包含小写字母a-z。 示例1: 输入: ["flower", "flow", "flight"]输出: "fl" 示例2: 输入: ["dog",…

微信小程序快速入门03

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java项目分享》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、生命周期生…

手写springBoot启动器

提示&#xff1a;springboot原理&#xff0c;手写springboot启动器&#xff0c;手写模拟SpringBoot启动过程、手写模拟SpringBoot自动配置功能 文章目录 前言一、本文内容1、手写模拟SpringBoot启动过程2、手写模拟SpringBoot自动配置功能 二、项目总体介绍三、代码实现(手写模…