Self-Improving Skill Framework v2.0
让你的 writing style skill 越用越准,同时不膨胀。
🎯 核心概念
AI 写初稿 → 人类改到满意 → 对比两版 → 提取规则 → 更新 skill
↑ ↓
└──────── 下次写作自动应用新规则 ←──────────────┘
↓
月度 pruning ← 规则膨胀检测
(去重 + 合并 + 分层 + 删除)
v2.0 新增:Pruning 闭环 — 规则只增不减 = 最终不可用。现在 improve 负责增长,prune 负责收敛。
只有两个数据点:
- original: AI 生成的第一版(不管用了什么 prompt/skill)
- final: 人类最终确认的版本(不管中间改了几轮、怎么改的)
中间过程不记录。Google Doc 来回改了 10 轮?无所谓,只比较首尾。
📋 使用流程
第一步:配置目标 skill
在你的 writing style skill 目录下创建 self-improving.yaml:
# ~/your-skill/self-improving.yaml
target_skill: ~/path/to/your-writing-style/SKILL.md
log_dir: ~/clawd/memory/skill-runs/your-skill-name/
proposal_dir: ~/clawd/memory/skill-proposals/your-skill-name/
backup_dir: ~/clawd/memory/skill-backups/your-skill-name/
或者用环境变量 / 命令行参数覆盖(见下文)。
第二步:Agent 写完内容后,记录原稿
python3 ~/clawd/skills/self-improving-skill/scripts/observe.py record-original <file> \
--skill ~/path/to/your-writing-style/
或直接传文本:
python3 observe.py record-original --text "AI 生成的内容..."
输出:
✅ 记录原稿: a3f8c2e1
📝 字数: 1234
记住这个 hash(a3f8c2e1),后面配对用。
第三步:人类确认最终版后,记录 final
python3 observe.py record-final <file> --match a3f8c2e1
如果人类没改直接用了? 也 record-final,脚本自动检测内容一致 → 标记为无修改(正反馈)。
第四步:提取改进规则
# 手动提取
python3 ~/clawd/skills/self-improving-skill/scripts/improve.py extract --days 7
# 或自动模式(适合 cron):提取 + 自动应用 P0 规则
python3 improve.py auto
第五步:查看 / 应用 / 回滚
python3 improve.py show # 查看所有提案
python3 improve.py apply <id> # 应用某个提案
python3 improve.py rollback # 回滚上次应用
⚙️ 自动化(推荐)
集成到你的内容创作流程
在你的 contentgen / writing skill 中加入:
## 写完内容后必须做的事
1. 写完初稿 → `observe.py record-original <file>`
2. 人类确认最终版 → `observe.py record-final <file> --match <hash>`
Cron Job
# 每晚自动提取 + 应用 P0 规则
# schedule: 0 23 * * * (每晚 11pm)
python3 ~/clawd/skills/self-improving-skill/scripts/improve.py auto \
--skill ~/path/to/your-writing-style/
OpenClaw 用户可以用内置 cron:
cron add --name "skill-daily-extract" --schedule "0 23 * * *" --tz "America/New_York" \
--payload "运行 improve.py auto 自动提取写作风格改进"
📂 数据结构
~/clawd/memory/
├── skill-runs/your-skill/
│ └── YYYY-MM-DD.jsonl # 每日观察日志
│ ├── {type: "original", content_hash, content, context}
│ └── {type: "final", content_hash, original_content, final_content, no_change}
│
├── skill-proposals/your-skill/
│ └── YYYYMMDD-HHMMSS.md # 改进提案(P0/P1/P2 分级)
│
└── skill-backups/your-skill/
└── SKILL-YYYYMMDD-HHMMSS.md # apply 前自动备份
🔄 循环原理
为什么只看 original vs final?
- 中间过程有噪音 — 人类可能改了又改回来,中间状态不代表最终偏好
- 指令不等于规则 — "把开头改一下"是一次性指令,不是通用规则。但如果 final 里开头确实更直接,diff 能自动捕捉
- 简单就是可靠 — 两个数据点不会出错,复杂流程容易断
什么算好的学习数据?
| 数据 | 价值 |
|---|---|
| AI 原稿 2000 字 → final 1800 字(删了废话) | ⭐⭐⭐ 高 |
| AI 原稿 → final 完全不变(直接用) | ⭐⭐ 正反馈 |
| AI 原稿 500 字 → final 2000 字(大幅扩写) | ⭐ 低(扩写靠 prompt 不靠 style) |
| AI 原稿 → final 只改了一个错别字 | ⭐ 低(不是风格问题) |
P0 / P1 / P2 规则分级
- P0: 高置信度(多次出现同一模式),cron 自动应用
- P1: 中置信度,需要人工确认后应用
- P2: 低置信度(只出现 1 次),存档观察
✂️ 月度 Pruning(v2.0 新增)
问题: 规则只增不减,3 个月后 SKILL.md 变成 100+ 条规则的怪物。Agent 读不完,互相矛盾,执行效果反而下降。
解法: 每月跑一次 LLM 辅助的 pruning。
工具
# 提取当前所有规则
python3 prune.py extract --skill ~/path/to/your-writing-style/
# 触发频率统计
python3 prune.py stats --skill ~/path/to/your-writing-style/
# 生成 pruning 报告(供 LLM 或人工审核)
python3 prune.py report --skill ~/path/to/your-writing-style/
LLM Pruning 流程
prune.py report生成输入 JSON + 报告模板- LLM 读取全部规则 + learnings 统计,做四件事:
- 语义去重:找重叠规则,建议合并
- 冲突检测:找矛盾规则,标注适用边界
- 优先级排序:P0 红线(≤5)/ P1 风格(≤10)/ P2 技巧(剩余)
- 删除建议:被覆盖或过于细碎的规则
- 人类确认后执行合并/删除/重排
与 improve.py 的联动
improve.py v2.0 内置了去重和膨胀检测:
- extract 阶段:新规则候选会自动比对现有规则列表,语义重复的标注"已覆盖"或"建议合并"
- apply 阶段:新规则默认加到 P2 区域末尾,不破坏 P0/P1 分层
- auto 完成后:自动检查 P2 规则数,超过 25 条输出 ⚠️ 提醒提前 pruning
Cron 月度 Pruning
# schedule: 0 10 1 * * (每月 1 号 10am)
# 建议用 LLM agentTurn 执行:读 report → 分析 → 写结果 → announce 给人类审核
闭环图
Daily (improve.py auto):
观察 → 提取 → 去重检查 → 应用 P0 → 膨胀检测
↓ (P2 > 25?)
Monthly (prune.py + LLM): ⚠️ 提前触发
生成报告 → LLM 分析 → 人类确认 → 合并/删除/重排
↓
规则数回到合理范围 (目标: P0≤5, P1≤10, P2≤25, 总≤50)
🛡 安全机制
- 每次 apply 前自动备份 SKILL.md →
skill-backups/ - 一键回滚:
improve.py rollback - auto 模式只应用 P0 — P1/P2 需要人工确认
- 提案可审核 — 所有提案以 markdown 保存,可读可编辑
📊 CLI 参考
observe.py
| 命令 | 功能 |
|---|---|
record-original <file> |
记录 AI 原稿 |
record-original --text "..." |
直接传文本 |
record-final <file> --match <hash> |
记录最终版 |
pending |
查看待配对原稿 |
stats |
总体统计 |
improve.py
| 命令 | 功能 |
|---|---|
extract |
提取改进建议(默认今天) |
extract --days 7 |
最近 7 天 |
auto |
自动提取 + 应用 P0 + 去重检查 + 膨胀检测(cron 用) |
show |
查看所有提案 |
apply <id> |
应用指定提案(新规则加到 P2 末尾) |
rollback |
回滚上次应用 |
prune.py(v2.0 新增)
| 命令 | 功能 |
|---|---|
extract |
提取所有规则到 JSON(含 P0/P1/P2 分层) |
stats |
显示 learnings 触发频率统计 |
report |
生成 pruning 报告模板(供 LLM/人工审核) |
💡 适用场景
这个 framework 不限于写作风格,任何 "AI 生成 → 人类修改" 的循环都适用:
- Writing style skill(推文、文章、小红书)
- Code review rules(AI 写代码 → 人类 review)
- Email drafting(AI 写邮件 → 人类调整语气)
- Translation style(AI 翻译 → 人类润色)
核心不变:记录 original + final,自动 diff 提取规则。
🔧 安装
Claude Code 用户
# 方式 1: 直接复制到 skills 目录
cp -r self-improving-skill ~/.claude/skills/
# 方式 2: 项目级 skill
cp -r self-improving-skill ./your-project/.claude/skills/
数据自动存储在 ~/.claude/memory/skill-runs/ 下。
OpenClaw / ClawHub 用户
# 方式 1: ClawHub 安装
npx clawhub@latest install self-improving-skill
# 方式 2: 手动复制
cp -r self-improving-skill ~/clawd/skills/
数据自动存储在 ~/clawd/memory/skill-runs/ 下。
LLM 依赖
improve.py extract/auto 需要一个 LLM CLI 来分析 diff。自动检测:
| CLI | 安装 | 说明 |
|---|---|---|
claude |
Claude Code 自带 | 优先使用 |
llm |
pip install llm |
Simon Willison 的通用 CLI |
| 自定义 | IMPROVE_LLM_CMD=... |
任意接受 stdin 的命令 |
observe.py 不依赖任何 LLM,纯 Python,零依赖。
自定义存储路径
# 环境变量
export SKILL_BASE_DIR=~/my-custom-path/memory
# 或命令行参数
python3 observe.py stats --log-dir ~/my-path/skill-runs/my-skill/