← 返回周目标完成情况

公司内多个 Agent 平台接入分析报告

2026-10-09 整理,服务周目标一「AI 助手与外部 Agent 协作技术方案」(周目标原文未入库,三项周目标见 10/16 结项待办(原文引用:../superpowers/plans/2026-10-08-创业平台10月16日结项待办.md;未收录于本包)「周目标」一条),对应 multica AIC-2693 的子任务「Agent 平台接入对比分析」。2026-10-10 按 1010 会补「接入卡点」,并与 ndclaw 对接报告、技术方案对齐。

要回答的问题:团团拆完任务后,要把任务派给公司内的 Agent 平台执行,再把结果取回来。三个候选平台各自支持什么调用协议?怎么鉴权、怎么代用户调用、怎么多轮、怎么传文件?接入前提和代价是什么?

方法:只读各平台仓库的代码与仓库内文档,没有调用任何线上接口。结论都附代码位置,并固定到以下提交(均在 GitHub ndhy-app-web 组织下):

平台 仓库 提交
ndclaw(Agent Hub) agent-hub / agent-hub-daemon / ai-hub-webui e243c5cb(09-30)/ b6b1fb64(09-28)/ ae508af8(09-28)
AI 员工 agentia-engine 9070fa9(10-09)
OpenQ 多智能体平台 openq-ai-manager(master) 6d92193(09-11)

标「推断」的是读代码得出、未经实测的判断;标「待确认」的要问平台方。

一、一页结论

  1. 只有 ndclaw 支持 A2A 协议,并且已经做到生产可用。AI 员工代码里的「a2a」是内部任务模式的名字;OpenQ 里的 agent_card 指对话里的工具卡。两者都不是 A2A 协议。

  2. 三家用的是三种协议:

    三家都具备「派单 → 看进度 → 多轮续接 → 取结果」这几个动作,所以团团可以用一个统一的适配接口,加三个适配器来对接,抽象层不用改。

  3. 能不能「代用户调用」决定了能不能直接接。团团是平台服务,要代平台上的很多用户调用:

  4. 文件和图片:ndclaw 和 OpenQ 执行 Agent 时只取文本,图片和文件会被丢掉。只有 AI 员工有正式的附件字段和产物下载链接。ndclaw 有现成的变通办法:把文件链接写进正文。

  5. 建议:10/16 只接 ndclaw,承接直播电商场景的 9 个专家。AI 员工和 OpenQ 在技术方案里写清适配路线和接入前提,下周不实现。

二、对比总表

