直接回答:Function Calling 是模型层面的能力:开发者把工具的 JSON Schema 描述随请求传给模型,模型在需要时输出结构化调用请求(函数名+参数),由客户端执行后把结果回传,模型再继续生成。它解决的是"模型如何表达想调工具"。MCP 是应用层面的开放协议(Anthropic 提出):标准化了工具/资源/提示词的发现与调用接口,让任何 MCP 客户端能即插即用任何 MCP 服务端提供的工具。两者是互补关系——MCP 服务端暴露的工具,最终还是通过 Function Calling 的形式喂给模型。

展开解析:没有 MCP 之前,每个 Agent 应用对每个工具都要手写胶水代码(N×M 问题);MCP 把它变成 N+M:工具方实现一次 MCP server(文件系统、数据库、Git、内部 API 等),应用方实现一次 MCP client。协议基于 JSON-RPC,支持 stdio 和 HTTP 传输,除了 tools 还有 resources(可读数据)和 prompts(模板)。工程注意点:工具描述会占用上下文,几十个工具时要按需装载或先用检索选工具;工具返回要裁剪,别把整页 HTML 塞回上下文;权限上 MCP server 等同本地代码执行,生产环境必须做来源校验和最小授权。

追问方向:Function Calling 的并行调用怎么实现?MCP 与 OpenAPI 生态是什么关系?工具调用失败如何设计重试与兜底?

(约 470 字)