思维链(CoT)理解分享

摘要

CoT (Chain-of-Thought)通过生成中间推理步骤来提升模型的推理能力,主要包括 Few-Shot CoTZero-Shot CoT 两种应用方式。ToT(Tree of Thought)是对CoT思想的扩展,通过构建思维树提供多种解决方案,帮助分析和解决复杂问题。

什么是思维链

思维链是一种引导大模型像人类一样,按照顺序一步步思考问题解决方案的方法。

有什么效果

  • 提升大模型的回答正确率(质量),减少幻觉。
    • 前提条件:目标模型参数需大于20b才能有效。

备注:GPT-3的参数数量是175b,3.5版本则更多。

如何实现

通过优化提示词,将用户输入的问题拆解成多个步骤,引导大模型按顺序逐步执行。

  • CoT:通过生成中间推理步骤来强化模型的推理能力。应用方法包括 Few-Shot CoT(通过提供链式思考示例)和 Zero-Shot CoT(直接告知模型按部就班推理)。

  • ToT:进一步拓展了CoT思想。ToT框架为每个任务定义具体思维步骤和候选项数量,通过多思考路径解决复杂问题,结合语言模型生成能力、搜索算法和强化学习达到更好效果。

Few-Shot CoT(少量示例)

模板设计总结:

  • 首先阐述AI角色为xxx助手,目标是xxx。
  • 接着描述思考步骤,先理解客户需求,再考虑目标,最后给出推荐并解释原因。同时提供示例。这些示例展示AI如何依思维链思考给出答案。

例如:

cot_template = """ 作为一个为水果电商公司工作的AI助手,我的目标是帮助客户根据他们的喜好做出明智的决定。

我会按部就班的思考,先理解客户的需求,然后考虑各种水果的涵义,最后根据这个需求,给出我的推荐。 同时,我也会向客户解释我这样推荐的原因。

示例 1: 人类:我想找一种象征爱情的水果。

AI:象征爱情的水果之一是草莓。草莓以其鲜艳的红色和心形外观,成为爱情的象征,通常与浪漫和情感联系在一起。因此,考虑到这一点,我会推荐草莓。草莓心形外观:草莓的心形轮廓与爱情的传统符号------心形------相吻合,使其成为爱情的自然象征。鲜艳的红色:草莓的红色在许多文化中与激情和爱情联系在一起,象征着热情和浓烈的感情。甜美的味道:草莓的甜味象征着爱情的甜蜜和愉悦。这是你在寻找的。

示例 2: 人类:我想要一些独特和奇特的水果。

AI:从你的需求中,一种独特和奇特的水果是"火龙果"。这种水果以其独特的外观和口感而闻名,通常具有明亮的粉红色皮肤和点缀着黑色种子的白色或红色果肉。因此,我建议你考虑火龙果。火龙果独特性:火龙果的外形和味道与众不同,为寻求新奇体验的水果爱好者提供了完美选择。而且,火龙果视觉吸引力:其鲜艳的颜色和特殊的形状在视觉上吸引人,常常成为餐桌上的焦点。也可能会吸引你。

"""

langchain中的COT相关demo


Zero-Shot CoT(没有示例)

简单地增加一句提示词即可:

