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,一经查实,立即删除!

相关文章

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

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

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

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

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

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

C语言基础介绍

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

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

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

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

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

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

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

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

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

windows的bat文件(学习笔记)

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

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

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

vim+xxd编辑十六进制的一个大坑:自动添加0x0a

问题描述 今天在做一个ctf题,它给了一个elf文件,我要做的事情是修复这个elf文件,最后执行它,这个可执行文件会计算它自身的md5作为这道题的flag。我把所有需要修复的地方都修复了,程序也能成功运行,但是fl…

【电路笔记】-快速了电阻

电阻类型 文章目录 电阻类型1、概述2、电阻器的组成类型2.1 碳电阻器2.2 薄膜电阻器2.3 绕线电阻器 3、总结 电阻器是所有电子元件中最基本、最常用的元件,人们几乎认为电阻器是理所当然的,但它们在电路中起着至关重要的作用。 1、概述 有许多不同类型的…

SpringCloud之Gateway(统一网关)

文章目录 前言一、搭建网关服务1、导入依赖2、在application.yml中写配置 二、路由断言工厂Route Predicate Factory三、路由过滤器 GatewayFilter案例1给所有进入userservice的请求添加一个请求头总结 四、全局过滤器 GlobalFilter定义全局过滤器,拦截并判断用户身…

深入解析:如何开发抖音票务小程序

当下,开发抖音票务小程序成为了吸引年轻用户群体的一种创新方式。本文将深入解析如何开发抖音票务小程序,探讨关键步骤和技术要点。 1.确定需求和功能 考虑到抖音的用户特点,可以加入与短视频相关的票务功能,如在线购票、观影记录…

IDEA中的Postman?完全免费!

Postman是大家最常用的API调试工具,那么有没有一种方法可以不用手动写入接口到Postman,即可进行接口调试操作?今天给大家推荐一款IDEA插件:Apipost Helper,写完代码就可以调试接口并一键生成接口文档!而且还…

Jenkins用126邮箱发邮件为什么发不出去

1、检查 Jenkins Location中的邮件地址配置与发邮件的地址配置是否一致 Manage Jenkins -》 system 2、检查地址和端口号 3、检查邮箱的登录配置是否正确(这个地方的配置方式网上一抓一大把,自己搜一下就好) 4、126邮箱发邮件不需要勾选ssl协…

Blender学习--模型贴图傻瓜级教程

Blender 官方文档 1. Blender快捷键: 快捷键说明 按住鼠标滚轮:移动视角Tab:切换编辑模式和物体模式鼠标右键: 编辑模式: 物体模式: 其他: 2. 下面做一个球体贴一张纹理的操作 2.1 效果如下…

VM虚拟机中Ubuntu14.04安装VM tools后仍不能全屏显示

1、查看Ubuntu所支持的分辨率大小。 在终端处输入: xrandr,回车 2、输入你想设置的分辨率参数。 我设置的为1360x768,大家可以根据自己的具体设备设置。 在终端输入:xrandr -s 1360x768 注意:这里1360后边是字母 x 且…

Selenium-介绍下其他骚操作

Chrome DevTools 简介 Chrome DevTools 是一组直接内置在基于 Chromium 的浏览器(如 Chrome、Opera 和 Microsoft Edge)中的工具,用于帮助开发人员调试和研究网站。 借助 Chrome DevTools,开发人员可以更深入地访问网站&#xf…

交叉编译 和 软硬链接 的初识(面试重点)

目录 交叉编译的初认识Q&A Q1: 编译是什么? Q2: 交叉编译是什么? Q3: 为什么要交叉编译 Q3.1:树莓派相对于C51大得多,可以集成编译器比如gcc,那么树莓派就不需要交叉编译了吗? Q4: 什么是宿主机和…