多智能体协作的工程边界:MCP 管“能做什么”,A2A 管“任务怎么流转”

举报
yd_297127574 发表于 2026/11/08 01:25:32 2026/11/08
【摘要】 单个 Agent 调工具的系统里,故障模式很直接:工具参数错了、超时了、返回了模型不理解的结果。当系统拆成规划、检索、执行、审核多个 Agent 之后,故障模式的性质变了:工具参数没有统一格式,Agent 之间传递了无法解析的自然语言;执行 Agent 重复提交订单或重复发送通知;一个 Agent 失败后,上游无法判断任务是否已经执行;更换模型供应商后,调用代码、重试策略和审计字段散落在各处...

单个 Agent 调工具的系统里,故障模式很直接:工具参数错了、超时了、返回了模型不理解的结果。当系统拆成规划、检索、执行、审核多个 Agent 之后,故障模式的性质变了:工具参数没有统一格式,Agent 之间传递了无法解析的自然语言;执行 Agent 重复提交订单或重复发送通知;一个 Agent 失败后,上游无法判断任务是否已经执行;更换模型供应商后,调用代码、重试策略和审计字段散落在各处。

MCP 和 A2A 各自解决一个方向的问题,但它们不是同一层的东西。MCP 是“Agent 到能力”的适配层:服务端暴露工具、资源或提示模板,客户端根据定义调用,每个工具至少要有名称、用途说明和参数模式,参数模式最好是 JSON Schema 或等价的结构化描述,以便在调用前校验。MCP 的关键价值不是“让模型自动执行一切”,而是把外部能力从提示词里分离出来,让查询工单、读知识库、创建待办成为独立工具,各自拥有不同的权限、超时和审计策略,模型只能选择已经被授予的能力。

A2A 风格接口是“Agent 到 Agent”的协作层:代理之间的协作应该像调用一个远程服务,而不是把一段自然语言塞进另一个 Agent 的上下文。一个可执行的任务消息需要包含任务标识、发起方、目标代理、输入数据、幂等键、截止时间和当前状态;状态至少要区分 submitted、running、succeeded、failed 和 cancelled,状态变化由服务端记录,而不是由模型自行声称“已经完成”。长任务由调用方先获得任务编号,再通过查询接口或事件订阅获取结果。

两者结合后的边界可以概括为:编排器通过 A2A 分派任务,Agent 内部通过 MCP 调用具体能力。A2A 负责任务生命周期——谁发起的、目标是谁、幂等键是什么、当前状态、截止时间;MCP 负责能力执行——工具名、参数 Schema、权限、超时。业务系统负责最终一致性和权限约束,而不是让协议层去承担这些职责。

一个容易被忽略的工程细节是任务契约要先于提示词定义。工单分类任务的输入应该是一个结构化的 JSON,包含 task_id、task_type、source_agent、target_agent、idempotency_key、deadline 和输入数据;输出也应该是结构化的,明确置信度和需要人工介入的条件,而不是一段自由文本。契约先行的好处是:A2A 的任务状态机和 MCP 的工具校验都有了一个确定的锚点,Agent 之间的交互不再依赖“模型能不能从自然语言里猜出意图”。多智能体系统不是聊天群,它是需要任务契约、幂等键、状态机和审计的分布式系统;MCP 和 A2A 提供了协议层的积木,但工程边界需要由业务系统来划定。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。