跳到主要内容

3 篇博文 含有标签「protocol-design」

查看所有标签

MCP 工具列表在会话中途增加,你的智能体调用了一个它从未被告知过的工具

· 阅读需 11 分钟
Tian Pan
Software Engineer

一场安全事件回顾以一个团队无法回答的问题开始:智能体是如何知道它刚刚调用的工具名称的?审计追踪显示了一个 tools/call 请求,但该工具的名称并未出现在 harness 记录的任何 tools/list 响应中。MCP 服务器欣然接受并执行了该调用。在事后分析中,当被要求解释工具名称来源时,模型给不出答案,因为根本没有答案 —— 它猜中了,而且这个猜测恰好命中了一个真实的操作。

这是两个在理论上看起来兼容的假设之间产生的失效模式。客户端将工具列表视为一份契约,界定了它被授予的权限范围。服务器则将工具列表视为当前可用工具的快照,可以随着环境的变化自由增长。在这两种观点之间,LLM 是一座不知道二者差异的桥梁。

推理服务提供商拒绝发送的背压信号

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的重试逻辑在遇到 429 时会退避。当延迟上升时,你的队列深度告警会触发。在这两个信号之间,存在一个供应商负载区间,此时正确的做法是“减速 20%”——而供应商唯一会告诉你的是那个姗姗来迟的二进制限流信号。对于智能体集群协作来说,最有用的信号恰恰是没有任何推理 API 真正公开的那个。

429 是墓碑,而不是警告。当你收到它时,供应商已经认定你的流量过载,你已经浪费了一次请求的 Token 计数,而且——如果你与其他消费者共享租户——他们可能也收到了。有趣的故障模式不是 429 本身;而是它发生前的几秒钟,那时全世界的客户端都在“一切正常”和“你被切断”之间盲目飞行。

智能体协议碎片化:为 A2A、MCP 及未来设计

· 阅读需 10 分钟
Tian Pan
Software Engineer

大多数团队在选择智能体协议时,实际上同时做了三个不同的决策——把它们混为一谈,正是为什么许多集成一旦引入第二个框架就会崩溃的原因。

这三个决策分别是:智能体如何与工具和数据交互(纵向集成)、智能体如何与其他智能体协作(横向协调),以及智能体如何向人机界面暴露状态(交互层)。Google 的 A2A、Anthropic 的 MCP 和基于 OpenAPI 的 REST 解决的是这个栈的不同层次。当工程师混淆它们时,要么用多智能体机制过度设计单智能体场景,要么用单智能体工具欠设计多智能体工作流。两种失败在生产环境中重构代价都极高。