SKILL.md
6.34 KB
name: evolving description: > Skill 进化循环 Skill。执行目标 Skill → 调用 benchmark-evaluator 评分 → 分数 ≥ 90 则输出最终结果给用户 → 分数
Use when: 需要迭代优化 Skill prompt 直到达到质量阈值。
Evolving Skill
循环优化: 执行 → 评分 → 分析 → 改写 → 重复,直到 ≥ 90 分。
输入
skillName: 目标 Skill 名称skillPrompt: 当前 SKILL.md 内容knowhow: knowhow.md 内容benchmarkDef: benchmark.md 内容testTask: 测试任务passThreshold: 通过阈值 (硬性最低标准 90,禁止传入低于 90 的值)maxIterations: 最大迭代次数 (默认 10)
执行流程
for iteration = 1 to maxIterations:
1. 执行: 用当前 skillPrompt 执行 testTask → result
2. 评分: 调用 benchmark-evaluator(benchmarkDef, result, testTask) → score
3. 判断:
- score ≥ passThreshold → 输出最终结果,停止 ✅
- score < passThreshold → 继续
4. 分析: 找出弱项维度 (score < 70 的)
5. 改写: 针对弱项修改 skillPrompt
6. 记录: 保存 evolve/v{N}/ 下的所有产物
7. 回到步骤 1
分析与改写逻辑
弱项分析
对每个得分
- 根因追溯: 找到 SKILL.md 中导致弱项的具体部分
- 改进策略: 基于 knowhow 确定改进方向
- 最小化修改: 只改弱项相关部分,保留高分部分
版本号规则
- patch (+0.0.1): 措辞、格式微调
- minor (+0.1.0): 方法论步骤变更、新增检查项
输出格式 (每次迭代)
{
"iteration": 3,
"score": 88,
"passed": false,
"analysis": {
"weakDimensions": [
{
"dimension": "维度名",
"currentScore": 55,
"rootCause": "SKILL.md 中 Methodology 第 3 步缺少 X",
"improvement": "增加 Y 步骤"
}
],
"overallStrategy": "本次迭代的总体改进策略"
},
"patch": {
"versionBump": "minor",
"newVersion": "1.1.0",
"newSkillPrompt": "改进后的 SKILL.md 完整内容",
"changeDescription": "做了哪些修改",
"reasoning": "为什么这些修改能解决问题"
}
}
最终输出 (达标时)
{
"success": true,
"finalScore": 92,
"finalVersion": "1.2.0",
"totalIterations": 5,
"result": "最终的任务输出内容",
"skillPrompt": "最终版 SKILL.md 内容"
}
停止条件
| 条件 | 结果 |
|---|---|
score ≥ passThreshold |
达标,输出最终结果 ✅ |
iterations ≥ maxIterations |
超时,输出当前最佳 ⚠️ |
| 连续 3 次分数变化 | 停滞,停止迭代 ⚠️ |
evolve 目录产物
evolve/
├── evolve_log.md
├── v1/
│ ├── skill.md ← 本版本 Skill 快照
│ ├── result.md ← 执行输出
│ ├── score.json ← 评分详情
│ └── analysis.md ← 弱项分析
├── v2/
│ └── ...
└── v{N}/
注意
- 避免重复: 查看 previousIterations,避免重复已失败的策略
- 保留有效: 得分高于 70 的维度不要动
- 具体化: 改进建议要具体(如 "在第 3 步之后增加人物心理描写子步骤")
- 可追溯: 每次迭代完整保存所有产物
- 必须部署: 达标后必须执行 DEPLOY 步骤,不可跳过!
❗ DEPLOY 部署步骤(达标后必须执行)
警告: 如果跳过 DEPLOY,训练成果等于白费 — Agent 仍然是空壳。
当 score ≥ passThreshold 时,在返回 [RESULT: DONE] 之前,必须执行:
1. 复制最终 Skill → agents/{agent_name}/SKILL.md
2. 追加摘要 → agents/{agent_name}/agent.md 末尾
3. 更新 → agents/{agent_name}/config.json 中 status = "ready"
4. 更新 → agents/{agent_name}/plan.md 记录训练完成
5. 验证 → 确认 SKILL.md 存在且 > 1KB
如果任何一步失败,必须重试。不能返回 DONE。
Skill Tree 分层规则
创建或改写 SKILL.md 时,必须根据能力复杂度分配层级:
分类判定
| 条件 | 层级 | 前缀 | 说明 |
|---|---|---|---|
| 只做一件原子操作,无外部 Skill 依赖 | L1 | l1- |
极少创建,已有10个预建 |
| 组合 2-3 个 L1 解决小任务 | L2 | l2- |
如 l2-web-research |
| 完整业务场景,多步编排,含 L2+L1 | L3 | l3- |
大部分用户需求 |
SKILL.md 必须包含的字段
---
name: l3-xxx
layer: 3
dependencies:
- l2-web-research
- l1-text-transform
- l1-kv-store
---
可用的 L1 原子技能库
| 类别 | 技能 | 能力 |
|---|---|---|
| 感知 | l1-web-fetch |
curl 抓取网页,HTML→Markdown |
| 感知 | l1-file-read |
读取 CSV/Excel/PDF/文本 |
| 感知 | l1-search-engine |
DuckDuckGo 免费搜索 |
| 处理 | l1-data-extract |
LLM 结构化数据提取 |
| 处理 | l1-text-transform |
摘要/翻译/改写/格式转换 |
| 处理 | l1-diff-checker |
文本/数据比对 |
| 工具 | l1-shell-exec |
运行 Python/Node/Shell |
| 工具 | l1-api-request |
REST API 调用 |
| 交付 | l1-webhook-push |
飞书/Slack/钉钉/Discord 推送 |
| 记忆 | l1-kv-store |
本地 JSON KV 持久化存储 |
可用的 L2 复合技能
| 技能 | 组合 |
|---|---|
l2-web-research |
search + fetch + extract |
l2-digest |
data-extract + text-transform + file-read + diff-checker |
依赖声明规则
- L2 只能依赖 L1
- L3 可以依赖 L2 + L1
- 相同功能必须复用已有 L1,不能重新实现
- 在 SKILL.md 中用「依赖技能」表格列出每个依赖的作用
- 系统自动将
layer和dependencies信息注册到 SQLite 数据库(通过 YAML frontmatter 解析)
输出协议(系统必须)
你的输出最后必须以 [RESULT: DONE/ERROR]...[/RESULT] 标记收尾。
成功(包含部署确认):
[RESULT: DONE]
完成说明:
- 最终分数: {score}
- 最终版本: {version}
- 迭代次数: {N}
- DEPLOY 状态: ✅ 已部署
- SKILL.md → agents/{agent}/SKILL.md ✅
- agent.md → 已追加 Trained Skill 摘要 ✅
- config.json → status=ready ✅
[/RESULT]
失败:
[RESULT: ERROR]
错误说明:
- 什么出错了
[/RESULT]