LangChain 10思维链Chain of Thought一步一步的思考 think step by step

LangChain系列文章

  1. LangChain 实现给动物取名字,
  2. LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字
  3. LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄
  4. LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索Indexes for information retrieve
  5. LangChain 5易速鲜花内部问答系统
  6. LangChain 6根据图片生成推广文案HuggingFace中的image-caption模型
  7. LangChain 7 文本模型TextLangChain和聊天模型ChatLangChain
  8. LangChain 8 模型Model I/O:输入提示、调用模型、解析输出
  9. LangChain 9 模型Model I/O 聊天提示词ChatPromptTemplate, 少量样本提示词FewShotPrompt

1. “思维链”(Chain of Thought)

是一种解决复杂问题的方法,特别是在使用人工智能(AI)和大型语言模型如GPT-3或GPT-4时。这种方法涉及将问题的解决过程拆分为一系列逻辑步骤或“思维链条”,使得AI模型能够更有效地处理和解答复杂的问题。

思维链的关键要素

  1. 逐步解析:将复杂问题分解为更易处理的小步骤。
  2. 透明的逻辑:明确每一步的推理过程,以便于理解和验证。
  3. 连贯性:确保每一步的推理都基于前一步的结论,保持思维的连贯性。
    在这里插入图片描述
    代码实现 chat_lang_chain_of_thought.py (代码参考了黄佳老师的课程Demo,如需要知道代码细节请读原文)
# 导入Langchain库中的OpenAI模块,该模块提供了与OpenAI语言模型交互的功能
from langchain.llms import OpenAI  # 导入Langchain库中的PromptTemplate模块,用于创建和管理提示模板
from langchain.prompts import PromptTemplate  # 导入Langchain库中的LLMChain模块,它允许构建基于大型语言模型的处理链
from langchain.chains import LLMChain  # 导入dotenv库,用于从.env文件加载环境变量,这对于管理敏感数据如API密钥很有用
from dotenv import load_dotenv  # 导入Langchain库中的ChatOpenAI类,用于创建和管理OpenAI聊天模型的实例。
from langchain.chat_models import ChatOpenAI# 调用dotenv库的load_dotenv函数来加载.env文件中的环境变量。
# 这通常用于管理敏感数据,如API密钥。
load_dotenv()  # 创建一个ChatOpenAI实例,配置它使用gpt-3.5-turbo模型,
# 设定温度参数为0.7(控制创造性的随机性)和最大令牌数为60(限制响应长度)。
llm = ChatOpenAI(model="gpt-3.5-turbo",temperature=0.7,max_tokens=500
)# 从langchain库导入所需的类。
from langchain.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate# 定义一个固定模板,描述AI作为水果电商公司助手的角色。
# 这是对AI预期功能的直接描述。
rote_template = "你是一个为水果电商公司工作的AI助手, 你的目标是帮助客户根据他们的喜好做出明智的决定"# 使用固定模板创建一个SystemMessagePromptTemplate对象。
system_prompt_role = SystemMessagePromptTemplate.from_template(rote_template)# 定义一个思维链(COT)模板。此模板提供了更详细的处理方法,
# 包括AI如何处理和响应请求的示例。
cot_template = """
作为一个为水果电商公司工作的AI助手,我的目标是帮助客户根据他们的喜好做出明智的决定。 我会按部就班的思考,先理解客户的需求,然后考虑各种水果的涵义,最后根据这个需求,给出我的推荐。
同时,我也会向客户解释我这样推荐的原因。示例 1:人类:我想找一种象征爱情的水果。AI:象征爱情的水果之一是草莓。草莓以其鲜艳的红色和心形外观,成为爱情的象征,通常与浪漫和情感联系在一起。因此,考虑到这一点,我会推荐草莓。草莓心形外观:草莓的心形轮廓与爱情的传统符号——心形——相吻合,使其成为爱情的自然象征。鲜艳的红色:草莓的红色在许多文化中与激情和爱情联系在一起,象征着热情和浓烈的感情。甜美的味道:草莓的甜味象征着爱情的甜蜜和愉悦。这是你在寻找的。示例 2:人类:我想要一些独特和奇特的水果。AI:从你的需求中,一种独特和奇特的水果是“火龙果”。这种水果以其独特的外观和口感而闻名,通常具有明亮的粉红色皮肤和点缀着黑色种子的白色或红色果肉。因此,我建议你考虑火龙果。火龙果独特性:火龙果的外形和味道与众不同,为寻求新奇体验的水果爱好者提供了完美选择。而且,火龙果视觉吸引力:其鲜艳的颜色和特殊的形状在视觉上吸引人,常常成为餐桌上的焦点。也可能会吸引你。
"""# 使用COT模板创建一个SystemMessagePromptTemplate对象。
system_prompt_cot = SystemMessagePromptTemplate.from_template(cot_template)# 定义一个人类输入的模板。
human_template = "{human_input}"
# 使用人类输入模板创建一个HumanMessagePromptTemplate对象。
human_prompt = HumanMessagePromptTemplate.from_template(human_template)# 将系统角色、COT和人类输入模板组合成一个聊天提示模板。
chat_prompt = ChatPromptTemplate.from_messages([system_prompt_role, system_prompt_cot, human_prompt])# 用特定的人类输入格式化聊天提示,关于为喜欢不甜、浪漫水果的女朋友购买水果。
prompt = chat_prompt.format_prompt(human_input="我想要为我的女朋友购买水果。她喜欢不是很甜的,并且浪漫的水果。你有什么建议吗?").to_messages()# 使用格式化的提示从语言模型(llm)生成响应。
response = llm(prompt)
# 打印语言模型生成的响应。
print(response)

