让 AI Agent 自己造工具:Yunjue-Agent 的 OpenClaw 实现

2026年6月7日11 分钟阅读6 次浏览
AI

工具不是预设的,而是在解决任务的过程中生长出来的。


什么是 Yunjue-Agent?

Yunjue-Agent 是云玦科技于 2026 年 1 月开源的 AI Agent 系统,曾在 HLE(Humanity's Last Exam)基准排行榜上位列第 2。它的核心创新在于一个听起来简单但极具颠覆性的理念——原位自进化(In-Situ Self-Evolving)

传统 Agent 框架里,工具是静态的:开发者提前写好一组函数,Agent 只能在这些预设工具中选择使用。遇到新问题?抱歉,没有对应的工具,Agent 只能靠自身参数空间里有限的知识硬撑。

Yunjue-Agent 打破了这个限制。它在解决任务的过程中,自动生成、测试、修复并积累 Python 工具。工具的成败是唯一的反馈信号——执行成功就保留,失败就修复,修不好就放弃。不需要人工标注,不需要额外的训练数据。

成功的工具会被保存到公共工具库,跨任务复用。Agent 的能力不是固定的,而是随着使用次数持续增长。

四节点循环架构

Yunjue-Agent 的实现基于 LangGraph 的四节点循环图:

START → Manager → Tool Developer → Executor → Manager(循环评判)→ Integrator → END
节点职责
Manager分析任务所需工具,评判 Executor 输出质量,决定继续还是重试
Tool Developer从工具目录加载已有工具,或调用 Codex CLI 并发生成新工具,绑定给 Executor
ExecutorReAct 循环执行任务;内置 enhance_tools 子节点,每隔 N 步自动修复失败工具
Integrator质量通过后,将 Executor 的输出提炼为结构化最终答案

几个关键机制值得注意:

  • Manager 每轮必经 Tool Developer——即使不需要新工具,Tool Developer 也会判断后透传或按需生成
  • Executor 完成后固定返回 Manager——由 Manager 决定是进入下一轮还是输出结果
  • 工具修复发生在 Executor 内部——不是外部节点,而是 Executor 的 ``` enhance_tools
- **工具分私有和公共两个目录**——单次任务的工具在 ```
private/
```,成功后晋升到 ```
public/
``` 跨任务复用

这个设计的优雅之处在于:工具的进化完全是涌现的。Agent 不知道自己在"造工具",它只是在解决问题——而工具是解决问题的副产品。

---

## OpenClaw 适配:把论文变成日常可用的 Skill

原版 Yunjue-Agent 是一个完整的 Python 工程,包含 Web Demo、CLI、评测脚本、工具进化(cluster/merge)等模块。但我们的目标不同:**把它浓缩成一个 OpenClaw Skill,让你的日常 Agent 工作流立刻拥有深度推理和工具自进化能力。**

适配过程中遇到了几个核心的架构差异,每一个都值得展开讲。

### 差异 1:内存对象 vs 文件系统

**原版:** Tool Developer 是独立的图节点,生成工具后直接把 LangChain Tool 对象 bind 到 Executor 的 LLM 上——这是纯内存操作,零拷贝。

**问题:** OpenClaw 子 Agent 之间只能通过文本消息通信,无法传递内存对象。

**解法:** 把 Tool Developer 的逻辑合并进主 Agent 的派发前准备阶段。主 Agent 生成工具文件后,将工具路径和调用方式写入 ```
sessions_spawn
``` 的 task 文本,deep-thinker 通过 ```
bash
``` 工具直接执行这些脚本。

**文件系统是两个 Agent 之间共享状态的媒介。** 这个设计选择看似退步,实际上带来了额外的好处——工具是持久化的 Python 文件,可以被检查、被版本控制、被人类直接阅读。

### 差异 2:解耦 Coding Agent

**原版:** 硬编码调用 ```
codex exec --dangerously-bypass-approvals-and-sandbox
```,无法替换。

**解法:** 通过 ```
coding-agent.yaml
``` 配置文件切换,支持 Claude Code、Codex、OpenCode、Pi 四种 coding agent,以及 auto 模式自动检测。

```yaml
# ~/.openclaw/workspace/agents/deep-thinker/coding-agent.yaml
agent: auto   # claude | codex | opencode | pi | auto

Coding agent 在两处被调用:主 Agent 生成新工具时,以及 deep-thinker 修复失败工具时。两处共享同一份配置,行为一致。

差异 3:多 Agent 循环替代单进程 LangGraph

原版: 循环在单进程 LangGraph 图内完成,状态在内存中流转。

解法: 主 Agent 通过多次 sessions_spawn 实现重试循环。每轮将上一轮的 ``` failure_report


这个设计天然支持分布式执行——主 Agent 和 deep-thinker 可以运行在不同的机器上。

### 核心工作流

简化后的 Skill 只保留两个角色的循环迭代:

主 Agent(Manager + Tool Developer + Integrator) │ ├── 分析任务,扫描工具目录 ├── 按需调 coding agent 生成新工具 ├── 构建工具清单,sessions_spawn 派发 │ ▼ deep-thinker 子 Agent(Executor) │ ├── ReAct 循环:THINK → ACT → OBSERVE ├── 失败时调 coding agent 自行修复 ├── 成功后晋升工具到 public/ │ ▼ 主 Agent 评判 → 合格:汇总回复 / 不合格:携带 failure_report 重走一轮


---

## 安装

将 ```
yunjue.skill
``` 文件发给主 Agent,或通过 OpenClaw CLI 安装:

```bash
openclaw skills install ~/.claude/skills/yunjue.skill

安装时会自动执行以下初始化操作:

  • 创建 ``` ~/.openclaw/workspace/agents/deep-thinker/
- 在主 AGENTS.md 中追加 ```
deep-thinker
``` 的路由规则

安装后无需手动操作。向主 Agent 发送需要深度推理的任务(如"深度分析"、"复杂推理"、"自动编写工具"),它会自动识别并路由。

---

## 开源与贡献

这个 Skill 是一个开源项目,欢迎任何人来修改和改进。

**GitHub 地址:** [https://github.com/maquedexiju/yunjue-openclaw-skill](https://github.com/maquedexiju/yunjue-openclaw-skill)

目前可以改进的方向包括但不限于:

- 支持更多 coding agent 的适配
- 优化工具晋升的判断标准
- 完善 failure_report 的结构化格式
- 添加更多开箱即用的公共工具
- 适配其他 Agent 框架(不局限于 OpenClaw)

如果你对 Agent 的工具自进化感兴趣,欢迎来 issue 区讨论,或者直接提 PR。