主题
高频面试题
A2A 协议的工作流程是怎样的?
流程题要按时间线讲清楚:发现谁能做、如何安全调用、任务怎么跑、进度怎么同步、结果怎么交付、失败怎么处理。
面试官角度分析,想考什么
A2A 完整工作流程是什么?
考发现、认证、发消息、执行、状态更新、交付 Artifact。短任务和长任务、多轮交互怎么走?
考同步、流式、push,以及 contextId、taskId、input-required。失败取消和安全审计怎么做?
考超时、取消、校验、人审和 trace,而不是只讲 happy path。
可直接抄走的 30 秒参考答案
text
A2A 的流程我会按七步讲:第一读 Agent Card 做能力发现;第二根据 security schemes 做认证和授权准备;第三裁剪上下文并发送 message/send 或 message/stream;第四远端 Agent 创建或推进 Task;第五远端在内部执行,可能调用自己的工具或 MCP;第六 Client 通过同步响应、流式事件、tasks/get、订阅或 push notification 跟踪状态;第七任务完成后接收 Artifact,并做校验、审计、失败处理和必要的人审。面试回答详解,知其所以然
工作流程要像讲一条真实链路,而不是背协议对象。可以用“发现 -> 授权 -> 发送 -> 执行 -> 更新 -> 交付 -> 收尾”来组织。
1. 发现阶段:读取 Agent Card
Client Agent 首先找到候选 Remote Agent,并读取它的 Agent Card。
text
GET /.well-known/agent-card.json
-> name / provider / supportedInterfaces
-> skills / capabilities
-> inputOutputModes
-> securitySchemes / security在这一阶段,Client 要判断:
- 远端 Agent 是否擅长当前任务。
- 输入输出模式是否匹配。
- 是否支持 streaming、push notification、extended card 等能力。
- 应该使用哪个 endpoint 和协议绑定。
- 需要什么认证方式。
2. 调用准备:认证、授权和上下文裁剪
进入调用前,Client 不应该把完整用户上下文直接丢过去,而是构造最小必要任务输入。
- 获取或刷新访问凭证。
- 确认用户、租户、scope 和任务权限。
- 裁剪敏感上下文,只传远端完成任务所需的信息。
- 为请求生成幂等键、traceId 或 correlationId。
- 对高风险任务先做策略判断或用户确认。
这一步决定了 A2A 能不能安全落地。
3. 发送消息:创建或推进 Task
Client 使用标准操作发送 Message。短任务可以用普通发送,长任务可以直接请求流式返回。
text
message/send
-> Remote Agent 接收 Message
-> 创建 Task 或继续已有 Task
-> 返回 Task / Message / Artifact
message/stream
-> Remote Agent 接收 Message
-> 持续返回状态事件和 artifact 更新Message 里通常会包含 role、parts、messageId、contextId、taskId 和 metadata。第一次请求可能创建新 task;后续请求可以带 taskId 继续推进。
4. 执行阶段:远端 Agent 内部处理
Remote Agent 收到任务后,在自己的 runtime 中执行。它可能:
- 调用 LLM 做规划或生成。
- 调 MCP Server、数据库、SaaS API 或内部服务。
- 请求用户补充信息。
- 调用人工审批。
- 生成中间结果或最终 artifact。
这些内部过程不暴露给 Client。Client 只看到标准任务状态和输出。
5. 状态同步:查询、流式、订阅和推送
任务执行中,Client 有几种同步方式:
- 同步等待:适合很短的问答或轻量任务。
- message/stream:适合需要实时展示进度的长任务。
- tasks/get:适合轮询任务状态。
- tasks/cancel:用户取消或超时时终止任务。
- tasks/subscribe:对已有任务继续订阅更新。
- Push Notification:客户端离线或不能保持连接时接收回调。
面试中可以强调:A2A 的流程不是固定只能一种通信方式,而是按任务长度和客户端能力选择。
6. 交付阶段:返回 Artifact
任务完成后,Remote Agent 返回一个或多个 Artifact。Artifact 可以是:
- 文本报告。
- 文件或下载引用。
- 图片、音视频或多模态结果。
- JSON、表格、表单或其他结构化数据。
- 中间产物和最终产物的多个版本。
Client 接收后要做类型校验、权限检查、引用保存、UI 展示和后续汇总。
7. 收尾阶段:审计、失败恢复和治理
完整流程还要处理非 happy path:
- 任务失败时记录错误码、可重试性和失败原因。
- 超时后取消任务或进入后台任务。
- 需要输入时向用户澄清,再用同一个 taskId 继续。
- 高风险 artifact 或动作进入人工确认。
- 记录 Agent Card 版本、请求参数摘要、状态变化、artifact 引用和最终结果。
面试官追问3个问题
追问一:如果远端 Agent 需要用户补充信息怎么办?
- 考察点:多轮任务处理。
- 回答方向:远端可以把 Task 状态置为 input-required,并返回需要补充的问题。Client 收集用户输入后,带上同一个 taskId 或 contextId 发送后续 Message。
追问二:客户端断线了任务怎么办?
- 考察点:异步任务设计。
- 回答方向:任务状态应由远端持久化。客户端恢复后可用 tasks/get 查询,或事先配置 push notification 接收异步更新。
追问三:什么时候用 stream,什么时候用 push?
- 考察点:通信模式选型。
- 回答方向:用户在线、需要实时进度时用 stream;任务很长、客户端不能保持连接或需要后台通知时用 push。
扩展知识
短任务和长任务的判断
- 短任务:一次问答、简单分类、轻量转换,通常
message/send同步返回足够。 - 长任务:深度研究、文件生成、跨系统操作、人工审批,优先使用 streaming、查询或 push。
一个流程图式记忆
text
Agent Card
-> Auth & Context
-> Message
-> Task
-> Status Updates
-> Artifact
-> Audit & Cleanup