执行结果:

zgpeaces-MBP at ~/Workspace/LLM/langchain-llm-app ±(feature/textAndChat) ✗ ❯ python chat_lang_chain_of_thought.py
content='根据你的描述,我会推荐给你的女朋友购买蓝莓。蓝莓具有浪漫的紫色外观和淡淡的甜味,适合喜欢不太甜的人。蓝莓富含抗氧化剂和维生素C,对健康有益。此外,蓝莓还被视为象征着智慧和神秘感的水果,可能会增加一些浪漫氛围。你可以考虑购买一些新鲜的蓝莓来给你的女朋友一个惊喜。'
zgpeaces-MBP at ~/Workspace/LLM/langchain-llm-app ±(feature/textAndChat) ✗ ❯ python chat_lang_chain_of_thought.py
content='根据您的描述,您的女朋友喜欢不是很甜的水果,并且希望选择浪漫的水果。基于这些偏好,我建议您考虑购买葡萄和柚子。\n\n葡萄是一种不是很甜的水果,尤其是红葡萄。它们通常具有一定的酸度,同时也有一种浪漫的氛围。您可以选择有着鲜艳颜色和丰富口感的红葡萄。\n\n柚子也是一种不是很甜的水果,有些品种甚至具有一定的酸度。柚子的外观呈现出典雅的黄色和橙色,与浪漫的氛围相得益彰。\n\n这两种水果既满足了她喜欢不是很甜的需求,又具备一些浪漫的元素。最重要的是,您可以选择新鲜的、高质量的葡萄和柚子,以确保她能够享受到最好的水果体验。'

Zero-shot Chain of Thought

Zero-Shot Chain of Thought 中,你只要简单地告诉模型“让我们一步一步的思考(Let’s think step by step)”, 或者“请一步一步思考 step by step”,模型就能够给出更好的答案!

「Zero-shot Chain of Thought」指的是AI在面对一个全新的任务时,不仅能尝试解决它,而且还能展示其解题的思考过程。这种能力特别重要,因为它意味着AI可以处理它从未特别训练过的问题,并以一种易于理解和跟踪的方式展示其推理过程。

举个例子
假设你问AI:“一辆公交车在早上8点出发,速度为40公里/小时,目的地距离100公里,它什么时候到达?”在「Zero-shot Chain of Thought」的情况下,AI会直接开始解决这个问题,即使它以前没有特别针对这类问题进行训练。它不仅会告诉你答案是“早上10点”,还会展示它的计算过程,比如解释公交车需要2.5小时才能到达目的地。

