1. 为什么我要折腾 Agent 自造工具这件事先说结论Yunjue-Agent 最吸引我的地方是它把「工具」从静态资产变成了动态产物。传统 Agent 框架里你写死十个函数Agent 就只能在这十个里挑遇到没见过的任务它要么硬答要么报错。Yunjue-Agent 的思路是——工具在解决任务的过程中生长出来执行成功就留下失败就修修不好就丢。这套「原位自进化」机制配合 LangGraph 的四节点循环Manager → Tool Developer → Executor → Integrator让 Agent 的能力随使用次数持续增长。但原版是个完整的 Python 工程带 Web Demo、CLI、评测脚本直接塞进日常开发流里偏重。我真正想要的是把它浓缩成一个 OpenClaw Skill让本地 Agent 工作流立刻拥有「自己造工具」的能力。这篇就围绕 Yunjue-Agent 的 OpenClaw 实现交付可复制的 TaoToken 接入骨架config.toml settings.json并给出启动后验证自造工具链路的完整步骤。适合已经在用 OpenClaw、想给 Agent 加深度推理和工具进化能力的开发者。2. TaoToken 前置把模型调用这层先铺好OpenClaw 里的 Skill 要跑起来底层得有稳定的模型出口。Yunjue-Agent 的 Manager 评判、Tool Developer 生成代码、Executor 的 ReAct 循环每一步都在调模型所以接入层必须先通。TaoToken 在这里扮演的是统一模型接入网关的角色一个 API Key一套 OpenAI 兼容协议Claude、GPT、Gemini 这些都能走。对 OpenClaw 这种需要频繁切换模型做不同节点的场景特别合适——Manager 可以用推理强的模型Tool Developer 用代码能力强的Executor 用响应快的全在配置里切。你需要先拿到 Key。进控制台创建 API Key地址是 https://taotoken.net/api-keys 创建后复制保存后面 config.toml 和 settings.json 都要用。接入文档在 https://taotoken.net/doc 遇到参数不确定时对照着看。注意API Key 只显示一次创建后立刻存到本地密钥管理里别直接提交到 Git。3. 可复制配置config.toml 与 settings.json 骨架OpenClaw 的配置分两层全局的 config.toml 管模型出口Skill 级的 settings.json 管 Yunjue-Agent 的行为参数。下面两份骨架可以直接抄把YOUR_TAOTOKEN_KEY换成你自己的 Key。3.1 config.toml模型出口与 coding agent 绑定# ~/.openclaw/config.toml [provider.taotoken] type openai-compatible base_url https://taotoken.net/api api_key YOUR_TAOTOKEN_KEY default_model claude-sonnet-4-5 # 按节点分配模型Manager 重推理Tool Developer 重代码 [agent.manager] provider taotoken model claude-sonnet-4-5 temperature 0.2 [agent.tool_developer] provider taotoken model claude-sonnet-4-5 temperature 0.0 [agent.executor] provider taotoken model gpt-4.1-mini temperature 0.3 # coding agent 解耦支持 claude / codex / opencode / pi / auto [coding_agent] agent auto workspace ~/.openclaw/workspace/agents/deep-thinker这里的关键是base_url指向https://taotoken.net/api走 OpenAI 兼容协议OpenClaw 不需要额外适配层。coding_agent.agent auto会自动检测本机装了哪个 coding agent装多个时按 claude → codex → opencode → pi 的顺序挑。3.2 settings.jsonYunjue-Agent Skill 行为参数{ skill: yunjue, version: 1.0.0, loop: { max_rounds: 3, enhance_tools_interval: 5, quality_threshold: 0.8 }, tools: { private_dir: ~/.openclaw/workspace/agents/deep-thinker/tools/private, public_dir: ~/.openclaw/workspace/agents/deep-thinker/tools/public, promote_on_success: true }, routing: { trigger_keywords: [深度分析, 复杂推理, 自动编写工具], sub_agent: deep-thinker }, failure_report: { include_stacktrace: true, max_chars: 2000 } }max_rounds控制主 Agent 重试循环上限enhance_tools_interval对应 Executor 内置的 enhance_tools 子节点——每 N 步自动修复失败工具。promote_on_success打开后单次任务里跑通的工具会从 private/ 晋升到 public/跨任务复用。3.3 coding-agent.yaml单独一份两处共享# ~/.openclaw/workspace/agents/deep-thinker/coding-agent.yaml agent: auto timeout_seconds: 120 max_retries: 2这份配置在主 Agent 生成新工具、deep-thinker 修复失败工具两处都会被读取保证行为一致。4. 验证请求启动后跑通自造工具链路配置写完接下来验证整条链路是否真的能「自己造工具」。分三步走。4.1 安装 Skill 并确认目录结构openclaw skills install ~/.claude/skills/yunjue.skill安装时会自动创建~/.openclaw/workspace/agents/deep-thinker/工作目录和工具目录并在主 AGENTS.md 里追加 deep-thinker 的路由规则。装完检查一下ls -R ~/.openclaw/workspace/agents/deep-thinker/ # 期望看到 tools/private 和 tools/public 两个空目录4.2 发一个需要新工具的任务向主 Agent 发一条明确需要「造工具」的指令比如深度分析读取当前目录下所有 CSV统计每个文件的列数、行数和缺失值比例输出汇总表。这条任务的关键是——本地没有现成的 CSV 统计工具Agent 必须自己生成一个 Python 脚本。观察主 Agent 的行为它会先扫描工具目录发现没有可用工具然后调 coding agent 生成一个csv_stats.py写入 private/再把工具路径和调用方式塞进sessions_spawn的 task 文本派发给 deep-thinker。4.3 检查工具是否生成并晋升任务跑完后看两个目录ls ~/.openclaw/workspace/agents/deep-thinker/tools/private/ ls ~/.openclaw/workspace/agents/deep-thinker/tools/public/如果csv_stats.py出现在 public/ 里说明工具执行成功且被晋升下次遇到类似任务会直接复用。如果只在 private/说明这轮没通过质量评判或者promote_on_success没开。再发一条同类任务验证复用深度分析统计 data/ 下所有 CSV 的缺失值比例。这次主 Agent 应该直接命中 public/ 里的csv_stats.py不再调 coding agent 生成新工具。响应速度会明显快一截。5. 本篇常见错排查配置和验证过程中我踩过几个坑列出来帮你省时间。报错一provider.taotoken连接超时。先确认base_url写的是https://taotoken.net/api不要带尾部斜杠也不要误加/v1。OpenClaw 的 openai-compatible 类型会自动补路径。如果还超时用 curl 单独测一下出口curl https://taotoken.net/api/models \ -H Authorization: Bearer YOUR_TAOTOKEN_KEY返回模型列表说明 Key 和网络都正常问题在 OpenClaw 配置层。报错二coding agent 检测失败agent: auto找不到可用项。说明本机没装 claude / codex / opencode / pi 中任何一个。要么装一个要么把coding-agent.yaml里的agent改成你实际装了的那个。auto 模式不会报错退出而是静默跳过工具生成表现为 Agent 一直说「无法完成」容易误判成模型问题。报错三工具生成了但 Executor 执行报ModuleNotFoundError。生成的 Python 脚本依赖了本机没装的库。两个解法一是在 settings.json 里给工具目录加一个requirements.txt约定让 coding agent 生成时声明依赖二是直接在 deep-thinker 的 ReAct 循环里让它自己pip install。后者更符合自进化思路但要注意沙箱边界。报错四循环不收敛max_rounds跑满还在重试。多半是quality_threshold设太高比如 0.95Manager 一直判不合格。降到 0.8 试试。另外检查 failure_report 是否真的传到了下一轮——如果 task 文本里没带上一轮的失败信息deep-thinker 会重复犯同样的错。报错五工具晋升后下次任务没复用。检查 public/ 目录的路径是否和 settings.json 里的public_dir一致。OpenClaw 里~展开依赖运行用户如果你用 systemd 跑服务~可能指向/root而不是你的用户目录建议写绝对路径。6. 把模型出口和 Skill 编排分开管这套方案跑下来我最大的体会是模型接入层和 Agent 编排层要解耦。TaoToken 负责前者一个 Key 管所有节点的模型出口OpenClaw Yunjue-Agent Skill 负责后者管工具生成、循环评判、跨任务复用。两层各管各的换模型不用动 Skill改 Skill 不用碰 Key。如果你还在调模型出口先去 https://taotoken.net/api-keys 把 Key 建好接入细节对照 https://taotoken.net/doc 。想先验证模型对话是否通用 https://taotoken.net/models 试几条。长期跑编码和 Agent 任务的话Coding Plan 在 https://taotoken.net/coding-plan 有更划算的额度方案。Claude Code 相关的接入配置在 https://taotoken.net/claude-code-anthropic 。工具自进化这件事真正跑起来之后你会发现Agent 不知道自己在「造工具」它只是在解决问题——而工具是解决问题的副产品。这个视角的转变比任何配置都值钱。