早期有些人寄希望于大模型能力提升能实现 AGI,但是现在慢慢地发现,工具调用才是现阶段模型最需要的,工具调用也是大模型与外界交互的一个窗口。现在流行的 Function Calling、Computer-Use、MCP(Model Context Protocol) 都是在这个方向延伸出来的。 这一篇我把函数调用和 MCP 放在了一起,是因为这些东西本质上都是一样的东西,只是早期刚开始没有任何标准的时候,各家模型都自我实现了一套函数调用,接下去我们会一一过一下工具调用的分类和演进Documentation Index
Fetch the complete documentation index at: https://ce101.ifuryst.com/llms.txt
Use this file to discover all available pages before exploring further.
6.1 函数调用
最开始调用大模型时,是可以通过传入厂商预定义的结构化数据(JSON Schema),来告诉大模型一些预定义的工具可以使用,这个结构根据厂商的不同而不同,这个阶段大家一般称呼为函数调用(Function Calling)。最早可追溯到 OpenAI 的这篇 Function calling and other API updates,Anthropic 也在 2024 年 5 月宣布 Claude 支持 Tool Use(aka function calling)。 我们简单看一下 OpenAI 和 Google 各自模型怎么调用工具的例子。 OpenAI 的:tools 这个字段下,只不过下面的字段名有些许差异(这也是 MCP 流行的一个重要原因)。
现在我们来看看函数调用的一个流程,我们这边直接引用前面提到的 OpenAI 和 Google 的模型做函数调用时的流程图:


- 提供一组函数在上下文中
- 让大模型根据上下文来决定是否要调用函数
- 调用则返回对应格式的内容,如:
get_weather("paris") - 应用负责具体去执行这个函数,得到结果
- 将结果附带在上下文再次请求大模型
- 根据执行结果来决定后续的动作,比如告知用户完成任务了,或者还需要在执行其他任务
6.2 MCP
Anthropic 于 2024 年 11 月推出了 MCP(Model Context Protocol),经过几个月的沉淀,很多服务涌现,到 2025 年上半年,MCP 在非常短的时间内火出圈,所有人都在谈论 MCP,随着 Google、OpenAI 等主流的模型厂商都宣布并支持了 MCP 之后,这一开放标准已经成为 AI 时代函数调用的事实标准协议。
- Host:运行 LLM 应用的设备
- Client:MCP 客户端,负责 LLM 和 Server 的通信,起到一个中介作用
- Server:MCP 服务端,负责实际的逻辑,也可能调用外部的服务、命令等

- 用户发送问题
- AI 应用连接到 MCP Server(这个过程有可能发生在应用启动的时候,在用户发送问题之前建立好连接)
- 获取工具列表(最常见的一个请求,不过 MCP 还支持获取提示词之类的资源),是 JSON 格式的数据
- 将用户问题和工具列表一起发送给大模型
- 大模型根据判断,如果不产生调用直接返回。如果产生调用就返回到 AI 应用
- AI 应用根据返回的信息知道请求哪个工具,参数是什么,组装后请求
- AI 应用得到 MCP Server 返回的结果
- AI 应用将工具执行后的结果再给到大模型(前面的聊天记录也会一起)
- 大模型做最后的结果输出
- AI 应用将最终结果返回给用户(整个周期期间可能已经通过流式不断返回了)
6.2.1 MCP 协议
MCP 协议里最重要的当属传输协议(Transport Protocol),我写这篇文章的时候,MCP 标准演进到 2025-06-18 这个修订版了,目前支持的是:- Stdio:通过命令直接拉起 MCP Server
- Streamable HTTP:通过流式 HTTP 去请求 MCP Server




/sse 结尾,通过 /message 发送消息,而 Streamable HTTP 则都是通过 /mcp。
这边我们通过几个连续的 curl 请求来展示一下 Streamable HTTP 的实际流程:
initialize:初始化,这步最关键的时一定要拿到 HTTP 响应头里的mcp-session-id,后续都是基于这个会话 id 进行的
notifications/initialized:客户端初始化完后通知服务端,需要在 HTTP 请求头里增加 mcp-session-id,收到的 HTTP 响应不是 200,而是 202
tools/list:客户端请求工具列表
tools/call:客户端根据前面的工具列表里的一些定义(如请求参数和类型),调用某个工具得到结果
6.2.2 Claude Code
了解完 MCP 协议,我们结合 Claude Code 来看看 MCP 如何结合在实际应用中的。 Claude Code(下称为 CC)作为 Anthropic 的 AI Agent,目前被很多人使用,我们可以通过系统提示词看到 CC 是通过 MCP 定义工具的,总体的工具如下(v1.*):
tools 里看到对应的工具定义

Bash 的定义
.mcp.json:
6.3 总结
这章的篇幅不长,很快的就将工具调用相关的内容过完,实际应用中不一定局限在函数调用或 MCP,具体例子是这几天 Anthropic 推出的 Claude Skills,给出了一个很实在的例子。我们在实际的 AI 应用研发中,关注 MCP 是为了关注协议兼容,可以快速享用一些协议带来的好处,包括商业机会、开源复用等等。而使用函数调用可能更多是一方的工具快速集成、性能最大化等作用,在此基础之上是可以类似 Calude Skills 一样做一定的扩展,扩宽一点大模型的边界,让大模型拥有更多的能力支撑更复杂的业务场景(这也是模型能力持续提升带来的转变)。 最终回归到工具使用,目前更多是服务于 AI Agent,在 AI Agent 中工具的使用主要集中在这么几个重点上:- 工具的集成:根据 Agent 的不同,可以集成不同的工具,最常见的有 ShellExec、FileOp、BrowserUse、APICall 等
- 定义和加载工具:现在基本可以依据 MCP 做定义了,至于加载可以启动时加载也可以运行时加载,更可以通过一些更智能的手段加载必要的工具
- 执行和结果收集:这个主要是 Agent 内部的流程实现
- 结果卸载:AI Agent 长时段(Long-horizon)运行基本上上下文会被各种工具调用的结果塞满,如何抽离卸载工具执行结果是上下文管理中很重要的一部分