让我们一步步的思考(Let's think step by step)

ToT

目前主流的有两种实现方式:

1.(通用版)像langchain那样

  1. 生成可能的解决方案
  2. 评估每个解决方案
  3. 深入分析评估每个解决方案
  4. 最终排名

参考资料:https://arxiv.org/pdf/2305.08291

langchain中的tot相关实现

参考:

tot --- 🦜🔗 LangChain documentation

Demo(非langchain官方)

https://medium.com/@astropomeai/implementing-the-tree-of-thoughts-in-langchains-chain-f2ebc5864fac

提问代码
python 复制代码
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.chat_models import ChatOpenAI


template ="""
Step1 :
 
I have a problem related to {input}. Could you brainstorm three distinct solutions? Please consider a variety of factors such as {perfect_factors}
A:
"""

prompt = PromptTemplate(
    input_variables=["input","perfect_factors"],
    template = template                      
)

chain1 = LLMChain(
    llm=ChatOpenAI(temperature=0, model="gpt-4o-mini"),
    prompt=prompt,
    output_key="solutions"
)

template ="""
Step 2:

For each of the three proposed solutions, evaluate their potential. Consider their pros and cons, initial effort needed, implementation difficulty, potential challenges, and the expected outcomes. Assign a probability of success and a confidence level to each option based on these factors

{solutions}

A:"""

prompt = PromptTemplate(
    input_variables=["solutions"],
    template = template                      
)

chain2 = LLMChain(
    llm=ChatOpenAI(temperature=0, model="gpt-4o-mini"),
    prompt=prompt,
    output_key="review"
)

template ="""
Step 3:

For each solution, deepen the thought process. Generate potential scenarios, strategies for implementation, any necessary partnerships or resources, and how potential obstacles might be overcome. Also, consider any potential unexpected outcomes and how they might be handled.

{review}

A:"""

prompt = PromptTemplate(
    input_variables=["review"],
    template = template                      
)

chain3 = LLMChain(
    llm=ChatOpenAI(temperature=0, model="gpt-4o-mini"),
    prompt=prompt,
    output_key="deepen_thought_process"
)

template ="""
Step 4:

Based on the evaluations and scenarios, rank the solutions in order of promise. Provide a justification for each ranking and offer any final thoughts or considerations for each solution
{deepen_thought_process}

请用中文回答
A:"""

prompt = PromptTemplate(
    input_variables=["deepen_thought_process"],
    template = template                      
)

chain4 = LLMChain(
    llm=ChatOpenAI(temperature=0, model="gpt-4o-mini"),
    prompt=prompt,
    output_key="ranked_solutions"
)



from langchain.chains import SequentialChain

overall_chain = SequentialChain(
    chains=[chain1, chain2, chain3, chain4],
    input_variables=["input", "perfect_factors"],
    output_variables=["ranked_solutions"],
    verbose=True
)

print(overall_chain({"input":"human colonization of Mars", "perfect_factors":"The distance between Earth and Mars is very large, making regular resupply difficult"}))
回答结果
json 复制代码
{
  "input": "human colonization of Mars",
  "perfect_factors": "The distance between Earth and Mars is very large, making regular resupply difficult",
  "ranked_solutions": [
    {
      "rank": 1,
      "title": "闭合生态生命支持系统(CELSS)",
      "evaluation": "CELSS 被认为是最有前途的解决方案,因为它直接解决了火星殖民过程中的基本生存需求,包括食物和空气的自给自足。成功的生态管理能够确保殖民者的健康与福祉,为建立可持续的社区奠定基础。",
      "pros": [
        "潜力大:能够在本地生产食品和氧气,减少对地球补给的依赖,是长期生存的关键。",
        "创新性:与农业生物技术公司合作,能加速开发适合火星条件的作物品种。",
        "可学习性:在地球进行模拟实验可以及时调整策略,降低在火星试验中的风险。"
      ],
      "final_thought": "尽管面临生态崩溃和心理健康挑战的风险,采用灵活的补救措施(如水培系统与心理健康监测)可以增强系统的韧性。"
    },
    {
      "rank": 2,
      "title": "模块化栖息地设计与3D打印",
      "evaluation": "模块化栖息地设计和3D打印技术的整合提供了快速适应与扩展的可能性,但相较于CELSS,其生存性与可持续性依赖于材料的可用性与性能。",
      "pros": [
        "精确性与扩展性:能够迅速建立适宜的居住环境并根据需要进行扩展,促进社区的聚集与互助。",
        "资源利用:强调在火星原材料的现场使用(ISRU),有助于减少运输、建造的经济负担。"
      ],
      "final_thought": "虽然存在设备故障和环境挑战的隐忧,适应性的设计能帮助应对火星的极端条件,促进创新与文化融合。"
    },
    {
      "rank": 3,
      "title": "建立太空经济与资源网络",
      "evaluation": "建立火星经济网络能激励投资与资源开采,但相比之下,依赖外部市场和资源的方式较为脆弱,容易受到全球经济波动的影响。",
      "pros": [
        "经济激励:通过法律框架与投资激励,可以吸引私营部门的参与与开发。",
        "国际合作:促进国际间的合作与资源开发,有助于在火星建立国际化的社区。"
      ],
      "final_thought": "尽管其潜力巨大,一旦市场不稳定可能会导致发展的停滞,因此需要注意平衡经济增长与环境可持续性的矛盾。"
    }
  ],
  "overall_conclusion": "这三种解决方案各自具有不同的优缺点和实施挑战。闭合生态生命支持系统在生存需求的自给自足上具备最高的潜力,适合长期的人类火星殖民。模块化栖息地设计为栖息环境的快速适应提供了可能,而建立太空经济则更依赖于外部因素。通过有效的规划和合作,各种解决方案的结合使用,能够促进火星殖民的成功实施。"
}

2.(提示词版)提供示例,让大模型按照示例的讨论去分析、解决问题

模板设计总结
  1. 理解用户问题、需求。
  2. 考虑可能的选项或解决方案并说明原因。
  3. 根据需求筛选最佳选择,分析各候选方案是否符合。
  4. 给出建议,如推荐xxx方案等。
优点:速度快、成本低、灵活性高(可以根据不同类型的问题采用相应的tot示例)

直接给出一个tot示例(这个示例可以从上面通用版使用高级模型一步步提问得出),告诉AI就按照这种方式去思考、分析和解决用户给出的问题。


总结

思维链(CoT)和思维树(ToT)为大模型的推理能力提供了强有力的支持,通过系统化的思考步骤和多路径分析,能够有效提升模型的准确性和可靠性。这种方法不仅推动了人工智能技术的发展,也为解决复杂问题提供了新的思路。随着技术的不断进步,我们有理由相信,未来的AI将能够更好地理解和服务于人类的多样化需求,为社会带来更多的创新和改变。让我们期待一个更加智能和高效的未来!


💥 更多精彩文章:期待与您一起共同成长。✨加入我们的旅程,共同发现更多精彩!🌟🌟


参考文档

基于langchain实现的COT demo:

思维链的介绍文章(写的很全面):

思维链作用论文:

思维链的原理:

AutoGPT的原理(大白话):

总结笔记

相关推荐
niech_cn2 天前
Ai编程从零开始全栈开发一个后台管理系统之接口开发node+express+mysql(十五)
mysql·express·ai编程
小众AI3 天前
RapidOCR - 兼容性广泛的多平台多语言OCR工具
人工智能·ai编程
AI程序员-李明宇3 天前
AI 的时代,新科技和新技术如何推动跨学科的整合?
图像处理·人工智能·开源·语音识别·ai编程·agi·杨立昆
小众AI4 天前
ollama-webui - Ollama的ChatGPT 风格的 Web 界面
人工智能·ai编程
senger_lcc5 天前
【IDER、PyCharm】免费AI编程工具完整教程:ChatGPT Free - Support Key call AI GPT-o1 Claude3.5
chatgpt·pycharm·ai编程
Tp_jh7 天前
从数据库模型设计到字段设计,用自然语言实现数据库开发,颠覆传统的数据库开发模式
数据库·ide·gpt·mysql·ai编程·数据库开发·数据库架构
周易宅8 天前
01-Ubuntu24.04LTS上安装PGSQL
linux·运维·ubuntu·ai编程
海盗12348 天前
Visual studio的AI插件-通义灵码
ide·ai编程·visual studio
月阳羊13 天前
【通信协议】CAN总线通信协议的学习,(三)stm32f103系列单片机,can通信的代码实现
c++·stm32·单片机·嵌入式硬件·ai编程