附录 C:决策树与最佳实践
C.1 协议选择决策树
问:Agent 需要什么能力?
├─ 连接外部数据源/工具?
│ ├─ 是 → MCP
│ │ ├─ 本地开发 → stdio
│ │ ├─ 云端集成 → SSE over HTTP
│ │ ├─ 公共/实验 → 公共 Registry(⚠️ 不传凭证)
│ │ ├─ 企业级 → 官方托管 MCP
│ │ ├─ 内部工具 → 内部 Registry
│ ├─ 否 → 继续
├─ 与其他 Agent 协作?
│ ├─ 是 → A2A
│ │ ├─ 暴露自己的 Agent?
│ │ │ ├─ 是 → 定义 Agent Card + A2A Endpoint
│ │ │ ├─ 否 → 继续
│ │ ├─ 使用第三方 Agent?
│ │ │ ├─ 是 → Registry Discovery 或 Direct Endpoint
│ │ │ ├─ 否 → Internal Specialization
│ ├─ 否 → 继续
├─ 向人类用户展示可视化?
│ ├─ 是 → A2UI
│ │ ├─ 意图驱动 → LLM-generates-UI
│ │ ├─ 输入驱动 → Tool-as-template
│ ├─ 否 → 继续
├─ 执行商业交易?
│ ├─ 查询商品/下单 → UCP
│ ├─ 支付 → AP2(需用户 Mandate)
│ ├─ 否 → 仅 MCP/A2A/A2UI
C.2 安全实践清单
| 协议 | 安全实践 |
|---|---|
| MCP | ✅ 审核公共 Server 代码 ✅ 使用环境变量传凭证 ✅ Read-only 模式用于真实数据 ✅ 限制 Project 访问范围 ✅ 包含 HITL(人类审批) ❌ 不在生产用公共 MCP |
| A2A | ✅ 验证 Agent Card ✅ 使用官方 Registry ✅ 审计 Agent 交互日志 ❌ 不盲目信任未验证 Agent |
| A2UI | ✅ 使用 a2ui-agent-sdk ✅ Schema validation ✅ 失败时 fallback text ✅ Hybrid output(data + ui) ❌ 不让 Agent 生成可执行代码 |
| AP2/UCP | ✅ 用户批准 Mandate ✅ 审计支付日志 ✅ 验证签名 ❌ Agent 不接触真实卡号 |
C.3 架构演进路径
Phase 1: Single Agent + MCP
├─ 任务:快速原型、简单流程
├─ 限制:Scaling Friction、Contextual Overload
├─ 转向 Phase 2 信号:系统提示过大、工具过多
Phase 2: Internal Specialization
├─ 任务:中等复杂度、需域专业知识
├─ 限制:不跨网络边界、无法用官方 Agent
├─ 转向 Phase 3 信号:需第三方平台协作
Phase 3: Distributed Multi-Agent + A2A
├─ 任务:高复杂度、跨组织协作
├─ 优势:官方维护、商业化潜力
├─ 最佳实践:优先使用官方 Agent(避免维护税)