ChatGPT Prompting开发实战(一)
一、关于ChatGPT Prompting概述
当我们使用ChatGPT或者调用OpenAI的API时,就是在使用prompt进行交互,用户在对话过程中输入的一切信息都是prompt(提示词),当然工业级的prompt与人们通常理解的prompt可能不太一样。下面是LangChain源码中的“retrieval_qa”模块里的prompt.py文件:
# flake8: noqa
from langchain.prompts import PromptTemplate
prompt_template = """Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.
{context}
Question: {question}
Helpful Answer:"""
PROMPT = PromptTemplate(
template=prompt_template, input_variables=["context", "question"]
)
其中核心字段“prompt_template”定义了如何使用prompt进行推理。
在前面谈plugin开发时,谈到在开发的应用中,不仅仅是执行tasks,而且需要执行actions,这时就需要agent的参与。下面的架构图展示了用户在与ChatGPT进行交互时agent是如何来执行actions的:
二、基于工业级的源码来解析prompt engineering
LangChain框架一个核心的聚焦点就是agent,其中包括两个重要的模块“react”和“mrkl”。首先我们来看下“mrkl” 部分:
在这个模块中有一个prompt文件,“Question”部分定义了输入的问题,而“Thought”部分,从task的角度来讲就是在回答问题的过程中形成的具体步骤,譬如用户问ChatGPT如何做一道菜,那么给出的回答会涉及到做菜的一系列的步骤,这就是一个所谓“思考”的过程,在涉及具体的“Action”时,说到的是具体的工具的名称,也就是需要有一个东西来调用工具,这就是agent起到的核心作用或者说它要做的事情:
关于Action input,语言模型需要知道某个步骤的输入是什么,而Observation则指调用工具之后返回的结果,这个结果会作为new context返回给ChatGPT,“action”,“action input”和“observation”共同构成了一个反复迭代的过程(类似一个for循环),直到完成“thought”(可以看做是for循环需要满足的条件)部分给出的这样一个“thinking process”的过程,在这个过程中的一系列任务(a list of tasks)是由模型来产生的,这具有重要的意义,举例来说,譬如一个教育产品,老师给学生安排任务,不同的学生具有不同的学习能力,不同的状态,不同的学习时间安排等等,这些信息都可以作为context,不同学生面对的是同样的问题,但是加入不同的context之后,对于LLM来说,产生的步骤就可能不太一样,这就是一个“adaptive learning process”,即从原来的规则系统变成了以模型为驱动的动态调整学习的过程。这样的一个prompt示例可以看做是一个工业级的写法。
在base文件部分,主要用于生成agent,所谓“ZeroShotAgent”就是不需要提供示范:
在下面创建prompt的方法中,提供了参数“tools”,模型会根据配置中的“description_for_model”的内容来决定使用哪个工具:
LangChain提供了以模板化的方法来构建prompt:
通过参数llm和prompt构建一个chain,然后构建tools’ list,告诉模型可以调用哪些工具:
这个类基于前面设定的条件来执行,类似一个service或者server的概念:
这个类中定义了使用chain来查询信息的方法:
这里给出了如下样例,譬如调用SerpAPIWrapper方法进行信息的检索,在chain的配置中给出两个actions,一个是做搜索,一个是进行科学计算:
from langchain import LLMMathChain, OpenAI, SerpAPIWrapper, MRKLChain
from langchain.chains.mrkl.base import ChainConfig
llm = OpenAI(temperature=0)
search = SerpAPIWrapper()
llm_math_chain = LLMMathChain(llm=llm)
chains = [
ChainConfig(
action_name = "Search",
action=search.search,
action_description="useful for searching"
),
ChainConfig(
action_name="Calculator",
action=llm_math_chain.run,
action_description="useful for doing math"
)
]
有了这些配置后,就可以把LLM作为reasoning engine,在需要的时候调用工具进行查询,通过方法from_llm_and_tools构建了一个agent的实例:
相关文章:

ChatGPT Prompting开发实战(一)
一、关于ChatGPT Prompting概述 当我们使用ChatGPT或者调用OpenAI的API时,就是在使用prompt进行交互,用户在对话过程中输入的一切信息都是prompt(提示词),当然工业级的prompt与人们通常理解的prompt可能不太一样。下面…...
VB车辆管理系统SQL设计与实现
摘 要 随着信息时代的到来,信息高速公路的兴起,全球信息化进入了一个新的发展时期。人们越来越认识到计算机强大的信息模块处理功能,使之成为信息产业的基础和支柱。 我国经济的快速发展,汽车已经成为人们不可缺少的交通工具。对于拥有大量车辆的机关企事业来说,车辆的…...
java 泛型
概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。 泛型,就是类型参数。 一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。 那么类型参数理解呢? 顾名思义&…...
git 查看/配置 local/global 用户名称和用户邮箱
1、--local: 本地设置(仅对当前仓库有效) git config --local user.name “你的名称” git config --local user.email “你的邮箱” 2、--global 全局设置(对当前用户的所有仓库有效) git config --global user.name “你的名称…...

无涯教程-分类算法 - 简介
分类可以定义为根据观测值或给定数据点预测类别的过程。分类的输出可以采用"黑色"或"白色"或"垃圾邮件"或"非垃圾邮件"的形式。 在数学上,分类是从输入变量(X)到输出变量(Y)近似映射函数(f)的任务,它属于有监督…...

