函数调用与工具使用(Tool Use)
让 LLM 从「只会聊天」变成「能干活」的关键能力。面试常问:Function Calling 和普通补全有什么区别?参数怎么保证合法?和 MCP、Agent 是什么关系?
01是什么:从文本到动作
普通对话模型只输出文本;函数调用(Function Calling / Tool Use)让模型输出结构化的调用指令(调哪个函数、参数是什么),由外部程序真正执行并把结果回填,模型再据此继续生成。这是 LLM 连接真实世界的入口。
02完整流程(循环)
这是一个 ReAct 式的「思考—行动—观察」循环:模型输出调用 → 系统执行 → 结果回注上下文 → 模型再决定下一步,直到给出最终答案。
03Tool Schema:怎么描述工具
工具用 JSON Schema 声明:名字、描述、参数类型。模型据此生成符合 schema 的 arguments。
{
"name": "get_weather",
"description": "查询某城市天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名"},
"unit": {"type": "string", "enum": ["celsius","fahrenheit"]}
},
"required": ["city"]
}
}
04并行调用与多轮
并行调用
一次返回多个独立工具调用(如同时查天气+汇率),由运行时并发执行,省往返延迟。
多轮编排
复杂任务拆成多步:先检索再计算再总结,由 Agent 循环控制(见 agent 目录)。
05与 MCP / Agent 的关系
Function Calling
模型「生成调用指令」的能力,是协议层能力。
MCP
工具的「标准化接入协议」——定义工具如何被发现、调用、返回,解耦模型与工具实现(见 mcp 目录)。
Agent
把「调用工具」编排进自主循环,加规划、记忆、反思(见 agent 目录)。
06常见坑
参数非法
模型可能生成 schema 外的字段/类型,必须做服务端校验再执行。
幻觉调用
不存在的工具/参数被编造,需约束可调用集合。
流式处理
流式下要能增量解析出完整 JSON 再执行,解析失败要重试。
副作用安全
写操作(发邮件/删数据)需权限、确认或沙箱,防提示注入滥用。
07面试速记卡
本质
模型输出结构化调用指令,外部执行并回填,形成循环。
Schema
用 JSON Schema 声明工具,模型生成合法 arguments。
三者关系
能力(FC) / 标准(MCP) / 编排(Agent) 不同层次。
必做
参数校验、防幻觉、副作用管控、流式解析。