协议与通信
1. 定义与边界
多 Agent 通信是 Agent 之间交换任务、状态、证据、工具结果、artifact、审批请求和控制权的机制。它不只是“把聊天记录发给下一个 Agent”,而是需要明确消息语义、状态版本、权限边界和错误处理。
常见通信对象:
- Message:自然语言或结构化消息。
- Task:可执行任务,包含目标、约束、预算和完成条件。
- Artifact:文件、表格、代码、检索结果、截图、日志等中间产物。
- Handoff:控制权从一个 Agent 转交给另一个 Agent。
- Tool result:外部工具或 MCP server 的调用结果。
- Trace event:用于审计和回放的过程事件。
2. 为什么重要
通信设计不好会让多 Agent 退化为不可调试的聊天链:
- 上下文被重复复制,token 成本失控。
- 外部内容通过一个 Agent 污染另一个 Agent。
- 控制权交接没有条件,出现循环 handoff。
- Agent 之间对任务状态理解不一致。
- 远程 Agent 或工具的认证、授权、审计缺失。
3. 核心机制
通信协议需要回答六个问题:
| 问题 | 工程含义 |
|---|---|
| 发给谁 | Agent registry、服务发现、A2A Agent Card |
| 发什么 | message、task、artifact、state diff |
| 为什么发 | route、handoff、review、approval、retry |
| 能做什么 | 工具权限、数据权限、预算 |
| 如何确认 | ack、status、artifact id、trace id |
| 如何失败 | timeout、retry、fallback、human-in-the-loop |
推荐使用结构化信封:
{
"trace_id": "tr_001",
"from": "planner",
"to": "researcher",
"intent": "request_evidence",
"task": {
"goal": "核对多 Agent handoff 的官方定义",
"constraints": ["only_official_docs", "include_url"],
"deadline_ms": 30000
},
"context_refs": ["artifact:outline_v1"],
"data_classification": "public",
"budget": { "max_tokens": 6000, "max_tool_calls": 5 },
"expected_output_schema": "EvidenceBundle"
}
4. 架构/流程
通信方式对比:
| 方式 | 特点 | 适用 |
|---|---|---|
| 内存函数调用 | 低延迟、简单 | 单进程原型 |
| 任务队列 | 可重试、可异步 | 长任务、批处理 |
| HTTP / RPC | 服务边界清晰 | 跨服务 Agent |
| MCP | 标准化连接工具、资源和提示词 | Agent 到工具/上下文服务 |
| A2A | 标准化 Agent 间任务协作 | 跨组织、跨框架 Agent 互操作 |
| 事件流 | 支持状态订阅和可观测 | 长任务、实时 UI |
5. 工程实现
通信 schema 示例:
from typing import Literal, TypedDict
class AgentEnvelope(TypedDict):
trace_id: str
span_id: str
sender: str
receiver: str
intent: Literal["request", "handoff", "review", "approval", "result", "error"]
payload_schema: str
payload: dict
context_refs: list[str]
budget: dict
security_labels: list[str]
def send(envelope: AgentEnvelope):
validate_schema(envelope)
authorize(envelope["sender"], envelope["receiver"], envelope["intent"])
redact_if_needed(envelope)
append_trace(envelope)
return dispatch(envelope)
MCP 与 A2A 的定位区别:
| 协议 | 主要连接对象 | 典型用途 |
|---|---|---|
| MCP(Model Context Protocol) | AI 应用与工具、资源、提示词服务 | 让 Agent 安全、标准化地访问外部能力 |
| A2A(Agent2Agent Protocol) | Agent 与 Agent 或远程 Agent 服务 | 发现远程 Agent、发送任务、接收 artifact 和状态 |
不要把协议当万能架构。MCP 解决的是上下文和工具连接标准化,A2A 解决的是 Agent 间互操作;二者不能替代权限设计、状态管理和评测。
6. 生产实践
- 通信 payload 使用版本化 schema,例如
EvidenceBundle.v2。 - 大文件和长上下文只传引用,不在消息里复制全文。
- 每条消息携带
trace_id、sender、receiver、intent和数据分类。 - 对 handoff 设置允许的转移图和最大次数。
- 对远程 Agent 或 MCP server 使用认证、授权、allowlist 和超时。
- 对可写工具请求引入幂等键,避免重试造成重复副作用。
- 对外部来源内容保留来源 URL、抓取时间和可信等级。
7. 常见反模式
| 反模式 | 问题 | 修正 |
|---|---|---|
| 传完整聊天记录 | token 浪费、敏感数据扩散 | 传摘要、artifact 引用和必要字段 |
| Agent 之间自由聊天 | 无法审计意图 | 使用 intent 和 schema |
| 没有状态版本 | 并发写覆盖 | 状态版本号和冲突检测 |
| handoff 无限制 | 循环或任务丢失 | 转移图、最大 handoff、终止条件 |
| 信任远程 Agent 输出 | 可能被注入或伪造 | 验证来源、权限和签名 |
8. 评测方法
通信层指标:
- 消息 schema 校验通过率。
- handoff 成功率和平均 handoff 次数。
- 状态冲突率和冲突恢复率。
- artifact 引用解析成功率。
- 超时、重试、死信队列数量。
- 权限拒绝是否正确触发。
- trace 覆盖率:每次通信是否可回放。
故障注入样本应包括:丢消息、重复消息、乱序消息、超时、远程 Agent 返回恶意指令、MCP 工具描述被投毒。
9. 安全与治理
- 所有跨 Agent 消息默认不可信,尤其是包含外部内容的消息。
- 高权限 Agent 只接受结构化意图,不接受低权限 Agent 的自然语言命令直接触发写操作。
- 禁止 token passthrough:不要把上游 OAuth token 原样转交给未授权服务。
- 对远程 Agent 的身份、能力和权限做显式登记。
- 对工具返回内容进行 prompt injection 扫描和来源标注。
- 对审批请求保留人类身份、时间、原始请求和批准范围。
10. 工程手册补充
10.1 通信消息 schema
多 Agent 通信要传“任务、证据、状态和错误”,不要只传聊天文本。
{
"message_id": "msg_001",
"run_id": "run_abc",
"from": "planner",
"to": "executor",
"type": "task_assignment",
"schema_version": "1.0",
"payload": {
"task_id": "s3",
"objective": "生成退款预览",
"allowed_tools": ["get_order", "preview_refund"],
"input_artifacts": ["artifact://order/123"],
"done_when": "返回 preview_refund_id 和风险说明"
},
"requires_ack": true
}
| 通信对象 | 必须字段 | 失败处理 |
|---|---|---|
| task_assignment | 目标、输入、工具、完成标准 | 拒绝不完整任务 |
| artifact_result | artifact 引用、证据、置信度 | 缺证据不合并 |
| conflict_report | 冲突类型、涉及 artifact、建议裁决 | 进入裁决流程 |
| error_event | 错误码、可重试性、上下文 | 重试或升级人工 |
安全与观测:
- 消息必须有 schema 版本,协议升级要兼容旧 worker。
- Agent 间不要传密钥和完整用户隐私,传引用和最小必要字段。
- 每条消息记录 ack、处理时长、重试次数和最终状态。
- prompt injection 防线放在协议层:外部内容不得作为
type、allowed_tools或系统指令。
11. 权威资料
- Model Context Protocol Specification: https://modelcontextprotocol.io/specification/2025-11-25/basic (核对日期:2026-05-09)
- MCP Security Best Practices: https://modelcontextprotocol.io/docs/tutorials/security/security_best_practices (核对日期:2026-05-09)
- A2A Protocol Specification: https://a2a-protocol.org/latest/specification/ (核对日期:2026-05-09)
- OpenAI Agents SDK - Handoffs: https://openai.github.io/openai-agents-python/handoffs/ (核对日期:2026-05-09)
- Google ADK - Multi-Agent Systems: https://adk.dev/agents/multi-agents/ (核对日期:2026-05-09)