python venv 打包,更换路径后,仍然读取到旧路径 ,最好别换路径,采用docker封装起来
机械盘路径 /home/yeqiang/code/xxx 移动到 /opt/xxx 编辑/opt/xxx/venv/bin/activate VIRTUAL_ENV"/home/yeqiang/code/xxx/venv" 改为 VIRTUAL_ENV"/opt/xxx/venv" 下面还有这么多,参考: (venv) yeqiangyeqiang-MS-7B23:/…...

MATLAB算法实战应用案例精讲-【自然语言处理】语义分割模型-DeepLabV3
目录 1、DeepLab系列简介 1.1.DeepLabV1 1.1.1创新点: 1.1.2. 动机: 1.1.3. 应对策略: 1.2.DeepLabV2 1.2.1.创新点: 1.2.2.动机 1.2.3. 应对策略: 1.3.DeepLabV3 1.3.1创新点: 1.3.2. 动机&am…...
road to master
零、学习计划 数据库相关 索引 我以为我对数据库索引很了解,直到我遇到了阿里面试官 - 知乎 (zhihu.com)给我一分钟,让你彻底明白MySQL聚簇索引和非聚簇索引 - 知乎 (zhihu.com)聚集索引(聚类索引)与非聚集索引(非聚类…...

<深度学习基础> 激活函数
为什么需要激活函数?激活函数的作用? 激活函数可以引入非线性因素,可以学习到复杂的任务或函数。如果不使用激活函数,则输出信号仅是一个简单的线性函数。线性函数一个一级多项式,线性方程的复杂度有限,从…...
评价指标BLUE了解
BLEU (Bilingual Evaluation Understudy,双语评估基准)是一组度量机器翻译和自然语言生成模型性能的评估指标。BLEU指标是由IBM公司提出的一种模型评估方法,以便在机器翻译领域中开发更好的翻译模型。BLEU指标根据生成的句子与人工参考句子之间的词、短语…...

5G网关如何提升智慧乡村农业生产效率
得益于我国持续推进5G建设,截至今年5月,我国5G基站总数已达284.4万个,覆盖全国所有地级市、县城城区和9成以上的乡镇镇区,实现“镇镇通5G”,全面覆盖了从城市到农村的延伸。 依托5G网络的技术优势,智慧乡村…...

微信小程序分享后真机参数获取不到和部分参数不能获取问题问题解决
微信小程序的很多API,都是BUG,近期开发小程序就遇到了分享后开发工具可以获取参数,但是真机怎么都拿不到参数的问题 一、真机参数获取不到问题解决 解决方式: 在onLoad(options) 中。 onLoad方法中一定要有options 这个参数。…...

Confluence使用教程(用户篇)
1、如何创建空间 可以把空间理解成一个gitlab仓库,空间之间相互独立,一般建议按照部门(小组的人太少,没必要创建空间)或者按照项目分别创建空间 2、confluence可以创建两种类型的文档:页面和博文 从内容上来…...

网络基础知识socket编程
目录 网络通信概述网络互连模型:OSI 七层模型TCP/IP 四层/五层模型数据的封装与拆封 IP 地址IP 地址的编址方式IP 地址的分类特殊的IP 地址如何判断2 个IP 地址是否在同一个网段内 TCP/IP 协议TCP 协议TCP 协议的特性TCP 报文格式建立TCP 连接:三次握手关…...

基于SpringBoot的员工(人事)管理系统
基于SpringBoot的员工(人事)管理系统 一、系统介绍二、功能展示三.其他系统实现五.获取源码 一、系统介绍 项目名称:基于SPringBoot的员工管理系统 项目架构:B/S架构 开发语言:Java语言 前端技术:BootS…...

【计算机网络】序列化与反序列化
文章目录 1. 如何处理结构化数据?序列化 与 反序列化 2. 实现网络版计算器1. Tcp 套接字的封装——sock.hpp创建套接字——Socket绑定——Bind将套接字设置为监听状态——Listen获取连接——Accept发起连接——Connect 2. 服务器的实现 ——TcpServer.hpp初始化启动…...

Linux内核学习(七)—— 定时器和时间管理(基于Linux 2.6内核)
目录 一、内核中的时间概念 二、节拍率:HZ 实时时钟 系统定时器 三、定时器 系统定时器是一种可编程硬件芯片,能以固定频率产生定时器中断,它所对应的中断处理程序负责更新系统时间,也负责执行需要周期性运行的任务。 一、内…...
Tortoise Git(乌龟git)常用命令总结
查看全局和本地 Git 配置 打开命令行终端(如 Git Bash),分别执行以下命令查看全局和本地的 Git 配置信息: git config --global -l git config --local -l确保配置中没有任何与 SSH 相关的设置 移除全局和本地 SSH 相关配置&…...
SSM商城项目实战:物流管理
SSM商城项目实战:物流管理 在SSM商城项目中,物流管理是一个重要的功能模块。通过物流管理,可以实现订单的配送、运输和签收等操作。本文将介绍如何在SSM商城项目中实现物流管理功能的思路和步骤代码。 实现SSM商城项目中物流管理的思路总结如…...

nlp系列(7)三元组识别(Bert+CRF)pytorch
模型介绍 在实体识别中:使用了Bert模型,CRF模型 在关系识别中:使用了Bert模型的输出与实体掩码,进行一系列变化,得到关系 Bert模型介绍可以查看这篇文章:nlp系列(2)文本分类&…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...