为什么重要
这种方法对于提高AI的通用性和可解释性非常重要。它使得AI能够更自然地模拟人类的思考过程,并向用户清晰地展示如何得出特定的结论,这在教育、解释复杂问题或需要透明决策过程的场景中尤其有价值。

在这里插入图片描述

思维树Tree of Thoughts

在通常的CoT(思维链)方法中,LLMs倾向于在解决问题时线性地思考,如果出现错误,它们倾向于沿着错误的标准继续前进。

相比之下,在ToT(思维树)方法中,LLMs在每个思维阶段评估自己,并及早停止低效的方法,转而采用替代方法。
在这里插入图片描述
在这里插入图片描述

代码

  • https://github.com/zgpeace/pets-name-langchain/tree/feature/textAndChat
  • https://github.com/huangjia2019/langchain/tree/main/03_%E6%A8%A1%E5%9E%8BIO

参考

https://python.langchain.com/docs/modules/model_io/

参考

  • https://platform.openai.com/docs/guides/prompt-engineering

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

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

相关文章

docker 常用容器创建(自用)

mysql容器创建 docker run -p 3306:3306 --name mysql \ -v /wzy/dockerdata/mysql/mysql-log:/var/log/mysql \ -v /wzy/dockerdata/mysql/mysql-data:/var/lib/mysql \ -v /wzy/dockerdata/mysql/mysql-conf:/etc/mysql \ -v /wzy/dockerdata/mysql/mysql-files:/var/lib/my…

[DFS深度优先搜索]集合里的乘法

集合里的乘法 题目描述 给定一个目标数T和一个整数集合S,判断是否存在S的一个非空子集,子集中的数相乘的积为T。 关于输入 输入为两行。 第一行为目标数T,和S中的元素个数N,以空格隔开。 第二行为S中的N个元素,以空…

FASTJSON v2详解

FASTJSON 2是一个性能极致并且简单易用的Java JSON库。 FASTJSON 2是FASTJSON项目的重要升级,和FASTJSON 1相比,性能有非常大的提升,解决了autoType功能因为兼容和白名单的安全性问题。 性能极致,性能远超过其他流行JSON库&#x…

送你一篇 MacOS 命令手册

文章目录 1.文件系统命令ls - 列出目录内容cp - 复制文件或目录mv - 移动文件或目录rm - 删除文件或目录mkdir - 创建新目录rmdir - 删除空目录touch - 创建或更新文件 2.系统管理命令top - 显示系统进程信息ps - 显示当前进程状态kill - 终止进程system_profiler - 获取系统信…

UniApp 组件 u-tabs 详细讲解

基本用法 u-tabs 是一个选项卡组件&#xff0c;通过在 <u-tabs> 标签中插入多个 <u-tab> 标签来实现多个选项卡之间的切换。每个 <u-tab> 标签作为一个选项卡&#xff0c;可以设置标题和对应的内容。 下面是一个基本的示例&#xff1a; <u-tabs :curren…

多维代码特征提取技术浅析

最近我把《代码审计 C/C实践》一书中关于描述SCA工具的技术点之一——多维代码特征提取技术重新阅读了一下&#xff0c;理解一下多维代码特征提取技术以及在SCA工具中的运用。 SCA工具需要对知识库&#xff08;或称为源库我认为更合适&#xff09;中的软件代码提取特征值&…

Linux内核--内存管理(一)任务空间管理

目录 一、引言 二、基本概念梳理 三、用户态进程内存管理 ------>3.1、用户态 ------>3.2、内核态 ------>3.3、内存管理结构 ------>3.4、mm_struct ------>4.5、vm_area_struct 四、内核态结构 ------>4.1、32位内核态结构 ------>4.2、64位…

全网最细!Vue3实现路由缓存~

1、设置缓存对应的数据 需要在全局状态管理中&#xff0c;或者当前组件中添加数据&#xff08;本次演示在全局状态管理中&#xff0c;使用的是 pinia&#xff09; const coreStore defineStore(coreStore, {state () {return {// 缓存页面路由数组及组件cacheRoutes: [],inclu…

2018年4月26日 Go生态洞察:Go新品牌形象及标识发布

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

从代码执行,看单片机内存的分配

