1. 为什么长链路任务一到多智能体就乱套
先说结论:Moltbot(clawdbot)的任务编排能力,核心不在于“能开多少个 Agent”,而在于主智能体怎么把任务拆干净、子智能体怎么把结果交回来。我见过太多人一上来就配 14 个 Agent 的“梦之队”,结果一个“帮我整理本周竞品动态”的请求,三个子智能体互相等对方输出,最后卡死在上下文窗口里。
Moltbot 是什么?简单说,它是一个支持多渠道路由、Skill 扩展和子智能体并行的智能体运行时。它能做什么?把一条长链路任务拆成“规划—工具调用—观察—反思”的循环,并在需要时派生隔离子智能体去并行处理。适合谁?适合那些任务已经长到单次对话塞不下、或者需要同时盯多个数据源的开发者。
我试过用单 Agent 跑“抓取 5 个竞品官网更新 → 对比功能差异 → 生成周报 → 推送到飞书”,前两步还行,到第三步上下文已经堆了 6 万多 token,模型开始丢细节。后来改成“主 Agent 只做编排,5 个子智能体各盯一个竞品”,总耗时从 11 分钟降到 3 分半,而且每个子智能体的输出是独立可追溯的。
这里的关键认知是:子智能体不是“更小的 Agent”,而是“带隔离会话的异步工作者”。每个子智能体有独立的agent:agentId:subagent:uuid会话标识,不共享主对话历史,完成后通过回调把结果交回。这意味着你不能指望子智能体“记得”主对话里说过什么,所有必要上下文必须在派发时显式传入。
另一个容易踩的坑是模型分层。主编排器如果用便宜模型,拆任务时容易漏约束;子智能体如果用贵模型,5 个并行跑一轮成本直接起飞。所以下面我会先讲清楚 TaoToken 怎么统一 Key 和 API 通道,再给可复制的编排配置,最后用一次端到端任务验证把整条链路跑通。
2. TaoToken 前置:统一 Key 与 API 通道接入
在配多智能体之前,得先把模型调用通道理顺。Moltbot 的每个 Agent 和子智能体都要独立调模型,如果每个都配一套 Key,轮换和排障会非常痛苦。TaoToken 在这里的作用是提供一个统一的 API 入口,让主 Agent、子智能体、不同模型都走同一个 Base URL 和同一套 Key 体系。
官网入口在这里:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api (这个不加 UTM)。注意,TaoToken 是合规的 API 聚合通道,不是那种灰色中转,你拿到的 Key 直接用于标准 OpenAI 兼容接口。
具体操作步骤:
第一步,进控制台创建 API Key。地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,登录后在 API Keys 页面点新建,复制出来的 Key 形如sk-xxxxxxxx。这个 Key 后面要填到 Moltbot 的模型配置里。
第二步,确认你要用的模型 ID。TaoToken 的模型列表在文档里能查到,地址 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。编排器建议用推理强的模型,子智能体用性价比高的。比如编排器用claude-opus-4,子智能体默认用claude-3.5-sonnet。
第三步,在 Moltbot 的模型配置里填三件套:Base URL、API Key、Model ID。Moltbot 的模型配置通常在~/molt/config/models.json或环境变量里。如果你用的是 Claude Code 类的接入方式,配置片段长这样:
{ "provider": "openai-compatible", "baseURL": "https://taotoken.net/api", "apiKey": "sk-你的Key", "models": { "orchestrator": "claude-opus-4", "subagent-default": "claude-3.5-sonnet" } }如果你用的是 Codex 的auth.json体系,对应写法是:
{ "openai": { "baseURL": "https://taotoken.net/api", "apiKey": "sk-你的Key" } }这里有个细节:Moltbot 的子智能体默认会继承主 Agent 的模型配置,但你可以通过subagents.defaultModel单独覆盖。这样编排器用贵模型做战略决策,子智能体用便宜模型执行具体任务,成本能压下来一大截。
配完之后,建议先用模型对话页面验证一下 Key 是否可用,地址 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,发一条测试消息看能不能正常返回。这一步别跳过,后面子智能体报 401 的时候你会感谢自己先验证过。
3. 可复制的多智能体编排配置
现在进入正题。Moltbot 的编排配置分三层:Agent 定义、子智能体策略、渠道绑定。我按从简到繁的顺序给可复制的片段。
第一层:单 Agent + 子智能体并行(推荐起步)
这是性价比最高的模式。主 Agent 负责拆任务和汇总,子智能体负责并行执行。配置文件放在~/molt/config/agents.json:
{ "mainAgent": { "id": "main-agent", "model": "claude-opus-4", "agentDir": "~/molt/agents/main", "subagents": { "enabled": true, "defaultModel": "claude-3.5-sonnet", "maxConcurrent": 5, "timeoutSeconds": 300 } } }maxConcurrent控制同时跑多少个子智能体,别一上来就设 20,模型侧限流会让你怀疑人生。timeoutSeconds是子智能体最长执行时间,超时自动终止,防止某个子任务卡死拖垮整条链路。
第二层:多 Agent 隔离 + 渠道绑定
当你需要完全隔离的专业化 Agent 时,用agentBindings把渠道路由到特定 Agent:
{ "agents": [ { "id": "main-agent", "agentDir": "~/molt/agents/main", "model": "claude-opus-4" }, { "id": "coding-agent", "agentDir": "~/molt/agents/coding", "model": "claude-3.5-sonnet" } ], "agentBindings": { "discord:general-channel": "main-agent", "discord:dev-channel": "coding-agent", "telegram:@mybot": "main-agent" } }每个 Agent 有独立的agentDir,记忆文件、会话存储、认证上下文都是隔离的。Agent A 的记忆文件不会被 Agent B 访问,这点在多租户场景下很重要。
第三层:Opus 编排器 + Codex 工作者(复杂任务推荐)
这是分层模式,编排器用高端模型做战略决策,工作者用低成本模型执行:
{ "orchestrator": { "id": "opus-orchestrator", "model": "claude-opus-4", "role": "planner", "delegatesTo": ["codex-worker-1", "codex-worker-2", "codex-worker-3"] }, "workers": [ { "id": "codex-worker-1", "model": "claude-3.5-sonnet", "task": "implement-feature" }, { "id": "codex-worker-2", "model": "claude-3.5-sonnet", "task": "write-tests" }, { "id": "codex-worker-3", "model": "claude-3.5-sonnet", "task": "generate-docs" } ] }编排器分析需求、制定策略、分解子任务,工作者并行执行,最后编排器综合结果。这种模式的优势是单点控制,调试和监控都清晰。
子智能体管理命令
配好之后,用/subagents斜线命令管理运行中的子智能体:
| 子命令 | 功能 | 示例 |
|---|---|---|
| list | 列出所有活动和已完成的子智能体 | /subagents list |
| stop | 终止指定子智能体 | /subagents stop 84f72b1c |
| log | 查看完整对话历史 | /subagents log 84f72b1c |
| info | 获取详细信息 | /subagents info 84f72b1c |
| send | 向运行中的子智能体发额外指令 | /subagents send 84f72b1c "refocus on cost" |
send这个命令特别有用。子智能体跑偏的时候,不用杀掉重来,直接发一条修正指令让它重新聚焦。
Skill 定义
子智能体的“手和脚”是 Skill,本质是 Markdown 格式的工具定义。自定义 Skill 放在~/molt/skills/下,比如~/molt/skills/data-processor/SKILL.md:
# 数据处理技能 ## 描述 自动化数据分析和生成可视化报告 ## 工具 - `process_csv`: 读取和分析 CSV 文件 - `generate_chart`: 生成图表 - `export_pdf`: 导出 PDF 报告 ## 说明 当用户要求分析数据时: 1. 使用 process_csv 读取文件 2. 调用数据处理算法 3. 用 generate_chart 可视化 4. 用 export_pdf 生成报告Moltbot 会自动发现这个目录下的 Skill,子智能体在需要时会调用对应工具。
4. 端到端任务验证:一次竞品分析编排
配置写完了,得跑一次真实任务验证。我选一个典型的长链路场景:“抓取 3 个竞品官网更新,对比功能差异,生成周报”。
任务派发
在主对话里发这条消息。主 Agent 会先做规划,然后决定是否派发子智能体。为了强制走并行,我在消息里加了明确指令:
抓取以下 3 个竞品官网的最新更新,对比功能差异,生成一份周报: - competitor-a.com/changelog - competitor-b.com/changelog - competitor-c.com/changelog 要求:每个竞品派一个子智能体独立抓取,最后汇总对比。观察子智能体生成
主 Agent 收到后,会调用子智能体派发逻辑。你会在对话里看到类似输出:
[Planning] 识别到 3 个独立数据源,适合并行处理 [Subagent] 派发 subagent:84f72b1c → competitor-a [Subagent] 派发 subagent:91a3c2d4 → competitor-b [Subagent] 派发 subagent:7e5f8a9b → competitor-c [Status] 3 个子智能体并行执行中...这时候用/subagents list能看到三个子智能体的状态:
UUID STATUS TASK ELAPSED 84f72b1c running competitor-a 12s 91a3c2d4 running competitor-b 11s 7e5f8a9b running competitor-c 11s结果回调与汇总
子智能体完成后会自动回调。主 Agent 收到三份结果后,做对比分析并生成周报。整个过程大约 40 秒,如果用单 Agent 顺序执行,光抓取就要 2 分钟以上。
验证成功的标志有三个:一是/subagents list里三个子智能体状态都变成completed;二是主对话里出现了汇总后的对比表格;三是周报内容里每个竞品的数据都能追溯到对应子智能体的输出。
用/subagents log追溯
如果汇总结果有问题,用/subagents log 84f72b1c看子智能体的完整对话历史,能定位到是抓取阶段漏了数据,还是汇总阶段模型理解错了。这个追溯能力是多智能体编排相比单 Agent 最大的优势之一。
成本对照
这次任务编排器消耗约 8K token,三个子智能体各消耗约 3K token,总计约 17K token。如果全用 Opus 跑,成本会高 4 倍左右。分层模型配置在这里体现出了实际价值。
5. 常见报错排查:401、local proxy failed 与 OAuth
多智能体编排跑起来之后,报错基本集中在三类。我按真实遇到的频率排序。
401 Unauthorized
这是最常见的。子智能体报 401,但主 Agent 正常,说明子智能体没有继承到正确的 Key。检查两点:一是subagents.defaultModel对应的 provider 配置里apiKey是否填了;二是子智能体的agentDir下是否有独立的认证上下文覆盖了全局配置。
排查命令:
# 检查主配置里的 Key cat ~/molt/config/models.json | grep apiKey # 检查子智能体目录下是否有覆盖配置 ls ~/molt/agents/*/auth.json如果子智能体目录下有auth.json且内容为空或过期,删掉它让子智能体回退到全局配置。
local proxy failed
这个报错通常出现在 Base URL 配置错误时。Moltbot 会尝试通过本地代理转发请求,如果baseURL写成了https://taotoken.net/api/(末尾多了斜杠)或者写成了http://,就会触发local proxy failed。
正确写法是https://taotoken.net/api,不带末尾斜杠,协议必须是https。改完配置后重启 Moltbot Gateway。
reading choices 报错
这个报错说明模型返回的响应格式不符合预期。常见原因是 Model ID 写错了,比如把claude-3.5-sonnet写成了claude-3-5-sonnet(点号变横杠)。TaoToken 的模型 ID 以文档为准,地址 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,复制的时候别手改。
另一个原因是子智能体的maxConcurrent设太高,触发了模型侧限流,返回了错误格式的响应。把maxConcurrent降到 3 以下试试。
OAuth 相关报错
如果你用的是 Claude Code 的 OAuth 接入方式,报错通常是OAuth token expired或invalid_grant。这时候需要重新走一遍授权流程。但如果你用的是 TaoToken 的 API Key 方式,就不会有 OAuth 过期问题,这也是统一 Key 通道的一个隐性好处。
Codex auth.json 三件套检查
如果你用 Codex 体系,auth.json里必须同时有 Base URL、API Key、Model ID 三件套,缺一个都会报错。检查片段:
{ "openai": { "baseURL": "https://taotoken.net/api", "apiKey": "sk-你的Key", "model": "claude-3.5-sonnet" } }注意model字段别漏,有些版本的 Codex 不会从环境变量读默认模型。
子智能体超时
如果/subagents list里某个子智能体一直running超过timeoutSeconds,说明它卡住了。先用/subagents log <uuid>看它卡在哪一步,如果是工具调用死循环,用/subagents stop <uuid>终止,然后检查对应的 Skill 定义是否有问题。
6. 长期编码与 Agent 场景的接入建议
跑通一次编排不难,难的是让它稳定跑一周。我的经验是:从单 Agent 起步,只在遇到真实限制时才加子智能体。大多数“需要多智能体”的判断,其实是任务拆解没做好。
如果你要长期跑编码类 Agent 任务,建议走 Coding Plan 通道,地址 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,它在长会话和频繁工具调用场景下的稳定性比按次调用好。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,里面有各语言的完整示例。
API Key 管理在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,建议给编排器和子智能体分别建 Key,方便按 Agent 维度看用量。模型对话验证在 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,改完配置先在这里发一条消息确认通道正常。
最后说一个实际技巧:子智能体的timeoutSeconds别设太长,300 秒足够大多数任务。超时不是失败,是保护机制。我见过有人设 3600 秒,结果一个子智能体卡死后整条编排链路等了整整一小时才报错。宁可超时重派,不要无限等待。