主题
高频面试题
A2A 协议的工作原理是怎样的?
工作原理要讲“为什么能互操作”:靠 Agent Card 自描述、标准消息模型、任务生命周期、异步更新和安全边界把远端 Agent 封装起来。
面试官角度分析,想考什么
A2A 为什么能让不同 Agent 协作?
考自描述发现、标准协议对象和 opaque execution。一次请求内部发生什么?长任务怎么跟?
考 Message 绑定 Task,再用流式、查询或推送同步状态。多轮和安全边界在哪?
考 contextId、taskId;认证授权、Card 信任和审计。
可直接抄走的 30 秒参考答案
text
A2A 的原理可以分成四步:先通过 Agent Card 做能力发现和安全协商;然后 Client Agent 用标准 Message 把任务发给 Remote Agent;Remote Agent 在内部运行时执行任务,并把它映射成一个有生命周期的 Task;最后通过同步响应、流式事件、任务查询或推送通知返回状态和 Artifact。关键点是远端 Agent 的内部模型、工具和 workflow 对调用方是 opaque 的,调用方只依赖协议契约。面试回答详解,知其所以然
“工作原理”比“工作流程”更偏机制:为什么两个互不了解内部实现的 Agent 能合作?答案是 A2A 把协作边界标准化,把内部执行保持封装。
1. 第一层原理:自描述发现
A2A 的起点是 Agent Card。远端 Agent 用 Agent Card 声明:
- 自己是谁,由谁提供。
- 对外 endpoint 和支持的协议绑定。
- 有哪些 skills,适合处理什么任务。
- 支持哪些输入输出模式和能力。
- 需要什么认证方式。
Client Agent 读取这些元数据后,不需要硬编码远端私有 SDK,就能做能力匹配和调用准备。
2. 第二层原理:标准消息模型
A2A 不要求 Agent 共享内存、prompt 或工具,只要求它们交换标准 Message。Message 里可以包含一个或多个 Part,Part 再承载具体内容。
text
Message
-> role
-> messageId
-> contextId / taskId
-> parts: text / file / data
-> metadata这样做的好处是:自然语言、多模态内容和结构化数据都能在同一套消息模型里传递。Client Agent 不需要知道远端 Agent 内部如何理解任务,只需要把任务表达成协议认可的消息。
3. 第三层原理:任务生命周期
远端 Agent 收到 Message 后,可能立即完成,也可能创建或继续一个 Task。Task 是 A2A 的核心状态对象。
text
submitted -> working -> input-required -> working -> completed
-> failed / canceled / rejectedTask 让协作不再是黑盒同步调用:
- Client 可以查询当前任务状态。
- Remote Agent 可以表示正在处理、需要输入、已完成、失败或取消。
- 长任务可以分阶段产出 artifact。
- 同一个上下文里的多轮消息可以继续推进同一任务。
4. 第四层原理:异步更新
Agent 任务经常比较长,A2A 因此提供多种更新方式:
- 同步返回:短任务直接通过
message/send返回 Task 或 Message。 - 流式返回:长任务通过
message/stream发送状态更新或 artifact 增量。 - 任务查询:Client 通过
tasks/get查询状态。 - 任务订阅:Client 订阅已有任务的后续更新。
- 推送通知:Client 不保持连接时,由 Remote Agent 按配置回调通知。
这些机制共同实现 async-first:任务执行和客户端连接不必强绑定。
5. 第五层原理:opaque execution
A2A 最重要的抽象之一是远端执行保持 opaque。也就是说:
- Client 不知道远端用哪个模型。
- Client 不知道远端有哪些 MCP tools。
- Client 不知道远端 prompt、memory、workflow 和重试策略。
- Client 只依赖 Agent Card、Message、Task、Artifact 这些外部契约。
这使得远端 Agent 能独立升级内部实现,只要对外协议不破坏,协作方就不用改。
6. 第六层原理:安全与治理嵌入协议
A2A 的工作原理还包括安全控制链:
- 发现阶段校验 Agent Card 的来源、签名、版本和缓存。
- 调用阶段按 Agent Card 声明的认证方式获取凭证。
- 服务端按用户、租户、任务和 scope 做授权。
- 执行阶段隔离上下文,最小化传入敏感数据。
- 返回阶段校验 artifact 和 message,记录 trace。
成熟系统会把来自其他 Agent 的内容视为不可信输入,而不是因为走了 A2A 就自动相信。
面试官追问3个问题
追问一:A2A 如何判断一个 Agent 是否支持 streaming?
- 考察点:能力发现和 capability validation。
- 回答方向:Client 应先读取 Agent Card 中的 capabilities,只有远端声明支持对应能力时才使用流式、推送或扩展 card 等操作。
追问二:为什么需要 contextId 和 taskId?
- 考察点:多轮交互和任务追踪。
- 回答方向:contextId 用于关联一组上下文交互,taskId 用于定位具体任务。它们让澄清、补充输入、查询状态和继续任务成为可能。
追问三:远端 Agent 返回的 Artifact 能直接执行吗?
- 考察点:安全意识。
- 回答方向:不能默认直接执行。Artifact 应先做类型校验、权限检查、内容扫描和用户确认,尤其是脚本、配置、邮件、交易或写操作。
扩展知识
工作原理和工作流程的区别
- 工作原理:解释 A2A 为什么能互操作,重点是对象模型、状态机、异步机制和封装边界。
- 工作流程:解释一次任务从发现到完成的步骤顺序,重点是先做什么、后做什么。
A2A 的互操作不是共享上下文
A2A 不要求两个 Agent 共享 memory。相反,它通过 Message、Task 和 Artifact 显式传递必要上下文。这样更适合跨组织协作,也更容易做权限和审计。