自我进化引擎(Self-Evolution)
Purpose
让 AI 每做一次任务就变强一点:把任务中的成败转成两份可复用资产——
experience/:工具使用经验(工具怎么调用最快、流程怎么走最稳、哪些坑已经踩过)memory/:行为规则([MUST|SHOULD|NEVER]级别的可执行准则,带触发场景和来源追溯)
> 核心闭环:brief(开工召回)→ 执行 → log(记录反馈)→ promote(生成草稿)→ apply(沉淀入库)
> 反馈是原料,经验和规则是成品。原料不沉淀 = 没进化。
> 配套三机制:verify(实测后才毕业)· prune(长期无用则淘汰归档)· CHANGELOG(每次变更留痕)
铁律:任务收尾闸门
任何任务在给出最终答复前,必须完成这三步,缺一不可:
| 步骤 | 动作 | 判据 |
|---|---|---|
| 1️⃣ 记反馈 | log 记录本次任务:做得好 / 做得不好 / 下次改进动作 |
至少 1 条有效 bad 或 good,禁止"无" |
| 2️⃣ 更新经验 | promote → 填写草稿 → apply(写入 experience/) |
新增或命中合并了已有条目 |
| 3️⃣ 更新规则 | 同上,写入 memory/ |
沉淀为 [MUST/SHOULD/NEVER] 规则 |
自检:python se.py check 输出 ✅ 进化闭环已完成 才算收尾合格。
周期性维护(不必每次做,但别忘):每季度跑一次 prune --days 90,把长期零命中且未验证的条目归档;stats 里"待实测验证"长期不为 0,说明你在沉淀没用的东西。
禁止:
- ❌ 只记流水账("完成了任务")——反馈必须指向可复用的动作
- ❌ 光记不沉淀(jsonl 里有 new 状态堆积)
- ❌ 写无法判定的规则("要认真""要高效"这类不算规则)
- ❌ 用 /c/... 路径调脚本(Windows 下会被 MSYS 拼错盘符)
命令速查
脚本:C:/Users/Administrator/.workbuddy/skills/self-evolution/scripts/se.py
运行:C:/Users/Administrator/.workbuddy/binaries/python/versions/3.13.12/python.exe <脚本> <命令>
数据根:E:\Workbuddy\.workbuddy\evolution(可用 --home 或环境变量 SELF_EVOLUTION_HOME 覆盖)
| 命令 | 用途 |
|---|---|
init |
初始化数据目录(首次使用) |
brief --task "任务描述" |
开工前召回相关经验与规则,注入上下文 |
log --file feedback.json |
收尾第 1 步:记录反馈(中文内容走 JSON 文件,避免命令行编码问题) |
pending |
查看待沉淀反馈 |
promote |
收尾第 2 步:为待沉淀反馈生成 outbox/ 草稿 |
apply --all |
收尾第 3 步:把填好的草稿写入 experience/ 与 memory/,自动去重合并 |
digest --days 7 |
生成阶段性进化报告(高频问题 / 有效做法 / 工具分布) |
verify / verify --mark |
列出未实测条目 / 标记"已实测有效"(未验证的条目不会毕业) |
prune --days 30 |
淘汰长期零命中且未验证的条目:生成清单 → 勾选 → prune --apply 归档 |
stats / check |
总览(含待验证数、命中数) / 收尾自检 |
记录反馈(推荐写法:写 JSON 文件再导入)
{
"items": [{
"task": "任务名",
"good": ["做得好的点——下次还要这么干"],
"bad": ["做得不好的点——具体错在哪"],
"lesson": ["下次的改进动作——必须是可执行的动作"],
"tools": ["Bash", "Read"],
"tags": ["文件操作"],
"score": 4,
"project": "E:\\Workbuddy"
}]
}
python se.py log --file feedback.json
单行快速记:python se.py log --task "任务" --bad "错在哪" --lesson "下次怎么做" --score 3
三步详解
第 1 步:log(原料)
good/bad各写 1-3 条,写具体动作,不写感受。lesson是核心:把bad翻译成"下次遇到 X,就做 Y"。score1-5 自评,用于digest里看趋势。
第 2 步:promote(草稿)
promote 会在 outbox/<反馈ID>.md 生成结构化草稿。你需要填写其中两个段落:
## EXP::experience/tools.md ← 段落头 = 目标文件
## <经验标题>(src:fb_xxx) ← 标题必须带 (src:反馈ID)
- 场景:
- 做法:
- 证据/效果:
## RULE::memory/RULES.md
- [SHOULD] <一句话可执行规则,写明触发场景>(src:fb_xxx)
- 目标文件可换成
experience/workflow.md、experience/pitfalls.md、memory/preferences.md,也可新建(如experience/api-xxx.md)。 - 空的章节直接删掉,只保留真正可复用的部分。
第 3 步:apply(入库)
> ⚠️ 未填写草稿就直接 apply 会把空占位写进库——promote 生成的草稿默认带 ## <经验标题> 与空的「场景/做法/证据」,而 apply 不做"内容非空"校验,会原样入库(并在 _meta.json 里留下 <经验标题> 这类占位 title,且因占位标题完全相同,后续多次反馈会全部误合并到同一条)。apply 前必须逐条确认草稿已填写真实标题与三段内容;若本轮尚无确凿经验,宁可先不 apply,也不要写入占位。
> 补救:若已误入库,直接在 experience/*.md / memory/RULES.md 填回真实内容,并同步修正 _meta.json 中该条目的 title(保持与正文标题一致),最后 check 复核。
apply --all 解析草稿并合并,具备去重与冲突合并能力:
- 经验标题相似度 > 0.75 → 合并为"补充证据",不新增条目
- 规则文本相似度 > 0.8 → 把新来源追加进
(src:a,b)(同一条错犯两次,来源就会累积,权重自然升高) - 合并后自动刷新
_index.md,并把反馈标记为promoted
反思四问:沉淀时先判断动作类型
填 outbox/ 草稿前,先回答这次属于哪一种,别一律新增:
| 判断 | 动作 | 操作方式 |
|---|---|---|
| 库里没有,且这次是真踩出来的 | 新增 | 草稿里写新条目 |
| 已有条目,这次补充了更好的做法或反例 | 修改 | 写同标题条目,apply 会自动合并为"补充证据" |
| 与新条目说的是同一件事 | 合并 | 相似度超阈值时 apply 自动合并,只累积 (src:) 来源 |
| 已被证伪 / 长期零命中 | 淘汰 | prune --days 30 → 勾选 → prune --apply(归档不清删) |
> 只增不减的库会膨胀成噪音。库的价值 = 条目质量 × 召回率,不是条目数量。
验证环节:没实测过的条目不算数
新沉淀的条目默认 verified=false。在下一次真实任务中真正用上、确认有效后,执行:
python se.py verify # 看哪些还没毕业
python se.py verify --mark --keyword "Git" # 标记某条已实测有效
python se.py verify --mark # 全部标记(谨慎)
brief每次召回会自动给条目hits + 1(不要时加--no-track)- 已验证的条目永不进入淘汰候选
- 零命中且未验证、创建超过 N 天 → 进
prune候选
写法规范
详见 references/writing-standards.md。速记版:
好经验:场景 + 做法 + 证据。能让人照着做一遍就复现。
好规则:[级别] 触发场景下,执行某个可判定的动作。有明确触发条件,不含形容词。
坏例子:❌"要认真检查代码" ❌"本次任务完成得不错" ❌"注意效率"
自动触发机制(三重保险)
- 记忆注入(默认生效):用户级记忆
~/.workbuddy/MEMORY.md中已写入"任务结束必须执行进化三步"的规则,每次会话自动加载。 - 关键词触发:用户说"复盘 / 记个反馈 / 总结经验 / 更新规则"等触发词时,本 skill 自动加载。
- 定时复盘(可选):可让 AI 创建定时自动化,每周日自动跑
digest --days 7生成进化报告并提醒清理pending。
> 若平台支持 settings.json 的 hooks,可追加一层强制触发,配置片段见 references/hooks-setup.md。
安全
安装任何第三方 skill 之前,先做静态审计(纯静态,不执行其中脚本):
python C:/Users/Administrator/.workbuddy/skills/content-safety-auditor/scripts/audit.py skill --dir <待安装skill目录>
结论为 🚨 MALICIOUS 的不要装,⚠️ SUSPICIOUS 的逐条看 file:line 再决定。
目录结构
<数据根>/
├── feedback/ 原始反馈(jsonl 为数据源,md 为可读渲染)
├── experience/ 工具使用经验(tools / workflow / pitfalls / 自定义)
├── memory/ 行为规则(RULES.md)与用户偏好(preferences.md)
├── outbox/ 待填写的沉淀草稿 / 淘汰候选清单
├── archive/ 已淘汰条目归档(按年份,只移出不清删)
├── reports/ 周期性进化报告
├── CHANGELOG.md 版本记录:APPLY / VERIFY / PRUNE 操作留痕
└── _meta.json 条目元数据(创建时间、命中次数、验证状态)—— 脚本维护,别手改