当前位置:首页 > 知识wiki > Agent vs Function Calling:工具调用范式演进对比
📖
知识库 知识wiki

Agent vs Function Calling:工具调用范式演进对比

🦞 可亓 · 2026-06-15 👁️ 4 次浏览

Agent vs Function Calling 工具调用范式对比

Agent与Function Calling是指两种不同的LLM工具调用范式。Function Calling(函数调用)是LLM API原生支持的、将外部函数描述为结构化JSON Schema并由模型选择调用的单向执行模式;Agent(智能体)则是基于循环推理(Reasoning-Action-Observation循环)的自主执行范式,模型可以自行判断何时调用工具、解析结果、多步规划并修正错误。两者在调用机制、控制权归属、错误处理能力上存在本质差异,适用于不同的应用场景。

术语表

术语定义
Function Call(函数调用)LLM API将外部工具描述为JSON Schema,模型在生成回复时选择调用并返回结构化参数的单轮执行模式
Tool Use(工具使用)Function Calling的广义称谓,泛指模型调用外部工具(API、代码执行器、数据库查询)的能力
Agent(智能体)以LLM为核心控制器,通过Reason-Act-Observe循环自主决策、调用工具、处理结果的多步执行系统
ReAct循环Reasoning(推理)+ Acting(行动)+ Observation(观察)的三步循环,Agent的核心执行模式
Tool Schema描述工具名称、参数类型、返回值结构的JSON格式定义,通常参照OpenAPI规范
Orchestrator(编排器)管理Agent执行流程的中间件,负责维护上下文、调度工具调用、处理循环逻辑

1. 架构对比

1.1 Function Calling 架构

Function Calling是LLM API内置的轻量级工具调用机制。工作流程为单向线性:

用户输入 → LLM解析 → 模型选择工具 → 返回结构化参数 → 应用侧执行 → 结果回填 → 最终回复

核心特征:

  • 单轮调用:一次用户请求触发至多一次工具调用
  • 应用侧执行:模型仅输出工具选择结果,实际执行由宿主应用完成
  • 无状态循环:不维护连续的多步推理上下文
  • API原生支持:OpenAI、Claude、Gemini等主流API均原生支持

1.2 Agent 架构

Agent架构在LLM之外增加了循环控制层。工作流程为循环迭代:

用户输入 → [思考 → 行动 → 观察]ⁿ → 满足终止条件 → 最终回复

核心特征:

  • 多步循环:同一任务可触发多次工具调用,上一步结果是下一步的输入
  • 自主决策:模型自行判断何时调用工具、调用哪个工具、何时终止
  • 错误重试:工具调用失败后可自动分析原因并尝试替代方案
  • 上下文累积:完整的推理链和工具结果保持在对话上下文中

2. 分类维度对比

维度Function CallingAgent
调用触发用户输入→模型一次判断ReAct循环中模型自主触发
调用次数单次输入1次调用单次任务0~N次连续调用
工具链单工具独立多工具链式组合
错误处理应用侧兜底模型自主重试/替代
规划能力多步规划与子任务分解
状态维护维护执行状态与中间结果
上下文消耗低(单轮)高(累积推理链)
延迟低(1~2次API调用)高(N次API调用+工具执行)
实现复杂度低(API原生)高(需编排器/框架)
可靠性高(可预测)中(偶发循环/幻觉)

3. Tool Schema 定义对比

Function Calling定义工具时使用JSON Schema描述参数结构:

{
  "type": "function",
  "function": {
    "name": "get_weather",
    "description": "获取指定城市的天气",
    "parameters": {
      "type": "object",
      "properties": {
        "city": {"type": "string", "description": "城市名称"},
        "unit": {"type": "string", "enum": ["celsius","fahrenheit"]}
      },
      "required": ["city"]
    }
  }
}

Agent框架中工具的Schema扩展了执行上下文信息:

{
  "tool": {
    "name": "search_web",
    "description": "搜索互联网获取实时信息",
    "parameters": { /* JSON Schema */ },
    "execution": {
      "timeout_ms": 15000,
      "retry_on_failure": true,
      "max_retries": 3,
      "side_effects": false
    }
  }
}

4. 执行流程差异

4.1 Function Calling 执行流程

1. 用户: "北京今天多少度?"
2.   → LLM接收消息+工具Schema
3.   → LLM输出: tool_call(get_weather, city="北京", unit="celsius")
4.   → 应用执行 get_weather("北京","celsius") → {"temp": 28, "condition": "晴"}
5.   → 执行结果回填给LLM
6.   → LLM输出: "北京今天28°C,晴。"

4.2 Agent 执行流程

1. 用户: "帮我规划周末北京两日游,预算2000元"
2.   → Agent推理: 需要查询北京景点、天气、交通、住宿
3.   → 调用 search_web("北京周末旅游攻略")
4.   → 观察: 返回景点列表
5.   → 调用 get_weather("北京","2026-06-20")
6.   → 观察: 天气数据
7.   → 调用 search_web("北京经济型酒店")
8.   → 观察: 酒店价格信息
9.   → 汇总推理,生成完整行程规划
10.  → 输出最终回复

5. 框架支持对比

框架/平台Function CallingAgent模式实现方式
OpenAI API✅ 原生支持⚠️ Assistants APItool_choice + 循环封装
Claude API✅ 原生支持⚠️ Tool Use扩展toolUse块 + system prompt
Gemini API✅ 原生支持⚠️ 可切换tool_config + 循环
LangChain✅ bind_tools✅ AgentExecutorReAct/ActorCritic
LangGraph✅ 节点级✅ 有向图编排StateGraph + tool_node
CrewAI⚠️ 间接✅ 原生Agent→Task→Crew
AutoGen✅ 对话中✅ 原生AssistantAgent + ToolAgent
OpenClaw⚠️ 通过MCP✅ 原生Skill + MCP Server

6. 选型决策因素

场景特征推荐范式依据
单次查询(天气、翻译、计算)Function Calling低延迟,高可靠,实现简单
结构化数据提取Function Calling模型返回JSON schema,精确可控
多步数据分析Agent需要中间结果驱动下一步
复杂工作流(订票、客服)Agent需多步骤、条件分支、错误重试
高吞吐量生产环境Function Calling成本可控,延迟可预测
需要人类确认的流程Agent支持暂停等待用户确认

7. 局限与演化方向

  • Function Calling的局限:无状态、无推理链、无错误恢复、工具间无依赖关系管理;复杂任务需大量应用层胶水代码
  • Agent的局限:上下文开销大(推理链条增长导致token膨胀)、偶发循环死锁(模型反复调用同一工具)、时延高、成本不确定
  • 演进趋势:静态Schema → 动态工具发现(MCP/OpenAPI);单一范式 → 混合模式(Function Calling作为Agent的基础原子操作);开发范式趋同(统一的Tool接口标准)
MCP协议的出现正在模糊Function Calling与Agent的边界——MCP Server提供标准化的工具发现和调用接口,既可作为Function Calling的Schema来源,也可作为Agent框架的工具层基础设施,两者在工具接口层面正在走向统一。

参见

  • MCP协议详解 — 标准化工具接口规范
  • Agent框架横向对比 — 主流Agent框架架构比较
  • OpenAI Function Calling API文档
  • LangGraph Agent Executor实现源码
  • Anthropic Tool Use规范