AI Agent 架构设计:ReAct、CoT与Tool Use三大范式对比

AI Agent 架构设计:ReAct、CoT与Tool Use三大范式对比 AI Agent 架构设计ReAct、CoT与Tool Use三大范式对比AI Agent 的推理能力直接决定了其解决问题的效果。目前业界形成了三种主流的推理架构范式Chain-of-Thought (CoT)、ReAct和Tool Use。本文将深入对比三者的原理、适用场景和代码实现。一、Chain-of-Thought (CoT)让模型先想后答核心思想CoT 通过在 Prompt 中引导模型逐步展示推理过程而非直接给出答案。研究表明让模型说出思考过程能显著提升复杂任务数学、逻辑推理的准确率。经典示例# CoT Prompt 示例cot_prompt 请逐步思考并回答下面的问题问题一个农场里有鸡和兔头共35个脚共94只。鸡和兔各有多少只思考过程1. 假设全是鸡35个头应该有 35 x 2 70 只脚2. 实际有94只脚多出 94 - 70 24 只脚3. 每只兔比鸡多2只脚所以兔有 24 / 2 12 只4. 鸡有 35 - 12 23 只答案鸡23只兔12只优缺点优点 缺点 ------------ 无需外部工具纯文本推理 无法获取实时信息 显著提升逻辑任务准确率 幻觉问题无法避免 实现简单成本低 不能执行代码或调用API二、ReAct推理与行动交替进行核心思想ReActReasoning Acting是CoT 工具调用的结合。Agent 在每一步交替执行1.Thought思考分析当前状态决定下一步2.Action行动调用工具或输出结果3.Observation观察获取工具返回的结果ReAct 循环流程用户输入 - Thought - Action - Observation - Thought - Action - ... - 最终答案Python 实现示例import reclass ReActAgent: def __init__(self, llm, tools): self.llm llm self.tools tools self.scratchpad # 思考记录 def run(self, query, max_steps5): self.scratchpad fQuestion: {query} for step in range(max_steps): # 1. Thought思考下一步 thought_prompt self.scratchpad Thought: thought self.llm(thought_prompt) self.scratchpad fThought: {thought} # 2. Action决定行动 action_prompt self.scratchpad Action: action_text self.llm(action_prompt) self.scratchpad fAction: {action_text} # 解析 Action action_match re.search(r[(.?)(?:((.?)))?], action_text) if not action_match: return action_text # 直接输出答案 tool_name action_match.group(1) tool_input action_match.group(2) or # 3. Observation执行工具 if tool_name in self.tools: obs self.toolstool_name self.scratchpad fObservation: {obs} else: return fTool {tool_name} not found return self.scratchpad工具定义tools { Search: lambda q: f搜索结果关于{q}的相关信息..., Calculator: lambda expr: str(eval(expr)) # 注意生产环境需安全沙箱}优缺点优点 缺点 ------------ 推理与工具调用无缝结合 循环次数可能过多成本高 可追溯每一步决策过程 对 Prompt 工程要求高 能处理需要实时信息的任务 可能陷入循环或重复调用三、Tool Use (Function Calling)结构化工具调用核心思想Tool Use 是一种结构化输出范式。LLM 不直接生成文本而是输出函数调用参数JSON格式由外部系统执行函数后将结果返回给模型。OpenAI Function Calling 示例import openaifunctions [ { name: get_weather, description: 获取指定城市的天气信息, parameters: { type: object, properties: { city: {type: string, description: 城市名称}, date: {type: string, description: 日期格式YYYY-MM-DD} }, required: [city] } }]response openai.chat.completions.create( modelgpt-4, messages[{role: user, content: 北京明天天气怎么样}], functionsfunctions, function_callauto)模型可能返回函数调用{name: get_weather, arguments: {city: 北京, date: 2025-01-16}}与 ReAct 的对比特性 ReAct | Tool Use -------------|---------- 输出格式 自由文本 | 结构化JSON 可解析性 需正则/LLM解析 | 直接解析 可控性 较低 | 高参数可校验 适用场景 探索性任务 | 确定性工具调用 主流框架 LangChain ReAct | OpenAI Functions, Claude Tools四、三种范式对比总结维度 CoT | ReAct | Tool Use -----------|-------|----------核心能力纯推理 | 推理行动 | 结构化工具调用信息来源仅训练数据 | 实时工具 | 实时工具复杂度低 | 中 | 中成本最低 | 较高多轮调用 | 较低单轮/少轮可追溯性中需查看推理链 | 高完整Thought-Action-Observation | 中仅工具调用记录推荐场景数学/逻辑推理 | 复杂多步骤任务 | 确定性API调用五、如何选择纯逻辑问题- 用CoT需要查信息再回答- 用ReAct与外部API/数据库交互- 用Tool Use生产环境复杂任务-ReAct Tool Use 混合如 LangChain Agent六、LangChain 中的统一实现from langchain.agents import Tool, AgentExecutor, create_react_agentfrom langchain import hubfrom langchain_openai import ChatOpenAIllm ChatOpenAI(modelgpt-4)tools [Tool(nameSearch, funcsearch_func, description搜索工具)]prompt hub.pull(hwchase17/react)agent create_react_agent(llm, tools, prompt)executor AgentExecutor(agentagent, toolstools, verboseTrue)executor.invoke({input: 查找今天的热门AI新闻})LangChain 将三种范式统一封装开发者可以灵活组合使用。---总结没有最好的范式只有最合适的场景。理解三者差异才能在项目中做出正确选择。