← 返回周目标

团团与外部 Agent 协作技术方案 设计

日期:2026-10-09;10-10 按 1010 会白晨对本文 v2(AIC-2693 第二个附件)的意见和《NDClaw 服务端对接手册》v1.0 回修,同日按子任务 AIC-2694 的合规评估补小红书执行的核实结果。对象:本周目标一「完成 AI 助手与外部 Agent 协作技术方案设计」(周目标原文未入库,三项周目标见 10/16 结项待办「周目标」一条),明确团团拆解任务后的能力匹配、执行方对接、结果回收三段流程,以 ndclaw 为第一个外部执行方,作为 10/12~10/16 开发与 10/16 交付的依据。场景侧的具体落地见姊妹篇 直播电商场景落地方案。表结构、状态机、时序、接口与配置这些实施细节,等本文确认后再写(10-09 写过一版纯技术方案 v3,留在 AIC-2693 第三个附件)。

性质三分:白晨已定/本文提案/待白晨定,每条规则都标明。团团现有代码在分支 codex/tuantuan-project-assistant(c65148be,未合入 master,已推到 origin:https://github.com/ndhy-app-web/venture-os/tree/c65148be),下文简称「团团分支」。

1. 目标与范围外

目标

  1. 回答 0929 陈洁提出的五个问题(解读页),首个执行方是 ndclaw:
  2. 10/16 要做到(本文提案):
  3. 10 月底及以后(本文提案):接 AI 员工、OpenQ 两个适配器;付费执行方接交易层;团团预审自动化;事实变更自动传播到下游;委派模式在用户离开页面后继续推进(要后台工作进程,3.7)。
  4. 回答白晨 1010 会的三个问题(解读页 第五节):

范围外

2. 涉及的文件与接口

路径和命名都是本文提案,实施计划阶段可以调整。

路径 新建/修改 说明
apps/api/app/tuantuan/ 修改(团团分支已有) ① 把写死的 INSTRUCTIONS 拆成「内核指令 + 场景包」,场景包用 Pydantic AI 的 Capability 挂载;② 新增派单、预审用到的结构化输出
apps/api/app/tuantuan/scenarios/<场景>/ 新建 场景包:SKILL.md(提示词正文)+ pack.yaml(立项维度、任务模板、关卡等结构化部分)。首个场景包是直播电商,见姊妹篇
apps/api/app/executors/ 新建 执行方域:执行方登记、统一适配接口、ndclaw A2A 适配器、执行记录、交付块解析
apps/api/alembic/versions/ 新建迁移 executors(执行方登记)、executions(执行记录)、execution_messages(工作间消息)、project_facts(项目事实)四张表
apps/api/app/common/config.py 修改 新增 NDCLAW_A2A_BASE_URL 等(手册确认不需要 biz-code 头);BTS 凭据沿用 apps/api/.env 里已有的 venture-os BTS 应用(8158568859),不入库
apps/api/tests/fake_a2a/ 新建 假 ndclaw A2A 服务,供单元和集成测试用,照 apps/api/tests/fake_cs/ 的做法
apps/web/src/features/projects/(任务工作间) 新建 UI 由陈高武在周目标三里设计;本文只定接口
apps/api/app/tasks/ 已存在,勿建 交易层的单。项目任务不复用这张表;付费执行方派单时才生成交易单并关联(团团分支运营层设计 2 节,10 月底)
apps/api/app/files/(CS) 已存在,复用 用户上传的截图和文件存这里,换成签名链接传给专家

3. 设计

3.1 角色分工(本文提案;五类确认为白晨已定)

角色 负责 不做
用户 定目标和授权;拍板五类事(花钱、对外发布、改目标或验收标准、换人、结项);完成只有本人能做的线下动作 —
团团 立项、规划、匹配派单、维护项目事实、预审验收、节奏与复盘;委派模式下代用户回答专家的问题(3.7) 不亲自做专业产出,不持有账号和支付凭据,不替用户拍板五类事
专家(执行方) 专业判断;在任务工作间里和用户(委派模式下是团团)多轮协作;在授权范围内执行并留证据;按格式交付;发现上游问题或做不了时上报 不改项目目标和预算,不带走项目信息,不私下给其他专家派活

团团能做什么、不能做什么,沿用陪跑原型规则 4(白晨已定):团团能自己做的只有增删调任务、指派官方 Agent、催办提醒,每次都记入改动记录。五类确认写在工具定义上(requires_approval),不靠提示词约束(团团分支运营层设计 3.3 节)。1010 会白晨再次说明:团团在运行中要能创建、删除、修改任务,并把任务指派给 Agent、人(发单)或用户自己(1010 会:121)。

3.2 总体结构(本文提案)

              ┌──────────────────── 创业平台后端 ─────────────────────┐
用户 ─项目对话─→ 对话轮次 → 团团(内核指令 + 场景包)                │
              │                 │ 调用平台函数(五类事要确认)         │
              │                 ↓                                     │
              │   平台服务:任务图 · 项目事实 · 决策队列 · 执行记录    │
              │                 ↑ 解析交付块/上报块/等待线下块      │
用户 ─任务工作间→ 执行记录(消息存档)                                 │
              │                 │ 统一适配接口(鉴权在这里)           │
              └─────────────────┼─────────────────────────────────────┘
                                ↓
                   ndclaw / AI 员工 / OpenQ 上的专家

两条线都先进平台后端,区别在终点:项目对话的终点是平台里的团团,任务工作间的终点是外部平台上的专家。平台在两条线里扮演的角色也不同:

项目对话 任务工作间
对端 团团:平台自己的 Agent,跑在平台进程里 外部专家:跑在 ndclaw 等外部平台上,要跨网络调用
平台的角色 托管:给团团上下文和工具,按规则放行它的操作 转发并解读:原样转给专家,同时从回复里识别交付块、上报块、等待线下块
能不能改项目 能,通过平台函数(五类事要用户确认) 不能直接改;专家的输出只是文本,经平台解析后才写进任务图和项目事实
范围 整个项目,贯穿几十天,多次唤醒 一个任务,任务完成就关闭
对话状态 只在我方数据库 专家那边一份上下文(ndclaw 的 contextId),我方存一份副本
响应 秒级 首次派单有冷启动,用异步状态承接(「专家准备中」)

两条线在平台服务这一层汇合:团团通过工具读写任务图和项目事实,工作间里专家的交付经平台解析后也写进这里。所以团团不用旁听每一句对话,也能知道任务进展到哪了。

3.3 能力匹配(本文提案)

执行方登记(executors 表)有三类来源:

类型 来源 10/16
外部 Agent 从执行平台的目录同步(ndclaw:GET /a2a/experts),平台侧补登能力标签、价格、可见范围 ✅ 直播电商 9 个专家
用户本人 内置 ✅ 兜底
真人接单者 交易层 10 月底

字段:执行方编号、类型、平台、平台侧引用(ndclaw 只登记 mkt- 开头的市场专家,用户首次调用时自动召唤成本人的副本)、能力标签、价格、是否启用;另按合规评估第五节加两项:通道类型(不接第三方账号、官方授权、用户确认、非官方)和动作类型(生成、读取、发布、互动、交易)。10/16 的 9 个直播电商专家都是「不接第三方账号、生成」。

匹配分三步:

  1. 场景包里的任务模板给出所需的能力标签。
  2. 平台函数 find_executors(task) 用代码筛掉四类执行方:能力不符的、超预算的、未启用的,以及通道类型为「非官方」的(不对 C 端用户开放,合规评估第五节)。项目所有者不是组织账号时,ndclaw 的执行方也不返回(ndclaw 目前只支持组织账号,ndclaw 报告 1.3 第 2 项)。
  3. 团团在候选里挑一个并写明理由。assign 时平台再校验一次:执行方编号必须在本次候选里,模型编出来的编号直接拒绝(团团分支运营层设计 3.2 节)。

价格从哪来(本文提案;定价方式待白晨定,第 6 节):

场景包只写能力,不写指定哪个执行方。这样团团始终可以在多家执行方之间挑选,站在用户这一边。

3.4 执行方对接:统一适配接口(本文提案)

团团不直接调外部平台。执行方域只用四个方法,每个执行平台写一个适配器;派单、续话、接收进度本质上都是「发一条消息、收一段流」,合并成一个 send。

方法 含义 ndclaw(A2A) AI 员工(S2S) OpenQ(OpenResponses)
list_agents 列出执行方 GET /a2a/experts GET /api/s2s/positions GET /api/v1/agents
send 发一轮:首轮发任务书开一个执行,之后用户或团团续话;同时接收进度和回复 SendStreamingMessage,首轮新开 contextId,之后带同一个 首轮 POST /api/s2s/tasks,续话 /answer、/follow-ups;没有流式,适配器内部轮询 GET /:id、/messages POST /api/v1/responses(stream: true),续话带 previous_response_id
get_turn 确认一轮的终态、取产物 GetTask 的 artifacts GET /:id + 产物下载链接 返回结果里的输出项
cancel 中止 CancelTask /abort 待确认

三家的协议细节、鉴权、接入前提和卡点,见 公司内多个 Agent 平台接入分析报告。

ndclaw 适配器要点(依据《NDClaw 服务端对接手册》v1.0 与 agent-hub e243c5cb,详见 ndclaw 对接背景与待确认项):

  1. 鉴权:每个请求带 BTS 签名,加 Userid: <UC 用户号> 表示代哪个用户调用,再带 A2A-Version: 1.0;不能带任何 sdp-* 头。BTS 的令牌要在进程内缓存,不能每个请求都去换一次。只接组织账号。
  2. 一个执行对应一个 contextId。专家在同一个任务里记得之前的对话;不同任务之间不共享上下文。
  3. 只收发文本。任务书和交付都是文本。用户给的文件先存到我方 CS,换成签名链接,以 📎 [文件名 | 大小](url) 的形式放在正文前面;专家产出的文件会自动上传、以 Markdown 链接写在回复里,链接会过期(手册 7.4),所以平台收到后要转存到我方 CS(只转存 CS 域名的链接)。转存是我方要做的,还没实现,也没验证:现有 CsStorage 能上传和签发下载链接,「从专家给的链接下载再上传」还没写;链接的域名、有效期、下载要不要鉴权,联调时验证。
  4. 冷启动一般 40~60 秒,预热上限 300 秒,读超时不低于 600 秒。所以派单要按异步处理:执行状态先进「派单中」,界面提示「专家准备中」。超时不能重发同一条消息,重发只会多排一次冷启动。
  5. 流式中断时,以 GetTask 的结果为准,不能只信流里的最后一帧。
  6. 实例自动开通:用户首次调用时平台自动开通实例,每天 4000 个、无需审核(林炜 10/10 确认),10/16 不做派单前的实例检查。

3.5 任务书与交付块(本文提案)

任务书由平台按场景包的任务模板,从项目事实里取字段拼成,作为首轮 send 的消息:

附件:📎 [名 | 大小](url)
【任务书】
项目目标:…(只摘本任务相关的部分)
本任务:…  交付物:…  验收标准:…
上游成果:(按任务模板列出所需字段)
边界:预算 / 期限 / 平台 / 合规禁区
授权:可以自己决定的事 / 必须请用户确认的事

附件链接按手册 7.4 放在正文前面。这和陪跑原型规则 7(白晨已定)一致:派活时只把项目摘要交给执行方,不给全部聊天记录。

交付块:专家完成时,在最后一条消息末尾附一个固定格式的代码块,平台据此判断交付了:

```交付
{"status": "done",
 "deliverable": {…按任务模板约定的字段…},
 "self_check": [{"criterion": "…", "met": true, "note": "…"}],
 "open_issues": ["…"],
 "downstream_hints": ["…"],
 "attachments": ["📎 [名](url)"]}
```

另外有两种块:

消息里没有这三种块,就视为对话还在进行,状态是「等你回复」;委派模式下先由团团代答(3.7)。

兜底:如果合作方来不及改提示词,平台用各员工固定的收尾话术(如「交给团队下一个环节」)判断完成,再由团团从对话里提取交付字段。这只是过渡方案,准确率低于交付块。

3.6 结果回收(本文提案)

执行记录(executions 表,独立建表:外部调用要幂等、可重放、可审计):项目、任务、执行方、平台侧上下文(contextId、远端任务 ID)、状态、交付(JSONB)、预审意见、时间戳。

状态迁移:

派单中 → 进行中 ⇄ 等你回复
               ↘ 等待线下 → 进行中
               ↘ 已上报 → (团团处理后)进行中
进行中 → 待预审 → 待验收 → 已完成
            ↘ 退回返工 → 进行中(意见作为新消息发回专家,沿用同一 contextId)
任一状态 → 失败 / 已取消
  1. 预审:团团用结构化输出检查三件事——是否满足验收标准、和上游成果是否一致、有没有踩合规清单。结果是通过或退回,退回时附意见。10/16 预审只给意见、不拦截(待白晨定,见第 6 节)。
  2. 验收:用户确认或退回。ndclaw 免费,验收后不结算;付费执行方验收后再触发结算(10 月底,接交易层)。
  3. 带入下游:验收通过后,把交付里的字段写进项目事实;下游任务的任务书从项目事实里取需要的字段。这样直播主管原先「每个环节把成果传给下一个环节」的交接表,就变成了数据依赖。
  4. 变更传播(10 月底):项目事实带版本号,记录哪些任务依赖它。某条事实变了,依赖它的已完成任务标成「待更新」,由团团提议重做哪些。

对方不交付(白晨 1010 会要求考虑,1010 会:301;做法为本文提案,10/16 要做,交互和委派两种模式都适用):

情况 去处
远端失败或超时 进「失败」;用户可以重试(沿用同一 contextId)或取消
专家说做不了 专家输出上报块并写明原因;团团在项目对话里给用户三个选择:换执行方、改由用户自己做、调整或删掉这个任务。换人属五类事,用户确认后才执行
说完成了,但没给交付块 视为对话还在进行(「等你回复」,委派模式下先由团团代答,3.7);命中兜底话术时由团团提取交付(3.5)
交付缺东西:缺字段、说好的文件没有、链接失效 交付块不完整的,平台提示「交付格式不完整」,专家补交;附件缺失的,预审列为问题,用户退回后平台把问题发给专家补交
退回两次仍不合格 团团提议换执行方或调整任务,由用户定

不能多轮的执行方要闭环:白晨问不支持交互的外部能力是否要闭环(1010 会:301)。以后接的工具类执行方(3.11)没有多轮,派单前任务书必须完整(输入没凑齐就不派),结果只有交付或失败两种。ndclaw、AI 员工、OpenQ 都支持多轮,不受这条限制。

3.7 任务工作间与协作模式(白晨 1010 已定方向;做法为本文提案)

白晨在 1010 会定了:交互和委派都要支持。用户能在工作间里直接和专家聊;也能只要结果,由团团凭项目记忆回答专家的问题,做成可选(1010 会:367-381)。

交互(10/16 默认) 委派(团团代答)
专家的提问谁来答 用户,在任务工作间里答 团团先答,依据任务书和项目事实;答不了的、涉及五类事的,转给用户
用户看到什么 完整对话 同样是完整对话,团团的回答标「团团代答」;只在需要用户时提醒
适合 要用户逐项选、要一起想的任务(如主播定位的 13 步) 只看结果的任务(如调研、整理)

两种模式随时可以互切;用户在工作间里插话,这一轮就由用户答。

3.8 安全与边界(本文提案;五类确认为白晨已定)

  1. 凭据:BTS 的应用密钥只在适配层,不进模型上下文、不写日志;Userid 用项目所有者的 UC 用户号,由服务端写入,不接受前端传参。
  2. 不需要沙箱:场景包和专家的 skill 都是纯提示词;团团的工具都是平台写好的函数(含 3.11 里调第三方 API 的工具),模型只填参数,团团进程里不执行模型生成的代码。要跑代码、开浏览器、读写文件的工作,在执行平台自己的沙箱里做(ndclaw 每个会话一个独立容器)。
  3. 防提示词注入:
  4. 最少给数据:任务书只放本任务需要的字段;CS 签名链接设有效期。
  5. 只接组织账号:ndclaw 目前不支持个人账号,项目所有者是个人账号时不派给 ndclaw 专家(3.3)。

3.9 费用:模型费用在闭环里怎么体现(本文提案)

现状:当前闭环里不体现。 项目预算(白晨 1010 会:目标、预算、时间是每个项目的固定项)在 10/16 只用来筛执行方价格、走「花钱」确认;团团和专家的模型费用都由平台出,不计入项目预算,也不给用户看。

费用 谁出 怎么记 在闭环里怎么体现
团团自己的模型调用 我方网关预算(1009 晚会:模型整体申请 3 万元、挂在创业平台,两个项目先一起用) 运营层设计规定每轮存用量(输入、输出、缓存读写 token),团团分支代码 c65148be 还没落库;建议 10/16 补上 10/16 只记录;以后在项目里显示团团用了多少
专家(ndclaw)的模型和容器 试用期由 AI Hub 出;ndclaw 做完多租户后记我方(报价 3 人日、我方下单,对方说本月内做完,见 1009 晚会第一节第 3、4 条;1010 会白晨说吴梦赢已批、由小杰下单,推断即这一单) A2A 没有用量接口:每个执行记轮数和耗时,实际费用等 ndclaw 按 service code 出账 10/16 不体现;明码标价后按执行方价格计入项目花费,派单前走「花钱」确认(3.3)
真人接单者的报酬 用户,经交易层 交易层 10 月底:验收后结算

模型费用要不要计入项目预算、用户要不要为模型付费,待白晨定(第 6 节)。

3.10 各方改造代价(回答陈洁第 4、5 问)

一方 要做什么 估计
我方 执行方域与 ndclaw 适配器、四张表、场景包加载、任务工作间接口、不交付处理,以及前端工作间(周目标三) 下周主要工作量
ndclaw(AgentHub) 在 AIAE 生产环境打开 A2A,给我方 BTS 应用开通接口权限;预热池先联调、再按需申请。实例每天自动开通 4000 个、无需审核;专家先不隔离、直接上架市场 配置为主;「可以先用」已答复,其余见 ndclaw 报告 1.3、1.4 节
直播合作方 去掉对「主管」的依赖,改成按任务书接收输入;收尾时输出交付块,做不了时输出上报块;产出文件时回链接。9 个专家的创建、发布和技能包,由合作方(范敬萍)或我方在 ndclaw 界面上做,谁先有空谁做 改提示词,见姊妹篇第 6 节

3.11 非 Agent 能力的接入(回答白晨 1010 会;本文提案)

白晨在 1010 会要求先把这个问题答上(1010 会:413-439):Ricky 问过平台以后怎么接各方的能力,举的例子是 Perplexity 这类 AI 搜索,它不是 Agent。林炜会上的回答因为断音没有记全(:441-479),这里成文作答(林炜 10/10 确认)。

原则:外部能力进平台只有两个入口。要派单、留执行记录、走验收的,作为执行方接进执行方域;团团自己做判断时要查的,作为团团的工具,结果只进团团的上下文。

能力 例子 接法 10/16
Agent 平台上的专家 ndclaw、AI 员工、OpenQ 每个平台一个适配器(3.4) 只接 ndclaw
一次调用就出结果的工具或 API Perplexity 类 AI 搜索、数据查询 ① 首选挂在执行平台的专家上,由专家在自己的技能里调用,平台不逐个直连(ndclaw 专家最多挂 10 个技能,手册 6.5;技能里能否调外部 API 是推断,联调时验证);② 团团自己要用的,比如立项时查资料,做成团团的工具(只能是平台写好的函数,见下文);③ 要作为独立执行方、走验收的,写一个工具适配器,实现同样的四个方法,一次调用就返回结果,按 3.6 的闭环要求处理 不做
要以用户身份对外操作的平台 小红书发帖 另案。1010 会林炜转述的新结论是官方有 SDK、用户最后只负责审批发布(林炜说不确定,:393-411)。核实结果(合规评估 3.3):官方分享 SDK 由前端唤起小红书 App、用户在小红书里自己发,服务端只做签名;但官网已暂停接入,且不再预填标题和正文。白晨要求做或不做都把理由和对策写清楚,再和老板谈,风险与红线见合规评估。在那之前维持「平台不代发」(第 1 节范围外) 不做

团团的工具会不会推翻 Pydantic AI 选型(林炜 10/10 提出):不会。选型的前提就是「工具就是平台业务接口」,代码执行、浏览器、复杂文件这类活派给 NDClaw 等运行时(运行框架选型报告;白晨 0928 定选型不考虑代码执行)。上表 ② 的工具也是平台写好的函数,只是函数里调一个固定的第三方 API,仍在这个前提里。

4. 测试与验收

按仓库工程标准(docs/standards/2026-09-13-仓库工程标准-可维护性与测试体系.md)分三层,交付流程按 skill deliver-task:

5. 端到端验证步骤

  1. 用 make check-changed 跑改动相关的测试;收口时跑 make check。
  2. 启动本地服务,配置好 ndclaw 正式环境的地址(先在正式环境联调)和 BTS 凭据。
  3. 新建直播项目 → 立项 → 开工,在画布上看到任务和建议的执行方。
  4. 派单「主播定位」:状态从「派单中」变成「进行中」,工作间出现专家的第一条消息。
  5. 在工作间里回答完问题,专家输出交付块;状态依次经过「待预审」「待验收」,验收后变成「已完成」。
  6. 派单「主题策划」:确认任务书里带上了定位结果。
  7. 把一个任务切到委派模式:专家的提问由团团代答,消息标「团团代答」;团团答不了的,提醒用户到工作间里回答。

6. 待白晨定

问题 本文默认 备选
小红书直接执行:0929 已定「平台不能替用户发帖」;1010 会老板仍希望直接在小红书执行。合规评估核实:代发笔记的官方接口 write_notes 还在规划中;官方分享 SDK 是唤起小红书 App 由用户自己发,但已暂停接入,也不再预填文字;现成的代发工具都要托管账号、走非官方通道 10/16 维持不代发,对外发布仍派给用户;做或不做的理由与对策按合规评估和老板谈(3.11) 向小红书商务申请 write_notes 或恢复分享 SDK 接入,拿到后由用户确认发布;用非官方工具代发要先过法务,且不对 C 端开放(合规评估第五节)
团团预审要不要拦截 10/16 只给意见,不拦截 不通过就退回专家
执行方怎么定价 明码标价:Agent 执行方按任务模板分档定固定价,依据多租户计费后的实际成本(3.3) 按实际用量事后结算,要 ndclaw 出单次用量
模型费用要不要计入项目预算、用户付不付 10/16 由平台出,只记录、不计入(3.9) 计入项目预算,按执行方价格扣

v2 列在这里、现在已经定了的,移到正文:

7. 依据