Function Calling 已经是 Agent 的标配能力了,但工程落地时怎么兜底、怎么编排多工具依赖、MCP 到底解决了什么——这些才是真正决定线上稳定性的细节。
历史与作痛
Function Calling 依托 ICL 能力发展。早期靠手工 Prompt 诱导模型输出调用格式,稳定性差、格式易错,无法工程落地。2023 年 6 月 OpenAI 推出原生 Function Calling,通过 JSON Schema 约束实现稳定结构化工具调用。2024 年演进为 Tool Calling,支持多工具并行。2024 年 11 月 Anthropic 推出 MCP 协议,统一工具交互标准,解决工具适配难、上下文膨胀问题,2025 年获主流厂商支持,成为 Agent 工具互联的核心协议。
一、普通 Function Calling 工程落地方式
工程落地场景中,标准 Function Calling 依托 JSON Schema 完成规范化定义。本质是哈希表结构:
- 外层:定义唯一工具名称
- 内层:嵌套约束工具的入参、出参标准化格式
同时在 Schema 内部预设兜底规则——当模型无法解析用户意图、不满足工具调用前置条件时,按预设固定格式输出兜底内容,规避格式错乱与推理异常。
{
"tool_name": "查询天气",
"input": {
"city": {"type": "string", "description": "城市名称"},
"date": {"type": "string", "description": "日期"}
},
"output": {
"temperature": {"type": "number"},
"condition": {"type": "string"}
},
"fallback": {
"when": "意图无法识别或不满足前置条件",
"output": {"error": "无法处理该请求", "code": "FALLBACK_TRIGGERED"}
}
}
二、工程优化兜底方案
统一兜底机制
工程层面需要搭建一套统的兜底机制,核心思路是:Observer 感知异常 → 推理模块调整路径。
当工具调用出现以下三类异常时:
| 异常类型 | 处理方式 |
|---|---|
| 调用超时 | Observer 感知,采集异常信息传递给推理模块 |
| 执行报错 | 同上,统一兜底规则管控 |
| 返回空结果 | 同上,纳入同一异常体系 |
Observer 识别异常后,同步向后续推理规划模块传递状态信息,由推理模块调整后续思考逻辑与执行路径。这三类场景均纳入同一规则体系,依托观测层统一感知,驱动流程自适应调整。
多工具依赖场景
针对多工具依赖场景:
- 依赖关系预注册:工具依赖关系预先录入 JSON Schema
- 提示词加约束:由大模型自主判定多工具的执行优先级
- 框架层管控:单次仅执行单个工具调用,按照模型规划的顺序逐轮调度执行
容错与重试
若工具调用出现多次超时:
- Observer 感知异常状态,交由模型自主复盘决策
- 允许模型针对同一问题出现两次工具调用失误
- 第三次失误时触发强约束机制,强制模型更换解题思路与调用方案
无论采用自主复盘还是容错重试策略,均设置重试次数上限作为最终兜底:
- 达到指定次数 → 强制模型输出最终结果
- 结果合规可用 → 完成业务闭环应答
- 结果错误或无法满足业务诉求 → 向用户反馈当前问题暂无可行解决方案
三、MCP 协议补充说明
MCP 是什么
MCP(Model Context Protocol)是适配 Function Calling 使用场景的标准化交互协议。接入 MCP 框架后,可将全部工具信息、工具间依赖关系统一注册至协议托管中心。
MCP 解决了什么
在工具调用流程中,MCP 自动处理:
| 能力 | 说明 |
|---|---|
| 工具依赖编排 | 自动解析并处理工具调用顺序 |
| 参数传递规范 | 统一上下行输入输出格式 |
| 空结果兜底 | 预设无返回数据时的处理规则 |
| 权限管理 | 内置完善的工具权限管控能力 |
本质定位
从本质而言,MCP 是整合以下能力的成熟标准化规范:
原生 Function Calling + JSON Schema 约束
+ 工具依赖编排 + 异常兜底 + 权限管控
它不是一个新概念,而是把这些散落在各个项目里的"最佳实践"整合成一个标准协议——谁用谁接,不用重复造轮子。
四、总结
| 维度 | 要点 |
|---|---|
| 基础定义 | JSON Schema 约束入参出参,预设兜底输出 |
| 异常处理 | Observer 感知 + 推理模块调整,统一兜底 |
| 多工具依赖 | 预注册依赖关系,逐轮单调用,框架层管控 |
| 容错策略 | 两次失误容忍,第三次强制换思路 |
| MCP 协议 | 标准化整合工具定义、编排、兜底、权限管控 |
Function Calling 的工程落地核心不在于"怎么调",而在于"调失败了怎么办"。 兜底机制设计的好坏,直接决定了线上系统的稳定性。
如果这篇文章对你有帮助,欢迎点赞收藏 ❤️ 有疑问或不同见解,评论区见。