连接任意Agent:qwen-audio-agent BackendPort适配器与A2A开发完全指南
【免费下载链接】qwen-audio-agentA realtime voice runtime that keeps Agents talking, working, and present. Real-time Voice Runtime for AI Agents项目地址: https://gitcode.com/gh_mirrors/qw/qwen-audio-agent
qwen-audio-agent是一个实时语音运行时(Realtime Voice Runtime),让 AI Agent 始终保持对话、工作与在线。它最大的工程价值在于:通过协议中立的BackendPort适配器接口和可选的 A2A 后端适配器,你可以把任意 Agent——ACP 工具、远程 A2A Agent、HTTP 服务、自研任务运行时——统一接入同一个语音交互系统,而语音、任务队列、权限中继和结果投递完全不用改。
一、先理解:为什么需要统一的 Agent 接入层
普通用户的视角是:对着麦克风说话,前台 Agent 即时回答;遇到"搜一下""查订单"这类复杂工作,就委托后台 Agent 慢慢做,做完了用自然语言汇报。
开发者的视角则是三层架构——实时前台、Gateway 协调层、可选的持久化执行层。而三层之间那座"桥",就是BackendPort 适配器:
图中的关键扩展点写得很直白:替换 Backend Agent Adapter,即可接入其他支持会话、事件、取消与权限交互的后台 Agent。这正是本文要讲的内容。
二、连接 Agent 的 4 条路径:从零代码到完全定制
在 docs/backends/extend.md 中,官方把接入方式分成四条路径,按"写的代码量"从少到多排列:
| 路径 | 适用对象 | 需要写代码吗 |
|---|---|---|
| 路径 1:通用 ACP | 已支持 ACP 协议的 Agent | ❌ 纯配置 |
| 路径 2:远程 A2A Agent | 支持 Google A2A 协议的 Agent | 少量(组装 Gateway) |
| 路径 3:自定义 BackendPort 适配器 | HTTP 服务、硬件 Agent、任意任务运行时 | 中等 |
| 路径 4:一等 ACP 后端 | 希望提供一键安装、桌面引导的正式后端 | 较多 |
路径 1 是大多数人的起点:只要你的 Agent 会说 ACP,用环境变量就能接上,零代码完成集成。
三、BackendPort:10 个方法定义"什么算一个合格的后台 Agent"
BackendPort是 Orchestration Runtime 与后台之间的内部边界——它不是客户端协议,而是一份能力契约。任何适配器必须完整实现 10 个方法:
describe—— 声明身份与能力start/close—— 幂等的启动与释放health—— 当前可用性submit—— 执行一个任务并返回最终结果status/cancel—— 查询与取消任务respondAuthorization/respondInput—— 权限确认与补充输入subscribe—— 订阅归一化的后端事件流
源码契约定义在 backend-port.mjs,官方参考文档见 docs/reference/backend-adapter-sdk.md。
设计精髓:隔离"内部身份"
BackendPort 有几条铁律,新手容易踩坑:
- 任务 ID 不跨界:
submit、status、cancel共享同一个 GatewaytaskId,但私有会话、远端任务 ID、拓扑信息永远不能穿过端口。 - 模型只看指令:发给 Agent 的提示只包含规范的
instruction和附件,不要序列化 ASR 原文、聊天历史、时区等元数据。 - 结果只有一种事实文本:最终结果用
content承载事实材料,由前台 Agent 总结并自然表达;文件、图片走artifacts。适配器不能替前台规定"该怎么说"。 - 进度走事件流:通过
subscribe发布backend.activity、backend.message、backend.artifact等归一化事件,原始协议负载永远到不了前端。
用官方合规套件验证你的适配器
SDK(backend-adapter-sdk.mjs)导出了defineBackendAdapter(组合期校验方法完整性)、createBackendAgentHost(组装进 Gateway)、verifyBackendAdapterConformance(公开合规测试套件)等工具。你的第三方适配器只需提供新实例和两个任务值,套件会自动检查:幂等生命周期、结果边界、事件与所有者隔离、重复任务、取消和订阅清理——和内置 ACP 适配器跑的是同一套测试,这给了集成方很强的确定性。
四、A2A 适配器:把远程 Agent 一行接进来
如果你的 Agent 说的是A2A 协议(Google 主导的 Agent-to-Agent 开放协议),项目内置了可选的 A2A 后端适配器(源码:a2a/backend-adapter.mjs),基于官方 A2A JavaScript SDK 自动处理 Agent Card 发现、协议协商、任务、取消和 Artifact 解码。
它只需一个agentCardUrl(指向/.well-known/agent-card.json的完整 URL),认证走token或自定义headers,且绝不写进发现结果里。适配器内部完成:
- 任务投影:规范的 Task 指令变成 A2A 用户消息;附件转为标准 Part 并带 MIME 类型
- 流式优先:Agent Card 声明支持 streaming 就消费原生事件,否则自动降级为轮询
GetTask(默认 1 秒间隔) - 状态映射:A2A 的
SUBMITTED / WORKING / COMPLETED / FAILED / CANCELED一一对应 Gateway 状态;INPUT_REQUIRED和AUTH_REQUIRED会转成协议中立的输入请求,适配器"绝不去猜凭证",而是把 Agent 的提示原样透传给前台
关于会话连续性,默认每个新任务开启独立上下文;设置reuseContext: true后,同一ownerId的后续任务会复用服务端返回的contextId,实现跨任务的多轮对话(官方座舱与客服示例就是这样做的,各自在 Agent 内保留最多 50 轮)。
完整选项与状态映射表见 docs/reference/a2a-backend-adapter.md。
五、真实场景:智能座舱示例演示了 A2A 接入长什么样
项目内置的智能座舱示例(examples/smart-cockpit/)完整展示了这套架构:可替换的座舱客户端、框架核心的前台 Agent + Gateway,以及通过A2A 协议连接的可替换后台 Agent(示例用 Qwen3-Flash + MCP 做复杂任务编排):
图中紫色虚线标注的正是 A2A 通道——任务下发、结果回流都走这条路径,而客户完全可以替换为自己的后台 Agent,前台语音交互代码一行不用改。类似的参考实现还有 examples/customer-service/(客服)与 examples/lightrag/(知识检索),可对照阅读。
六、快速上手清单
- 判断你的 Agent 说什么协议:ACP → 走纯配置路径;A2A → 用内置 A2A 适配器;都不是 → 自己实现 BackendPort
- 组装 Gateway:用
createBackendAgentHost包装适配器,交给createGatewayApplication,几行代码完成接线 - 跑合规套件:用
verifyBackendAdapterConformance验证幂等性、取消、事件隔离等关键行为 - 记住边界:远端 ID 不出端口、模型只看 instruction、事实文本进
content、进度走subscribe
更多后端配置细节可参考 docs/backends/configuration.md 与 docs/configuration/backend.md。
七、常见问题(FAQ)
Q:BackendPort 是对外协议吗?不是。它是内部边界,Gateway 通过它组装适配器;面向客户端的是 Gateway 自身的协议,保持协议中立。
Q:加 A2A 后端需要新增AGENT_PROTOCOL值吗?不需要。A2A 适配器是面向自定义 Gateway 启动器的程序化扩展,现有AGENT_PROTOCOL值仍只选择内置后端,系统不会动态加载任意代码,安全性有保障。
Q:适配器不支持权限交互怎么办?保持现状即可——对respondAuthorization显式拒绝,调用方绝不会"猜测"支持情况,能力一律以describe()声明为准。
写在最后
qwen-audio-agent 的接入哲学可以用一句话概括:编排层协议中立,产品差异留在适配器里。无论你手上是一个 ACP 工具、一个远程 A2A Agent,还是一套自研 HTTP 任务系统,BackendPort 的 10 个方法就是唯一需要面对的接口——接上它,语音、任务、权限、结果投递这套完整体验就自动复用了。
【免费下载链接】qwen-audio-agentA realtime voice runtime that keeps Agents talking, working, and present. Real-time Voice Runtime for AI Agents项目地址: https://gitcode.com/gh_mirrors/qw/qwen-audio-agent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考