协议解决的是集成复杂度
MCP 让工具源与应用各自只实现一次:能力、传输、报文三层分开,替换一层,另外两层不必改动。通信的两端都是程序——宿主应用与工具服务器;模型不发报文,它只知道「有哪些工具可用」。
本课讲的是「工具调用」的通用做法:模型为什么需要工具、协议怎么把工具接上来、工具如何转换为模型可理解的工具声明、一次提问中的调用循环如何推进、风险面在哪,以及如何把发生过的调用看清楚。落到交付上,是两端各一个:一个能暴露工具的服务器,与宿主里把它接进对话的那段编排(orchestration,对话中的控制逻辑)。
MCP 让工具源与应用各自只实现一次:能力、传输、报文三层分开,替换一层,另外两层不必改动。通信的两端都是程序——宿主应用与工具服务器;模型不发报文,它只知道「有哪些工具可用」。
工具声明来自发现结果,随提问发给模型;模型输出「工具名 + 参数」,宿主按同一份结构校验、携带令牌执行、把结果作为工具消息回传,可循环多轮。参数校验、逐工具授权、轮次与累计次数上限都由宿主决定——超限后是优雅降级,而非报错。
工具返回与工具说明都会原样进入提示词,两者都是攻击面。位置与句式检查只降低概率,授权与配额才拦得住动作;令牌只在服务端出现,接口响应只回一个「是否已配令牌」的布尔值。
前三个讲「工具怎么接上来」,后三个讲「接上来以后要补什么」。
| 知识点 | 在哪一页 | 要点 |
|---|---|---|
| 协议分层 | 协议的三层 | 能力、传输、报文各管一段,换掉一层不动另外两层 |
| 工具声明 | 工具声明与候选集 | 名称、说明、输入结构三项,都来自发现结果而非手写 |
| 候选集与最小权限 | 工具声明与候选集 | 先按用途划定上限,再让模型在上限之内自主决定 |
| 调用循环 | 调用循环 | 决策归模型、执行归宿主,可多轮,须有轮次与次数上限 |
| 信任边界 | 工具带来的风险面 | 返回与说明都是攻击面,防线分软硬,令牌不出服务端 |
| 可观测性 | 调用的可观测性 | 一次调用一条记录,回答五个问题;本课做到日志这一层 |