A2A¶
ai-elements-a2a 使用官方 a2a-java-sdk 连接 Agent2Agent Agent,支持 A2A 1.0 JSON-RPC binding,并兼容 0.3 Agent。远程 Agent 可以作为聊天 provider,也可以作为自己 Agent 的子 Agent。
val agent = A2aAgent("https://agents.example.com") // card at /.well-known/agent-card.json
ChatController(backend = { _ -> A2aBackend(agent) }, scope = viewModelScope)
SDK 使用 Java 17 库 API,因此需要 core library desugaring。
作为 provider¶
每轮发送最后一条用户消息及会话的 A2A contextId。如果上一轮任务处于 input-required 或 auth-required,回答会继续同一个任务。两个 ID 保存在回复的 Message.metadata 的 a2a 字段中。
- Artifact 和 Agent 的最终消息映射为文本、文件和数据 part。
working状态下的进度消息显示为data-task清单。failed、rejected、canceled以错误结束本轮。- A2UI part(
application/a2ui+json)通过 生成式 UI 渲染;用户操作以 A2UI A2A part 返回。
作为子 Agent¶
A2aAgent.asSubAgent(card) 将远程 Agent 转换为 SubAgent。应用内 Agent 可通过 delegate_task 委派任务,运行过程显示为 Subagent 卡片:
val researcher = A2aAgent("https://agents.example.com")
val harness = AgentHarness(
model = model,
// Remote agents the model can delegate to with `delegate_task`; an unreachable one is skipped.
remoteSubAgents = { listOfNotNull(researcher.cardOrNull()?.let { card -> researcher.asSubAgent(card) }) },
)
cardOrNull() 在后台获取 Agent card,有超时并短期缓存失败,避免不可达的 Agent 阻塞一轮对话。
Agent card¶
Agent 组件显示 A2A Agent card 的描述和技能。