跳到主要内容

协议与通信

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_idsenderreceiverintent 和数据分类。
  • 对 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_resultartifact 引用、证据、置信度缺证据不合并
conflict_report冲突类型、涉及 artifact、建议裁决进入裁决流程
error_event错误码、可重试性、上下文重试或升级人工

安全与观测:

  • 消息必须有 schema 版本,协议升级要兼容旧 worker。
  • Agent 间不要传密钥和完整用户隐私,传引用和最小必要字段。
  • 每条消息记录 ack、处理时长、重试次数和最终状态。
  • prompt injection 防线放在协议层:外部内容不得作为 typeallowed_tools 或系统指令。

11. 权威资料