我正在参加「豆包MarsCode AI练中学体验活动」详情请看:掘金小册上线 AI练中学功能 | 你的 AI 编程助教喊你免费领小册啦!
前言
用思维链和思维树提升模型思考质量
思维链: CoT(Chain of Thought)的概念来引导模型的推理
Chain of Thought
CoT这个概念来源于学术界,是谷歌大脑的Jason Wei等人在2022年的论文《 Chain-of-Thought Prompting Elicits Reasoning in Large Language Models(自我一致性提升了语言模型中的思维链推理能力)》中提出的概念。他们提出,如果生成一系列的中间推理步骤,就能够显著提高大型语言模型进行复杂推理的能力。
Few-Shot CoT
Few-Shot CoT 方法通过在提示中加入少量的链式思维实例(即Chain-of-Thought Prompting),能够有效提升大型语言模型的推理能力。换句话说,这种方法是通过展示一至两个含有详细推理步骤的例子,来引导模型更好地理解并模仿这种解决问题的方式。
实际上,LangChain 的核心组成部分 Agent,其主要任务就是实施高效的提示工程技术,并广泛采用预先设定的 Few-Shot 和 Chain-of-Thought (CoT) 模板。随着我们后续课程的深入学习,对于这一点的理解将会更加深刻和全面
Zero-Shot CoT
在Zero-Shot CoT中,你只要简单地告诉模型" 让我们一步步的思考(Let's think step by step) ",模型就能够给出更好的答案!
Few-Shot CoT,指的就是在带有示例的提示过程中,加入思考的步骤,从而引导模型给出更好的结果。
Zero-Shot CoT,就是直接告诉模型要一步一步地思考,慢慢地推理。
Chain of Thought 实战
项目需求:在这个示例中,你正在开发一个AI运营助手,我们要展示AI如何根据用户的需求推理和生成答案。然后,AI根据当前的用户请求进行推理,提供了具体的花卉建议并解释了为什么选择这些建议。
python
# 设置环境变量和API密钥
import os
os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'
# 创建聊天模型
from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI(temperature=0)
# 设定 AI 的角色和目标
role_template = "你是一个为花店电商公司工作的AI助手, 你的目标是帮助客户根据他们的喜好做出明智的决定"
# CoT 的关键部分,AI 解释推理过程,并加入一些先前的对话示例(Few-Shot Learning)
cot_template = """
作为一个为花店电商公司工作的AI助手,我的目标是帮助客户根据他们的喜好做出明智的决定。
我会按部就班的思考,先理解客户的需求,然后考虑各种鲜花的涵义,最后根据这个需求,给出我的推荐。
同时,我也会向客户解释我这样推荐的原因。
示例 1:
人类:我想找一种象征爱情的花。
AI:首先,我理解你正在寻找一种可以象征爱情的花。在许多文化中,红玫瑰被视为爱情的象征,这是因为它们的红色通常与热情和浓烈的感情联系在一起。因此,考虑到这一点,我会推荐红玫瑰。红玫瑰不仅能够象征爱情,同时也可以传达出强烈的感情,这是你在寻找的。
示例 2:
人类:我想要一些独特和奇特的花。
AI:从你的需求中,我理解你想要的是独一无二和引人注目的花朵。兰花是一种非常独特并且颜色鲜艳的花,它们在世界上的许多地方都被视为奢侈品和美的象征。因此,我建议你考虑兰花。选择兰花可以满足你对独特和奇特的要求,而且,兰花的美丽和它们所代表的力量和奢侈也可能会吸引你。
"""
from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate, SystemMessagePromptTemplate
system_prompt_role = SystemMessagePromptTemplate.from_template(role_template)
system_prompt_cot = SystemMessagePromptTemplate.from_template(cot_template)
# 用户的询问
human_template = "{human_input}"
human_prompt = HumanMessagePromptTemplate.from_template(human_template)
# 将以上所有信息结合为一个聊天提示
chat_prompt = ChatPromptTemplate.from_messages([system_prompt_role, system_prompt_cot, human_prompt])
prompt = chat_prompt.format_prompt(human_input="我想为我的女朋友购买一些花。她喜欢粉色和紫色。你有什么建议吗?").to_messages()
# 接收用户的询问,返回回答结果
response = llm(prompt)
print(response)
Tree of Thought
Chain-of-Thought (CoT) 的理念显著提升了大型语言模型生成高质量答案的能力,但对于那些需要深入探索或战略规划的复杂任务而言,传统的或是基础的提示技术显得力有未逮。受 CoT 启发,Yao 和 Long 等研究者几乎同步在其论文《思维之树:使用大型语言模型进行深思熟虑的问题解决》与《大型语言模型指导的思维之树》中,引入了 Tree of Thoughts (ToT) 框架。这一框架是在思维链提示的基础上发展而来的,旨在指导语言模型构建一个由连贯语言序列(即解决问题过程中的各个阶段)构成的思维树,而非直接输出最终答案。
ToT 构建了一个用于处理需多步推理任务的框架,其关键在于使模型具备生成及评估自身思考过程的能力,并将此能力与诸如广度优先搜索或深度优先搜索等搜索算法相结合,从而系统地展开探索与验证工作。这种方法不仅扩展了模型解决问题的深度和广度,也提高了面对复杂挑战时的灵活性和适应性。
ToT 框架为每个任务定义具体的思维步骤和每个步骤的候选项数量。例如,要解决一个数学推理任务,先把它分解为3个思维步骤,并为每个步骤提出多个方案,并保留最优的5个候选方案。然后在多条思维路径中搜寻最优的解决方案。