1、单片机执行指令过程详解 单片机执行程序的过程&#xff0c;实际上就是执行我们所编制程序的过程。即逐条指令的过程。计算机每执行一条指令都可分为三个阶段进行&#xff0c;即取指令--分析指令--执行指令。 取指令的任务是&#xff1a;根据程序计数器PC中的值从程序存储器读…

C语言基础介绍

1. C语言基础知识 C语言是一种计算机编程语言&#xff0c;是一门用于编写系统软件和应用软件的高级语言。C语言的基础知识包括&#xff1a; 数据类型&#xff1a;C语言中的数据类型包括整型、浮点型、字符型等。 变量&#xff1a;C语言中使用变量来存储数据&#xff0c;变量必…

Spring RabbitMQ那些事(2-两种方式实现延时消息订阅)

目录 一、序言二、死信交换机和消息TTL实现延迟消息1、死信队列介绍2、代码示例(1) 死信交换机配置(2) 消息生产者(3) 消息消费者 3、测试用例 三、延迟消息交换机实现延迟消息1、安装延时消息插件2、代码示例(1) 延时消息交换机配置(2) 消息生产者(3) 消息消费者 3、测试用例 …

python类的伪私有属性__X

1 python类的伪私有属性__X python类的伪私有属性&#xff0c;是为了避免实例内的命名空间冲突。 1.1 变量名压缩__X &#xff08;1&#xff09;描述&#xff1a;python的class语句内&#xff0c;开头有两个下划线&#xff0c;但结尾没有两个下划线的变量名&#xff0c;会自…

[Linux]进程创建➕进程终止

文章目录 1.再谈fork()函数1.1fork()创建子进程 OS都做了哪些工作?1.2对上述问题的理解1.3写时拷贝进行父子进程分离的优势1.4了解eip寄存器和pc1.5了解进程的上下文数据1.6对计算机组成的理解1.7fork常规用法1.8fork调用失败的原因 2.进程终止2.1进程终止时操作系统要做的工作…

输入一个数n,输出大写字母X c++ 描述 用例输入 1 4 用例输出 1 d d c c b b a b b c c d d

输入一个数n&#xff0c;输出大写字母X c 描述 用例输入 1 4 用例输出 1 d d c c b b a b b c c d d 以下是使用C编写的输出大写字母X的程序&#xff1a; #include <iostream> #include <cmath> int main() {int n;std::cout << "请输入一个数n&…

人工智能-注意力机制之Transformer

Transformer 比较了卷积神经网络&#xff08;CNN&#xff09;、循环神经网络&#xff08;RNN&#xff09;和自注意力&#xff08;self-attention&#xff09;。值得注意的是&#xff0c;自注意力同时具有并行计算和最短的最大路径长度这两个优势。因此&#xff0c;使用自注意力…

13年老鸟总结,性能测试方法汇总+性能响应很慢排查方法(详全)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、性能测试包含哪…

windows的bat文件(学习笔记)

简介 通过windows的cmd执行的批处理&#xff0c;扩展名可以是.bat或.cmd&#xff08;类似linux的shell脚本&#xff09; 所有语句符号不区分大小写 帮助提示信息&#xff1a;命令 /? 1 基本语法 (1) 注释&#xff1a;rem 注释文本不执行 (2) 关闭盘符输出&#xff1a;e…

Java实现-数据结构 2.时间和空间复杂度

.如何衡量一个算法的好坏&#xff1a;时间复杂度和空间复杂度 算法效率分为时间效率和空间效率&#xff0c;时间效率称为时间复杂度&#xff0c;空间效率称为空间复杂度 时间复杂度 算法的时间复杂度是一个数学函数&#xff0c;它描述了算法的运行时间&#xff0c;一个算法执…

读书笔记:《宽客人生:依曼纽尔·德曼》

金融工程&#xff0c;也叫数量金融&#xff0c;洞察了证券价值与不确定性之间的关系。 布莱克-斯科尔斯模型可以告诉我们如何利用标的股票来复制期权&#xff0c;以及复制期权的成本&#xff0c;做市商利用此来复制期权&#xff0c;以规避无法从其他人那里购买合适价格的期权的…