English | 中文
Kode 前向 + AS(skill)O 自进化框架
当前主流 pipeline 已经收敛为:
Kode 前向执行 → 失败样本 / 反馈 → ASO 生成/修改 skill program → 评估 → 剪枝 / 合并
也就是说,优化对象不再只是单个 prompt,而是完整的:
program = root prompt + skills + selection policy
问题 / 数据集 → Kode 执行 → 文本梯度 / proposal → skill growth → prune / merge → 更好的 Agent
TreeSkill 将 LLM prompt 优化类比为深度学习的训练循环,但完全不需要训练模型:
| 深度学习 | TreeSkill |
|---|---|
| 模型权重 | System Prompt |
| 训练数据 | 交互反馈(人工 or LLM Judge) |
| 损失函数 | 失败案例分析 |
| 梯度 | 文本梯度(自然语言的失败归因) |
| 参数更新 | Prompt 重写(Beam Search 多候选) |
| Epoch | 优化轮次(支持断点续跑) |
- 免训练 (Train-Free) — 纯 API 调用,无需 GPU、无需微调、无需标注数据
- Human-in-the-Loop — 人工反馈驱动优化:
/bad标记失败、/rewrite提供理想回答、/target设置优化方向,让领域专家直接参与 prompt 进化 - 兼容层 APO(Beam Search) — 对齐 Agent-Lightning 的优化算法:多模板梯度分析 × 多候选生成 × Beam Search 选择,仍用于
/bad交互式流程 - 模型无关 — 支持 OpenAI、Anthropic、任何 OpenAI 兼容 API(硅基流动、Ollama 等)
- Agent Skills 标准 — Skill 文件遵循 agentskills.io 开放标准
- 层级 Skill 树 — 自动拆分、剪枝、嫁接,递归 bottom-up 优化
- 多协议工具系统 — Skill 可声明和调用多种格式的外部工具:
- Python 脚本 —
script.py中的函数自动注册为工具 - HTTP API — 声明式调用任意 REST 端点
- MCP 服务器 — 兼容 Model Context Protocol 的工具调用
- Python 脚本 —
- 断点续跑 — 优化中断后从上次进度恢复,不浪费已完成的 API 调用
- 插件注册机制 — 通过
@scorer、@gradient、@rewriter、@skill_format装饰器自定义优化流程的每个环节(详细文档) - 多端点支持 — Actor / Judge / Rewrite 可配置不同的 API 端点、模型和协议(OpenAI / Anthropic)
- Kode CLI 集成 — 使用 Kode 作为 Agent 前向引擎,Skill 在真实 agent loop 中执行和验证(配置指南)
- AgentHarness — 内置轻量 agent loop,支持 bash / 文件读写 / skill 加载,无需外部依赖即可评估 Skill
git clone https://github.com/JimmyMa99/TreeSkill.git
cd TreeSkill
pip install -e .推荐直接跑 SealQA 生命周期 demo。它使用:
Kode作为前向执行器ASO作为 program / skill 修改器- 一个免费、稳定的本地
search_web/fetch_url抽象来模拟检索
# 默认就是当前主流 pipeline
python -m treeskill
# 等价写法
python -m treeskill sealqa-lifecycle输出会落到:
demo/outputs/sealqa-tree-lifecycle/
├── root/
├── generated/
├── evolved/
├── pruned/
├── merged/
└── summary.json
如果你要跑更接近真实 ASO frontier 的最小实验:
python -m treeskill sealqa-aso兼容交互式 APO/chat 入口仍保留:
python -m treeskill legacy-chat -- --skill demo/writing-skills
# 或
python -m treeskill.main --skill demo/writing-skillscp demo/example/config.yaml my-config.yaml
# 编辑 my-config.yaml,填入 API Key或用环境变量:
TREE_LLM_API_KEY=your-api-key
TREE_LLM_BASE_URL=https://api.siliconflow.cn/v1
TREE_LLM_MODEL=Qwen/Qwen2.5-14B-Instructpython -m treeskill# 用已有 skill 目录
python -m treeskill.main --config my-config.yaml --skill skills/fast-test-skill
# 用默认 skill(自动创建)
python -m treeskill.main --skill default
# 用 skill 树目录
python -m treeskill.main --skill my-skills/TreeSkill 的核心交互模式是人机协作优化:领域专家通过自然语言反馈,引导 APO 引擎改进 prompt。
You: 帮我写一段关于春天的短文
🤖 Assistant: [生成结果]
You: /bad 太像AI写的,缺乏生活气息 ← 标记失败 + 原因
You: /rewrite 春天来了,小区的玉兰花... ← 提供理想回答(可选)
You: /target 更像人,有生活气息 ← 设置优化方向(可选)
You: /optimize ← 触发 APO 优化
✓ Skill optimized → writing-assistant (v1.0 → v1.1) (checkpoint saved)
每次 /bad 和 /rewrite 仍然只更新当前这条 Trace;同一次会话里所有 Trace 共享同一个 session_id,但每条交互都有自己独立的 trace.id。/optimize 时 APO 引擎从这些 Trace 中提取失败模式,计算文本梯度,重写 prompt。领域专家不需要懂 prompt engineering,只需要判断回答好不好。
也支持数据集驱动的模式:
# 全自动:LLM Judge 评分 → APO 优化,无需人工
python -m treeskill.main --optimize --dataset train.jsonl --skill my-skill --no-resume
# 人机协作标注:auto-judge 打分,人可随时 override(偏好信号 → 指导 judge)
python -m treeskill.main --annotate --dataset train.jsonl --skill my-skill
# 纯手动标注
python -m treeskill.main --annotate --dataset train.jsonl --skill my-skill --manual标注模式中,人工反馈是自然语言偏好信号,既作为 APO 梯度的输入,也可导出为 DPO 微调数据。
CLI 中输入 / 时会弹出 slash 命令候选列表,输入命令前缀时会自动收窄候选,便于快速发现和选择可用命令。
遵循 Agent Skills 标准,每个 Skill 是一个目录:
my-skill/
├── SKILL.md # YAML frontmatter + Markdown body(= system prompt)
├── config.yaml # 可选:few-shot、temperature、工具声明、日程等
└── script.py # 可选:Python 工具函数
SKILL.md 示例:
---
name: my-writing-assistant
description: 专业中文写作助手,帮助撰写和润色各类文本。
metadata:
version: "1.0"
target: "更像真人说话,有温度"
---
你是一位专业的中文写作助手。
语言要自然流畅,避免 AI 腔。Skill 可以声明外部工具,agent 在对话中按需调用。支持三种协议:
config.yaml 声明示例:
tools:
# HTTP API 工具
- name: weather
type: http
endpoint: https://api.weather.com/current
method: GET
description: 获取当前天气
# MCP 工具
- name: database
type: mcp
mcp_server: localhost:5000
tool_name: query
description: 查询数据库script.py 自动注册:
# script.py 中的公开函数自动成为工具
def search_docs(query: str) -> str:
"""搜索文档库"""
...工具继承:子 Skill 自动继承父 Skill 的工具声明,同名覆盖。
Skill 通过目录嵌套形成层级:
writing-skills/
├── SKILL.md # 根:通用写作
├── social/
│ ├── SKILL.md # 社交写作
│ └── moments/
│ └── SKILL.md # 朋友圈专精
└── business/
├── SKILL.md # 商务写作
└── email/
└── SKILL.md
优化时 bottom-up:先叶子后父节点。反馈矛盾时自动建议拆分。支持 graft(嫁接)跨树复用 skill。
| 命令 | 作用 |
|---|---|
/bad <原因> |
标记上条回复不好 |
/rewrite <文本> |
提供理想回答(同时积累 DPO 偏好数据) |
/export-dpo <output.jsonl> |
导出 DPO 偏好数据(用于微调) |
/target <方向> |
设置优化方向 |
/optimize |
触发 APO 优化(支持断点续跑) |
/image <路径> |
附加图片(多模态) |
/audio <路径> |
附加音频(语音输入) |
/save |
保存当前 skill |
/tree |
显示技能树 |
/select <路径> |
切换子技能(如 social.moments) |
/split |
分析是否需要拆分 |
/ckpt |
列出 checkpoint |
/restore <名称> |
从 checkpoint 恢复 |
/tools |
查看可用工具 |
/quit |
退出 |
当前推荐的优化对象是 skill program,而不是单个 prompt:
| 层级 | 当前主线 |
|---|---|
| 前向执行 | Kode |
| 优化对象 | root prompt + skills + selection policy |
| 修改动作 | add_skill / revise_skill / drop_skill / merge_skills / adjust_selection_policy |
| 生命周期 | root -> generate -> evolve -> prune -> merge |
| 推荐 demo | python -m treeskill |
其中,SealQA lifecycle demo 会显式展示:
- 从弱 root 起步
- 自动长出检索 / 校验 / 时效性 skill
- 自进化强化 skill 用法
- 剪枝低收益 skill
- 合并 / 重整 skill 集合
APO(Automatic Prompt Optimization)引擎对齐 Agent-Lightning 的设计,核心是 Beam Search + 文本梯度下降:
┌─ 梯度模板 1 ─┐ ┌─ 编辑模板 1(激进重写)─┐
失败 Traces ──→ ├─ 梯度模板 2 ─┤ ──→ ├─ 编辑模板 2(保守修复)─┤ ──→ 评分 ──→ Top-K Beam
└─ 梯度模板 3 ─┘ └─ branch_factor 个候选 ─┘
单轮流程:
- 采样 Traces — 从反馈中选取失败案例
- 计算文本梯度 — 随机选梯度模板(3 种),让 judge 模型分析"prompt 哪里导致了失败"
- 生成候选 — 随机选编辑模板(激进重写 / 保守修复),每个 parent prompt 生成
branch_factor个候选 - 评分选择 — 对所有候选 + 原 beam 评分,保留 top
beam_width个
两种模式:
| 模式 | 配置 | 行为 |
|---|---|---|
| 单轨 (默认) | beam_width=1 |
一次梯度 → N 候选 → 选最佳,兼容旧版 |
| Beam Search | beam_width>1 |
保留 top-k prompt 跨轮优化,更稳定 |
支持断点续跑——中断后 .evo_resume.json 记录已完成的节点,下次自动跳过。
每次优化自动保存 checkpoint:
ckpt/
└── writing-assistant_v1.2_20260306_140000/
├── skill/ # 完整 skill 树
│ └── SKILL.md
└── mem/
├── traces.jsonl
└── meta.json
# CLI 恢复
/ckpt # 列出
/restore writing-assistant_v1.2_20260306_140000 # 恢复
# 命令行恢复
python -m treeskill.main --ckpt ckpt/writing-assistant_v1.2_20260306_140000treeskill/
├── pipeline_main.py # 当前主入口:Kode + ASO pipeline
├── core/ # 核心抽象层
│ ├── abc.py # 抽象基类
│ ├── optimizer.py # TrainFreeOptimizer (TGD)
│ ├── tree_optimizer.py # TreeAwareOptimizer (兼容树结构优化)
│ ├── strategies.py # 优化策略(保守/激进/自适应)
│ └── validators.py # 验证器
├── adapters/ # 模型适配器
│ ├── openai.py # OpenAI / 兼容 API
│ └── anthropic.py # Anthropic Claude 4.5/4.6
├── schema.py # 数据模型 (Skill, Message, Trace, ToolRef)
├── skill.py # SKILL.md 解析器/写入器
├── skill_tree.py # 层级 Skill 树管理 (graft/split/merge/prune)
├── aso_program.py # Skill program 数据结构
├── aso_optimizer.py # AS(skill)O 主循环
├── optimizer.py # APOEngine(兼容层,交互式优化)
├── tools.py # 工具系统 (HTTP, MCP, script.py)
├── resume.py # 断点续跑状态管理
├── checkpoint.py # Checkpoint 快照
├── cli.py # 交互式 CLI (兼容层)
├── registry.py # 插件系统 (@adapter, @optimizer)
└── main.py # 旧 chat / APO 入口
| 变量 | 默认值 | 说明 |
|---|---|---|
TREE_LLM_API_KEY |
— | API 密钥 |
TREE_LLM_BASE_URL |
https://api.openai.com/v1 |
API 地址 |
TREE_LLM_MODEL |
gpt-4o |
聊天模型 |
TREE_LLM_JUDGE_MODEL |
gpt-4o |
Judge 模型(计算梯度 + 评分) |
TREE_LLM_TEMPERATURE |
0.7 |
生成温度 |
TREE_STORAGE_TRACE_PATH |
./data/traces.jsonl |
Trace 路径 |
TREE_STORAGE_SKILL_PATH |
./skills |
Skill 目录 |
TREE_APO_GRADIENT_ACCUMULATION_STEPS |
5 |
每次梯度计算的反馈样本数 |
TREE_APO_BEAM_WIDTH |
1 |
Beam 宽度(1=单轨,>1=beam search) |
TREE_APO_BRANCH_FACTOR |
2 |
每个 parent 生成的候选数 |
TREE_APO_BEAM_ROUNDS |
3 |
Beam search 轮数 |
完整配置模版:demo/example/config.yaml
| 文档 | 说明 |
|---|---|
| APO 优化原理 | 两种优化模式 + TGD 循环 + 断点续跑 |
| 树感知优化 | 自动拆分、剪枝、部分优化 |
| Skill 文件格式 | Agent Skills 标准 + SKILL.md 格式 |
| 快速开始 | 5 分钟上手 |
| 使用指南 | Skill 加载、配置管理 |
| 架构设计 | 核心架构和设计理念 |
| 核心抽象 | Prompt、Gradient、Experience 接口 |
| 工具系统 | Python、HTTP、MCP 工具注册 |
| Kode + MiniMax Thinking 验证 | 原版 Kode 与 MiniMax thinking 模式兼容结论 |
| OpenAI 适配器 | GPT-4o、o1 等 |
| Anthropic 适配器 | Claude 4.5/4.6 系列 |
| 跨模型 Skill 迁移 | 双模型 TGD:大模型优化,小模型执行 |
| 优化器详解 | TrainFreeOptimizer 技术文档 |
| 实验记录 | 当前主线实验与历史实验 |
TreeSkill 当前推荐使用 Kode 作为 Agent 前向引擎。Skill/program 在 Kode 的真实 agent loop 中执行(工具调用、文件操作、代码运行),ASO 根据执行结果修改 skill program。
npm install -g @shareai-lab/kode在 ~/.kode.json 中配置模型(不要提交此文件到 git):
{
"modelProfiles": [
{
"name": "my-model",
"modelName": "model-name",
"provider": "anthropic",
"baseURL": "https://your-api-endpoint",
"apiKey": "your-api-key",
"isActive": true,
"createdAt": 1711500000000
}
],
"modelPointers": {
"main": "model-name",
"task": "model-name",
"compact": "model-name",
"quick": "model-name"
},
"defaultModelName": "model-name"
}注意:
baseURL大写 URL,apiKey直接写值(不支持环境变量引用)。
kode -p "Say hello" --output-format json --dangerously-skip-permissions# 默认:SealQA lifecycle
python -m treeskill
# 更接近真实 frontier 的 ASO 最小实验
python -m treeskill sealqa-asoTreeSkill ASO 循环
↓ 写入/更新 AGENTS.md / skills/
Kode CLI (前向引擎)
↓ 加载 program / Skill → agent loop → 工具调用
↓ 返回 JSON 结果
TreeSkill 评估 (verify_fn / judge_fn / cached search)
↓ 计算梯度 → 生成/修改/剪枝/合并 Skill
↓ 回到顶部
| 实验 | 模型 | 结果 | 说明 |
|---|---|---|---|
| 论文分类 3 类 | Qwen3.5-4B + GLM-5 | 50% → 91.7% (+41.7%) | 详细报告 |
| 论文分类 6 类 (split) | Qwen3.5-4B + GLM-5 | 10% → 86.7% (+76.7%) | auto-split 为 physics/cs/math |
| SealQA lifecycle (cached search) | MiniMax-M2.7 | 16.7% → 100% | root -> generate -> evolve -> prune -> merge 全链路演示 |
| SealQA ASO mini | MiniMax-M2.7 | 0% → 0% | 证明 skill 可增长,但无检索时不会自动补知识 |
- APO 优化引擎受 Microsoft Agent-Lightning 启发
- Agent Harness 架构受 learn-claude-code 启发
- Kode CLI 集成基于 Kode Agent
- 论文分类数据集来自 书生实战营 InternLM Tutorial