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 是"整个电话系统"(号码簿怎么管理、对方接不接、占线怎么办、通话记录怎么存)。
工作流程
- 工具声明:开发者在 API 请求中用 JSON Schema 描述可用工具
- 意图声明:模型决定调用哪个工具、传什么参数,输出结构化 JSON
- 外部执行:你的代码实际执行函数
- 结果回注:执行结果作为
tool角色消息送回模型 - 最终回复:模型基于工具结果生成自然语言回复
关键特点
- 模型不执行函数,只声明意图
- 工具定义中的
description是模型决策的依据(本质是 Prompt) - 支持并行工具调用(
parallel_tool_calls) - 各厂商实现格式略有差异(OpenAI / Anthropic / Google 字段命名不同)
工程陷阱
OpenAI 的 tool_calls 响应中,arguments 字段返回的是 JSON 字符串而非 dict,需要 json.loads() 解析——这是新手最常踩的坑。
引用本术语的文章
- 响应式系统的四条路:从 Proxy 到 Signal 的追踪粒度全景
- Vercel AI SDK 深度解析:ToolLoopAgent 是 Facade,真正的循环在 generateText 里
- 一个设计决策如何决定一切:五大前端框架源码级横向解剖
- 编译器的三重身份:五大前端框架编译管线深度拆解
- Markdown 渲染模块验收:14 类高级语法全量测试
- 【pi-mono 源码解析 4/4】toolCallId: string 的债从哪里来
- 多Agent编排:从单兵到团队
- Coding Agent实战:从零构建一个能写代码的AI助手
- 从 setTimeout 到 VSync:一篇讲透 Event Loop 的前世今生