§03 MCP 把"调工具"变成了插 USB-C
本章目录
03.1 2024 年 11 月 25 日
Anthropic 发了篇文章。标题叫《Introducing the Model Context Protocol》。
这一天,被很多人当成 Agent 工程的转折点。
03.2 以前调工具有多乱
你想让 Agent 发邮件。你得为 Gmail 写一套适配。
换 Outlook,再写一套。
换 Claude 模型,又写一套。
一团乱麻。开发者苦不堪言。
03.3 Function Calling:Agent 的"伸手"
先说基础。开发者给模型列好"有哪些函数可用":
# 定义 Agent 能调用的工具
tools = [
{
"name": "send_email", # 发邮件
"params": {"to": "string", "body": "string"}
},
{
"name": "query_db", # 查数据库
"params": {"sql": "string"}
}
]
# 模型需要时自己选函数并填参数
这叫函数调用(Function Calling)。Agent 由此从"动嘴"变"动手"。
03.3.1 一个工程细节:让输出"有类型"
模型默认吐自然语言。你让"返回 JSON",它偶尔漏个逗号就崩。
专业做法叫类型化输出(Typed Outputs):先定义好返回结构(像表格的列),模型只能按列填。解析不再靠"猜文本",而是读确定字段。
# 类型化输出:先定结构,再让模型填
class EmailResult(BaseModel):
ok: bool # 成功没
error_code: str | None # 失败原因
message_id: str | None # 发出去的邮件 ID
# 模型按这结构返回,解析零歧义
经验:凡是要让另一个程序读 Agent 的产出,就用类型化输出。少一处文本解析,少十个线上 bug。
03.4 MCP:AI 世界的 USB-C
MCP(Model Context Protocol,模型上下文协议)定了一套统一标准。
一句话:任何 Agent,都能"插上"任何工具或数据源。即插即用,可替换。
这就是经典的"USB-C 比喻"。
以前电脑接打印机、硬盘、显示器,各用各的口。乱。后来统一成 USB-C,一个口通吃。
MCP 就是 AI 的 USB-C。
示意图 4:MCP = AI 世界的 USB-C
flowchart LR
A["任意 Agent"] -->|"MCP 协议"| H["MCP 中枢<br/>(AI 的 USB-C)"]
H --> T1["发邮件"]
H --> T2["查数据库"]
H --> T3["读日历"]
H --> T4["出图表"]
style H fill:#0ea5a4,stroke:#0f766e,color:#fff
style A fill:#e8f0fe,stroke:#2563eb
03.5 MCP 和 A2A 不是一回事
2026 年还有个协议叫 A2A(Agent2Agent,Google 推)。别混。
| 协议 | 解决啥 | 类比 | 标叔的结论 |
|---|---|---|---|
| MCP | Agent 调工具/数据 | USB-C 接外设 | 接"物"用 MCP |
| A2A | Agent 找 Agent 协作 | 微服务间通信 | 找"人"用 A2A |
两者互补。一个 Agent 团队里,MCP 接工具,A2A 连同伴。
示意图 5:MCP 接‘物’,A2A 连‘人’
flowchart TD
A["Agent A"] -->|"MCP 接工具/数据"| Tools["工具 · 数据源"]
A -->|"A2A 找同伴"| B["Agent B"]
style A fill:#e8f0fe,stroke:#2563eb
style Tools fill:#f1f5f9,stroke:#94a3b8
style B fill:#e8f0fe,stroke:#2563eb
03.6 对你意味着什么
以前 Agent 只能聊。现在它能:查你日历、拉销售数据、发邮件、出图表。
而且不用每个功能从零写。插上就行。
核心建议:选 Agent 工具时,看它支不支持 MCP。支持,等于它的"外设生态"是开放的。
§03 讲完"手"。下一章讲"组队"——多智能体系统,2026 年最热的方向。