Function Calling(函数调用)

LLM API 层面的能力机制——模型在对话中输出结构化 JSON,声明「需要调用哪个函数、传什么参数」。模型只负责意图声明,实际执行由外部代码完成。类比:Function Calling 是「拨电话号码」,而 Tool Use 是「整个电话系统」——FC 只是 Tool Use 完整链路中的一个环节,不是同义词。

Function Calling(函数调用)

一句话理解

LLM 说"我想调这个函数"的能力——模型只负责"说",不负责"做"。

与 Tool Use 的关系

这两个概念经常被混用,但不是同义词

  • Function Calling 是 LLM API 层面的接口协议——定义"模型怎么告诉你它想调什么"
  • Tool Use 是 Agent 系统层面的完整生命周期——包含工具注册、发现、权限控制、调用执行、结果回传

类比:Function Calling 是"拨电话号码",Tool Use 是"整个电话系统"(号码簿怎么管理、对方接不接、占线怎么办、通话记录怎么存)。

工作流程

  1. 工具声明:开发者在 API 请求中用 JSON Schema 描述可用工具
  2. 意图声明:模型决定调用哪个工具、传什么参数,输出结构化 JSON
  3. 外部执行:你的代码实际执行函数
  4. 结果回注:执行结果作为 tool 角色消息送回模型
  5. 最终回复:模型基于工具结果生成自然语言回复

关键特点

  • 模型不执行函数,只声明意图
  • 工具定义中的 description 是模型决策的依据(本质是 Prompt)
  • 支持并行工具调用(parallel_tool_calls
  • 各厂商实现格式略有差异(OpenAI / Anthropic / Google 字段命名不同)

工程陷阱

OpenAI 的 tool_calls 响应中,arguments 字段返回的是 JSON 字符串而非 dict,需要 json.loads() 解析——这是新手最常踩的坑。

引用本术语的文章