维度 ndclaw(Agent Hub) AI 员工(agentia-engine) OpenQ(openq-ai-manager)
技术栈 Python/FastAPI(agent-hub)+ AWS Fargate 每会话一个容器(daemon) Go/gin Next.js(基于开源 LobeHub 二次开发)
调用协议 A2A:JSON-RPC 与 REST 两种绑定 私有 REST:/api/s2s/* OpenResponses:POST /api/v1/responses;另有 LobeHub OpenAPI
发现执行方 GET /a2a/experts(自定义扩展),之后拿到标准的 agent-card.json GET /api/s2s/positions(AI 员工目录) GET /api/v1/agents(OpenAPI)
服务鉴权 BTS 签名 S2S HMAC 签名。管理员线下发一次性票据,调用方用它换服务密钥 执行接口没有服务级鉴权;BTS/UC MAC 只用在周边接口上
代用户调用 ✅ Userid 头 ✅ X-On-Behalf-Of 头(本地用户 ID 或 UC 身份) ❌ 只认用户自己的 API Key 或 OIDC
用户开户 用户第一次调用时自动召唤专家副本、申请实例;平台字典配置每天自动开通 4000 个,等于不限,无需审核(林炜 10/10 确认) ❌ 不会自动开户,用户必须已经在 AI 员工平台上 UC 登录时自动开户
执行 SendMessage(同步)/SendStreamingMessage(流式) POST /api/s2s/tasks(positionId 指定员工) POST /api/v1/responses(model 填 Agent ID)
流式 ✅ SSE ❌ 只能轮询 GET /:id、/:id/messages ✅ SSE(stream: true)
多轮 沿用同一个 contextId 回答提问 /answer、追加要求 /follow-ups、确认计划 /confirm、继续 /continue previous_response_id(内部对应同一个话题)
中止 CancelTask /abort 未见对应接口(待确认)
文件和图片 ❌ 只收发纯文本;变通办法是把 📎 名(原文引用:url;未收录于本包) 写进正文 ✅ 有附件字段 attachments,产物可以取临时下载链接 ❌ 请求格式里定义了图片和文件,但服务端只取文本
冷启动 一般 40~60 秒,A2A 预热上限 300 秒(ndclaw 对接手册) 走任务队列(推断:没有容器冷启动) 走进程内的 Agent 运行时(推断:没有容器冷启动)
用量查询 未见对外接口 GET /:id/token-stats 有余额和模型令牌接口(/api/v1/balance、llm_token)
费用记在谁头上 模型用量记在 ndclaw 的 token 组下,按 UC 用户号区分;算力在 AI Hub 的 AWS 账号上。AgentHub 负责人已同意「可以先用」,以后会加一个 service code 之类的租户字段来拆分账单(10-09);多租户开发报价 3 人日、由我方下单(1009 晚会) 有计费和权益模块,记在谁头上待确认 有余额和计费流程,推断扣的是被代用户的余额,待确认
接入卡点(都要对方配合) 打开 A2A、给我方 BTS 应用授权,配置为主(ndclaw 报告 1.4 待办 1) 发 S2S 票据;我方用户在 AI 员工平台没有账号、又不会自动开户;代用户调用时扣谁的额度 /responses 只认用户自己的 API Key 或 OIDC,要对方加 BTS 鉴权并能指定用户;图片和文件输入不支持
10/16 前 接入 只写方案 只写方案

三、各平台分述

3.1 ndclaw(Agent Hub)

协议:agent-hub 里有一个 A2A 服务端(app/domain/a2a_server/),每个专家都是一个独立的 A2A Agent,地址挂在 /a2a/experts/{agent_ref}/... 下。消息交互层完全按 A2A 标准实现:SendMessage、GetTask、CancelTask、JSON-RPC 2.0、用 contextId 做多轮、产物放在 artifacts 里。谷歌 ADK 和 a2a-js 两套客户端都实际对接过。自定义只有两处:专家目录,以及按请求选模型(metadata.model)。(docs/a2a/integration-guide.md、docs/a2a/2026-08-12-a2a-protocol-conformance.md)

鉴权:只认 Authorization: BTS id=...,nonce=...,mac=... 加 Userid: <纯数字>。Userid 表示代哪个用户调用,后面所有的归属判断都按它来。名片 agent-card.json 不需要鉴权。(app/domain/a2a_server/middleware.py)

专家:分两种,mkt- 是市场上的公共专家,exp- 是用户自己的副本。用户第一次给 mkt- 专家发消息时,会自动召唤成自己的 exp- 副本,不同用户的副本互相隔离。专家由人设提示词 persona_md、技能列表和引擎组成;引擎默认 openclaw,也支持 hermes 和 claude-code;有批量导入功能。(app/domain/expert_hub/models.py:70,76、import_batch.py)

执行链:

  1. 解析专家,必要时召唤副本,保障实例存在;
  2. 向 daemon 申请会话、拿到 WebSocket 地址;
  3. 通过网关发 chat.send;
  4. 把引擎事件翻译成 A2A 状态:流式增量对应 WORKING,结束时写入 artifacts 并置为 COMPLETED,出错置为 FAILED。

(app/domain/a2a_server/executor.py:57-99)

文件和图片:收到的消息只取文本(executor.py:183);转发给引擎时只带会话标识、文本和去重键(gateway_ws.py:116-119);返回结果固定是一段 text/plain(executor.py:70-71);Agent Card 也只声明了文本(card.py:16,62-63)。ndclaw 自己的前端传文件的办法是:先上传到 ndclaw 网盘换签名链接,再把 📎 文件名 | 大小(原文引用:url;未收录于本包) 写进正文。(ai-hub-webui src/hooks/useAttachments.ts)

冷启动与资源:

费用:daemon 用 BTS 向公司 AI 网关的 /v1/key 申请密钥,申请时 username 填 UC 用户号、token_group 填 ndclaw 的组。所以模型用量记在 ndclaw 的 token 组下。(daemon lambda/shared/ai_gateway_runtime_prep.py:86-123)

接入前提:

3.2 AI 员工(agentia-engine)

协议:不支持 A2A 协议。仓库里没有 agent-card,也没有 message/send。代码里的 a2a、a2a_agent、a2a_employee、ensemble 是内部任务模式的名字(AGENTS.md 第 6 节)。运维文档里的「AIHub A2A MCP」是 AI 员工作为调用方去调 AI Hub 的工作流和对话工具,方向和我们需要的相反。(docs/operations/aihub-a2a-mcp.md)

对外接口:给外部服务调用的私有 REST 接口,前缀 /api/s2s/。注释里写明的现有接入方有 agentia-commerce 和 ai-crab。(src/router/s2s_routes.go:38-77)

鉴权:每个请求用 S2S HMAC 签名,新版签名同时覆盖服务名和 X-On-Behalf-Of。服务密钥的拿法是:管理员线下发一张一次性票据,调用方调 POST /api/s2s/register 换取。每个服务还有状态、有效期和专属 IP 三层准入策略。(src/router/s2s_registration_routes.go、src/middleware/s2s_auth.go)

代用户调用:X-On-Behalf-Of 填本地用户 ID 或 UC 身份,但不会自动开户,用户不存在时鉴权直接失败。(src/middleware/s2s_auth.go:85-116)

适合程度:

接入前提:

3.3 OpenQ 多智能体平台(openq-ai-manager)

协议:不支持 A2A 协议。agent_card 是 Agent 对话里工具卡推进内部异步任务的一种触发来源(src/server/services/asyncTask/workflowTypes.ts:16)。

对外接口:

鉴权:OpenAPI(含 /responses)只认 Authorization: Bearer <用户 API Key 或 OIDC 令牌>,没有服务凭证,也不能指定代哪个用户(packages/openapi/src/middleware/auth.ts)。用户用 UC 登录时会自动开户(src/server/services/uc-auth/index.ts:134、uc-user-provision/)。

文件和图片:请求格式里定义了 input_image 和 input_file(types/responses.type.ts:22,30),但服务端解析时只取文字部分,图片和文件会被丢掉(responses.service.ts:86-104)。

适合程度:协议是标准的,用现成的 OpenAI SDK 就能调,流式和多轮都有,从协议角度看最省事。卡在鉴权上:要代很多用户调用,有两条路,都需要 OpenQ 方配合:

四、对团团方案的影响

  1. 统一适配接口。执行方域只用四个方法,每个平台写一个适配器;团团不直接调适配器(见 技术方案 3.4 节):

    方法 ndclaw(A2A) AI 员工(S2S) OpenQ(OpenResponses)
    list_agents 列出执行方 GET /a2a/experts GET /s2s/positions GET /v1/agents
    send 发一轮(首轮派单,之后续话)并收进度 SendStreamingMessage,续话带同一 contextId;SSE 首轮 POST /s2s/tasks,续话 /answer、/follow-ups;没有流式,适配器内部轮询 GET /:id、/messages POST /v1/responses(stream: true),续话带 previous_response_id;SSE
    get_turn 取结果 GetTask 的 artifacts GET /:id + 产物下载链接 返回结果里的输出项
    cancel 中止 CancelTask /abort 未见对应接口(待确认)
  2. 执行方登记。Agent 类执行方直接取各平台的目录,团团自己只登记「真人专家」和「用户自己」这两类。匹配时要用的价位,第一期先写估算值。

  3. 文件统一走链接。团团这边把图片和文件存进公司 CS,换成链接写进正文。这样三家都能接收;AI 员工可以额外用附件字段。

  4. 任务执行是一段对话。三家都是多轮的,任务详情页要能展示和执行方的对话,任务状态里要有「等你回复」。

五、待办与未决问题

平台 状态
ndclaw 10/16 要接。已确认事项、待办(开通 A2A 与授权、创建并上架 9 个直播专家、选品和售后做成技能包)和一项待定(预热池,先弄清机制再决定要不要向对方提)都在 ndclaw 对接背景与待确认项 第一节第 1.3、1.4 条。实例每天自动开通 4000 个、无需审核(林炜 10/10 确认)。费用一项已有答复:「先用」已同意,以后按租户字段拆分账单
AI 员工 暂不考虑,不跟进,只保存本报告第三节的结论。以后接入时再问的四个问题:S2S 票据由谁发;用户能不能按 UC 身份自动开户;代用户调用时花的是谁的权益和额度;有没有流式或回调的计划
OpenQ 暂不考虑,不跟进,只保存本报告第三节的结论。以后接入时再问的四个问题:/responses 能不能加 BTS 鉴权并指定用户;图片和文件输入什么时候支持;执行时扣的是谁的余额;master 最后一次提交在 9/11,确认它就是线上在跑的版本

白晨在 1009 晚会说 ndclaw 只是执行方案之一,AI 员工也可以接;吴梦赢要白晨这边先评估有没有更好的方案(解读页(原文引用:../../knowledge/wiki/60-会议对谈/2026-10-09-服务器与模型预算及两项目分工.md;未收录于本包) 第一节第 2、6 条)。1010 会白晨问这两家接入快不快(解读页(原文引用:../../knowledge/wiki/60-会议对谈/2026-10-10-团团陪跑主流程与外部Agent协作模式.md;未收录于本包) 第五节第 5 条),答案在第二节「接入卡点」一行:两家都要对方配合开通或改造,快慢取决于对方排期。要不要重新启动跟进,由白晨定。

六、出处