当前位置: 首页 > news >正文

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

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

AI Agent 的推理能力直接决定了其解决问题的效果。目前业界形成了三种主流的推理架构范式:Chain-of-Thought (CoT)ReActTool 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:推理与行动交替进行

核心思想

ReAct(Reasoning + Acting)是CoT + 工具调用的结合。Agent 在每一步交替执行:1.Thought(思考):分析当前状态,决定下一步2.Action(行动):调用工具或输出结果3.Observation(观察):获取工具返回的结果

ReAct 循环流程

用户输入 -> Thought -> Action -> Observation -> Thought -> Action -> ... -> 最终答案

Python 实现示例

import re

class ReActAgent: def __init__(self, llm, tools): self.llm = llm self.tools = tools self.scratchpad = "" # 思考记录 def run(self, query, max_steps=5): self.scratchpad = f"Question: {query} " for step in range(max_steps): # 1. Thought:思考下一步 thought_prompt = self.scratchpad + " Thought:" thought = self.llm(thought_prompt) self.scratchpad += f"Thought: {thought} " # 2. Action:决定行动 action_prompt = self.scratchpad + " Action:" action_text = self.llm(action_prompt) self.scratchpad += f"Action: {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 += f"Observation: {obs} " else: return f"Tool '{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 openai

functions = [ { "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( model="gpt-4", messages=[{"role": "user", "content": "北京明天天气怎么样?"}], functions=functions, function_call="auto")

模型可能返回函数调用:

{"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 ChatOpenAI

llm = ChatOpenAI(model="gpt-4")tools = [Tool(name="Search", func=search_func, description="搜索工具")]prompt = hub.pull("hwchase17/react")agent = create_react_agent(llm, tools, prompt)executor = AgentExecutor(agent=agent, tools=tools, verbose=True)executor.invoke({"input": "查找今天的热门AI新闻"})

LangChain 将三种范式统一封装,开发者可以灵活组合使用。

---

总结:没有最好的范式,只有最合适的场景。理解三者差异,才能在项目中做出正确选择。
http://www.jsqmd.com/news/1103564/

相关文章:

  • 架构师视角:基于 Docker 与异构计算的边缘 AI 视频平台设计 —— 统一国标 GB28181/RTSP 接入与源码交付实战
  • 谷歌研究人员引入了“忠实不确定性”,使大型语言模型能够提供最佳猜测而非幻觉
  • 如何用MeEdu快速搭建数据安全的在线网校系统?完整开源解决方案指南
  • KKManager终极指南:如何三分钟搞定游戏Mod管理,告别手动安装烦恼
  • 抖音批量下载终极指南:5分钟掌握无水印视频批量下载技巧
  • 完整标准 Git 新建项目流程(分两种场景:全新本地项目、克隆远程空仓库)
  • Linux中自动化备份全网服务器数据平台(Rsync+shell)
  • DayZ单机离线模式完全指南:打造专属末日生存世界
  • 收藏!AI小白必看:2026年最该懂的6个AI概念,轻松入门大模型
  • 逆向解析短视频应用加密参数:X-Gorgon签名与MAS加密算法详解
  • 小红书全自动评论脚本已经连续运行7分钟----大概率能稳定运行了
  • Code Review有什么好处?
  • KKManager终极指南:三招告别游戏Mod管理烦恼,轻松实现自动化管理
  • Windows系统驱动管理难题如何解决?DriverStore Explorer深度解析
  • AI Agent 工具调用(Tool Use)实战指南
  • 解密万路高并发:基于 Docker 与边缘计算的国标 GB28181/RTSP 视频流统一接入平台架构设计(附源码交付)
  • AI算力基础设施厂商对比:联想问天算力底座的定制化算力服务能力
  • 时尚美妆电商网站-springboot + vue
  • DeepSeek突然扩招33岗,梁文锋靠啥底气逆势扩张?
  • AI写专著神器揭秘!利用AI工具,20万字专著写作效率提升数倍!
  • 多平台私信工具选型避坑指南:功能、合规与留资效率对比
  • ChatLog:三分钟解锁QQ群聊天记录的数据洞察力
  • WarcraftHelper终极指南:5分钟彻底解决魔兽争霸3兼容性问题
  • 废掉80%网站流量的,居然是小小的评论区!
  • 小鹏机器人“铁三角”离职,何小鹏亲自下场,量产前夜压力几何?
  • AI Agent 入门:从概念到实战
  • ioctl 命令号冲突导致驱动无法识别
  • ICM-42688-P与TM4C129XNCZAD在工业运动控制中的应用
  • 3个关键步骤:彻底告别网盘下载限速的智能解决方案
  • 拆解开题创作全流程:paperxie 智能开题生成功能,一站式解决毕业生写作卡点