create_tool_calling_agent、create_react_agent区别

在 LangChain 框架中,create_tool_calling_agentcreate_react_agent 是两种用于构建智能体的核心函数。它们的主要区别在于模型与工具交互的机制提示词的格式 以及对模型能力的要求

简而言之:

  • create_react_agent :基于经典的 ReAct (Reasoning + Acting) 模式,依赖文本解析,兼容性强但可能不够稳定。
  • create_tool_calling_agent :基于模型的原生工具调用 能力,依赖结构化输出,更稳定、高效,是现在的推荐做法。

下面是详细的对比分析:

1. create_react_agent (经典 ReAct 模式)

这是 LangChain 早期最流行的构建方式。它的核心思想是让 LLM 通过生成特定的文本来决定下一步行动。

  • 工作原理
    1. 提示词工程 :Prompt 中明确指示模型按照特定的格式(如 Thought:, Action:, Action Input:)进行思考。

    2. 文本生成:模型生成一段纯文本,例如:

      复制代码
         Thought: 我需要查询当前的天气
         Action: Search
         Action Input: 北京天气
  1. 文本解析 :LangChain 使用 OutputParser 解析这段文本,提取出要调用的工具名称和参数。

  2. 执行与循环 :执行工具,将结果作为新的 Observation 拼接到 Prompt 中,再次发给模型。

  • 优点
    • 兼容性极好:理论上任何能够生成文本的 LLM(包括早期的开源模型)都可以使用,只要它能遵循指令格式。
  • 缺点
    • 脆弱性:如果模型生成了不符合格式的文本(例如多打了一个空格、说了句废话),解析器就会报错,导致流程中断。
    • Token 消耗:每次循环都需要把完整的思考过程和特定的格式说明发回给模型。
    • 速度较慢:因为依赖于文本生成和正则解析,处理多步骤推理时效率较低。

2. create_tool_calling_agent (原生工具调用模式)

这是随着 OpenAI 推出 Function Calling API 后兴起的方式,也是 LangChain 目前推荐的主流方式。

  • 工作原理

    1. 绑定工具 :通过 .bind_tools() 方法将工具的定义(Schema)以 JSON Schema 的格式附加在模型请求中。
    2. 原生识别 :LLM 在推理时,不再生成 Action: ... 这种文本,而是直接在 API 响应中通过特定的字段(如 OpenAI 的 tool_calls)返回一个结构化的对象,指明要调用哪个工具以及参数。
    3. 结构化处理:LangChain 直接读取这个结构化的字段,无需进行复杂的文本解析即可执行工具。
  • 优点

    • 稳定性高:模型 API 保证返回的结构是合法的 JSON,极大减少了因格式错误导致的失败。
    • 效率高:模型专门针对工具推理进行了微调,通常能更准确地选择工具和提取参数,推理速度也更快。
    • 支持多工具并行:许多支持工具调用的模型可以在一次响应中同时请求调用多个工具。
  • 缺点

    • 模型限制:必须使用支持原生工具调用/函数调用的模型(如 GPT-3.5/4, Claude 3, 以及部分微调过的开源模型如 Llama 3 - Tool use 版本)。对于普通的 Chat 模型不适用。

3. 核心对比表

特性 create_react_agent create_tool_calling_agent
底层机制 文本生成 + 正则解析 API 原生参数/结构化输出
Prompt 格式 需要包含 Thought/Action/Observation 循环模板 相对简洁,主要依赖 agent_scratchpad 传递历史
模型要求 任何文本生成模型 (Text Completion/Chat) 必须支持 Function Calling / Tool Calling 的模型
稳定性 较低 (容易因格式问题出错) 高 (由 API 保证结构正确)
并行调用 通常只能串行执行 容易实现并行调用工具
Token 效率 较低 (包含大量格式化废话) 较高 (通常只传关键参数和结果)
适用场景 使用不支持工具调用的老模型或开源小模型 生产环境、使用 GPT-4/Claude 等商业模型

4. 代码示例对比 (逻辑层面)

ReAct Agent 的 Prompt 示例 (逻辑):

复制代码
Question: What is the weather in Beijing?
Thought: I should search for the weather.
Action: Search
Action Input: Beijing
...

*Agent 内部需要写正则表达式来截取 SearchBeijing。*

Tool Calling Agent 的 API 请求 (逻辑):

复制代码
{
  "model": "gpt-4",
  "messages": [...],
  "tools": [{"type": "function", "function": {"name": "Search", ...}}]
}
// 模型直接返回:
{
  "tool_calls": [{
    "id": "call_123",
    "function": {"name": "Search", "arguments": "{\"query\": \"Beijing\"}"}
  }]
}

Agent 内部直接读取 tool_calls 字段,无需解析。

5. 总结建议

  • 如果你使用的是 GPT-3.5/4、Claude 3 等先进模型 :请优先使用 create_tool_calling_agent。它是现代的标准,错误率更低,体验更好。
  • 如果你使用的是早期的开源模型(如 Llama-2, Vicuna)或者模型不支持 API 级别的工具调用 :你需要使用 create_react_agent(或者 create_json_agent),通过提示词技巧来强制模型调用工具。
相关推荐
香芋Yu2 小时前
【LangChain1.0】第九篇 Agent 架构设计
langchain·agent·架构设计
kjkdd4 小时前
5. LangChain设计理念和发展历程
python·语言模型·langchain·ai编程
ASKED_201914 小时前
Langchain学习笔记一 -基础模块以及架构概览
笔记·学习·langchain
zhengfei61119 小时前
【AI平台】- 基于大模型的知识库与知识图谱智能体开发平台
vue.js·语言模型·langchain·知识图谱·多分类
玄同7651 天前
LangChain 1.0 模型接口:多厂商集成与统一调用
开发语言·人工智能·python·langchain·知识图谱·rag·智能体
Bruk.Liu1 天前
(LangChain实战12):LangChain中的新型Chain之create_sql_query_chain
数据库·人工智能·sql·langchain
爱吃羊的老虎1 天前
【大模型开发】学习笔记一:RAG & LangChain 实战核心笔记
人工智能·笔记·语言模型·langchain
玄同7651 天前
LangChain 1.0 框架全面解析:从架构到实践
人工智能·深度学习·自然语言处理·中间件·架构·langchain·rag
AI Echoes2 天前
LangChain Runnable组件重试与回退机制降低程序错误率
人工智能·python·langchain·prompt·agent
熬夜敲代码的小N2 天前
Agentic AI 实战全指南:从原理到LangChain落地开发
人工智能·langchain