从 ReAct 到 Chain of Thought:Agent 推理技术演进

张开发
2026/5/30 3:03:42 15 分钟阅读
从 ReAct 到 Chain of Thought:Agent 推理技术演进
从 ReAct 到 Chain of Thought:Agent 推理技术演进引言:AI Agent 的新纪元在人工智能的快速发展历程中,我们见证了从早期专家系统到现代大语言模型(LLM)的巨大飞跃。然而,真正让 AI 系统从"被动回答"转变为"主动智能体"的关键突破,在于推理技术的演进。想象一下,当你问一个传统 AI 系统:"如果我在纽约时间早上 7 点打电话给在东京的朋友,他那边是几点?"它可能会直接给出答案。但如果你问:"我需要为下周的东京旅行做准备,请帮我规划一下,考虑到时差、天气、货币兑换和当地习俗。"这时,传统系统就会显得力不从心。这就是为什么Chain of Thought (CoT)和ReAct等推理技术如此重要。它们不仅仅是让 AI 给出答案,更是让 AI 展示思考过程,甚至采取行动。在这篇深度技术博客中,我们将:深入理解这些推理技术的核心原理探索它们如何从简单的 CoT 演进到复杂的 ReAct通过数学模型和代码实现来解析其工作机制构建一个实际的 Agent 项目探讨未来的发展趋势准备好了吗?让我们开始这段精彩的技术探索之旅!1. 基础概念:什么是 Agent 推理?1.1 核心概念在深入探讨具体技术之前,让我们先建立一些基础概念。Agent(智能体):在 AI 语境下,Agent 是指能够感知环境、做出决策并采取行动的自主系统。它不仅仅是回答问题,而是能够完成复杂任务。推理(Reasoning):推理是从已知信息推导出新结论的过程。在 AI 中,推理技术使模型能够:分解复杂问题逐步思考验证中间结果修正错误思路1.2 问题背景让我们回顾一下推理技术发展的历史背景。早期的语言模型,如 GPT-1 和 GPT-2,在简单任务上表现不错,但在面对需要多步推理的复杂问题时,往往表现不佳。例如:问题:一个商店有 15 个苹果,卖出了 7 个,又进货了 12 个,现在有多少个苹果?早期模型可能会直接给出答案,但你不知道它是怎么算出来的。更重要的是,当问题变得更复杂时:问题:小明有一些弹珠。他给了小红一半,然后又买了 5 个,现在他有 12 个。问小明最初有多少个弹珠?这时候,直接回答的模式就容易出错了。模型需要逆向思维,但如果没有明确的推理过程,它很容易迷失。1.3 传统方法的局限性让我们用代码来演示一下传统方法的问题。假设我们有一个简单的函数来模拟早期的问答:defsimple_qa(question):"""模拟早期的直接问答模式"""# 这是一个简化的模拟,实际的 LLM 要复杂得多if"苹果"inquestionand"卖出"inquestion:return"20个"# 假设这是正确答案elif"弹珠"inquestionand"最初"inquestion:return"14个"# 等等,正确答案应该是 14 吗?# 让我们算一下:假设最初有 x 个# x/2 + 5 = 12# x/2 = 7# x = 14# 对,是 14。但模型是怎么想到的呢?return"我不知道"# 测试print(simple_qa("一个商店有 15 个苹果,卖出了 7 个,又进货了 12 个,现在有多少个苹果?"))print(simple_qa("小明有一些弹珠。他给了小红一半,然后又买了 5 个,现在他有 12 个。问小明最初有多少个弹珠?"))问题在于:即使答案正确,我们也不知道模型是如何得出的。而且,当问题更复杂时,这种方法很容易失败。这就是 Chain of Thought 技术要解决的核心问题。2. Chain of Thought (CoT):让模型"思考"出声2.1 核心概念Chain of Thought(思维链)是由 Google Research 在 2022 年提出的一种提示工程技术。它的核心思想很简单:让模型在回答问题时,把思考过程也说出来。这就像我们教小学生做数学题时,要求他们"写出解题步骤"一样。通过明确推理过程,模型可以:更好地理解问题避免跳跃性思维更容易发现和修正错误2.2 CoT 的工作原理让我们用一个具体的例子来说明 CoT 是如何工作的。没有 CoT 的情况:问题:小明有一些弹珠。他给了小红一半,然后又买了 5 个,现在他有 12 个。问小明最初有多少个弹珠? 回答:14个使用 CoT 的情况:问题:小明有一些弹珠。他给了小红一半,然后又买了 5 个,现在他有 12 个。问小明最初有多少个弹珠? 让我们一步一步思考: 1. 首先,我们需要从结果倒推。 2. 最后小明有 12 个弹珠,这是在他买了 5 个之后的数量。 3. 所以在买 5 个之前,他有 12 - 5 = 7 个弹珠。 4. 这 7 个弹珠是他给了小红一半之后剩下的。 5. 这意味着他给小红之前的数量是 7 × 2 = 14 个。 6. 所以,小明最初有 14 个弹珠。 答案:14个看到区别了吗?通过明确思考过程,模型不仅更有可能得到正确答案,而且我们也能理解它是如何思考的。2.3 CoT 的数学模型让我们用数学的方式来描述 CoT 的工作原理。假设我们有一个问题QQQ,我们希望得到答案AAA。在传统的方法中,我们直接建模:P(A∣Q)P(A|Q)P(A∣Q)而在 CoT 中,我们引入了中间推理步骤R=[r1,r2,...,rk]R = [r_1, r_2, ..., r_k]R=[r1​,r2​,...,rk​],然后建模:P(A,R∣Q)=P(A∣R,Q)×P(R∣Q)P(A,R|Q) = P(A|R,Q) \times P(R|Q)P(A,R∣Q)=P(A∣R,Q)×P(R∣Q)这个公式告诉我们,我们可以将问题分解为两个部分:首先,生成推理步骤RRR然后,基于推理步骤RRR和问题QQQ,生成答案AAA但实际上,在 CoT 中,这两个过程是交织在一起的。我们可以将其看作是一个自回归过程:P(r1∣Q)×P(r2∣r1,Q)×...×P(rk∣rk−1,...,r1,Q)×P(A∣rk,...,r1,Q)P(r_1|Q) \times P(r_2|r_1,Q) \times ... \times P(r_k|r_{k-1},...,r_1,Q) \times P(A|r_k,...,r_1,Q)P(r1​∣Q)×P(r2​∣r1​,Q)×...×P(rk​∣rk−1​,...,r1​,Q)×P(A∣rk​,...,r1​,Q)这样,每一步推理都建立在前一步的基础上,形成了一个完整的思维链条。2.4 CoT 的类型CoT 主要有两种类型:Few-shot CoT(少样本思维链):在提示中提供几个示例,展示如何进行思考和推理。Zero-shot CoT(零样本思维链):不提供示例,只是简单地加上一句"让我们一步一步思考"(Let’s think step by step)。让我们用代码来演示这两种方法。2.5 CoT 的算法流程让我们用流程图来展示 CoT 的工作流程:否是Few-shotZero-shot输入问题 Q是否使用 CoT?直接生成答案 A准备 CoT 提示CoT 类型?包含推理示例添加思考指令生成推理步骤 R基于 R 生成答案 A输出 A 和 R输出 A2.6 CoT 的代码实现现在,让我们用 Python 代码来实现一个简单的 CoT 系统。我们将使用 OpenAI 的 API 来模拟 LLM 的行为。importopenaiimportosfromtypingimportList,Dict,Tuple# 设置 OpenAI API 密钥(实际使用时请从环境变量获取)openai.api_key=os.getenv("OPENAI_API_KEY","your-api-key-here")classCoTReasoner:"""Chain of Thought 推理器"""def__init__(self,model:str="gpt-3.5-turbo"):self.model=modeldef_call_llm(self,messages:List[Dict[str,str]])-str:"""调用 LLM 并返回响应"""response=openai.ChatCompletion.create(model=self.model,messages=messages,temperature=0.7,max_tokens=1000)returnresponse.choices[0].message.contentdefdirect_answer(self,question:str)-str:"""直接回答,不使用 CoT"""messages=[

更多文章