> 让Agent拥有"同一个坑只踩一次"的记忆力。
>
> 核心能力:学习环闭合 + 数据零截断 + 双地同步
3条铁律,记住就行:
① 安装/升级:python3 {SKILL_PATH}/scripts/upgrade_agent.py --deploy
② 每次任务结束 → log:
python3 domains/_shared/evolution_guardian.py log <domain> "<任务>" <success|failed|partial>
③ ★ 不需要手动review了!
log每3次 → R1自动触发 → auto-review自动提取经验 → 写入experiences.json
> AI只需做一件事:执行log。其余全自动。
用户给任务 → Router路由(经验+免疫预检) → AI执行 → log记账
↓
每3次任务(R1)
↓
auto-review [自动!]
↓
扫描最近N条任务日志
↓
┌───────────────┴───────────────┐
▼ ▼
成功×≥2次 含失败
L2程序性经验 L2教训+免疫规则
↓ ↓
experiences.json immune_rules.json
└───────────────┬──────────────┘
↓
下次Router加载时自动生效
| 规则 | 触发条件 | 输出 | 自动行为 |
|---|---|---|---|
| ------ | --------- | ------ | --------- |
| R1 | 每3次任务 | 📊 | 自动执行 review --auto 提取经验 |
| R2 | 同类连续失败≥2次 | 🔴 CRITICAL | 自动执行完整review + 免疫规则提取 |
| R3 | ≥1条负面反馈 | ⚠️ CRITICAL | 输出根因分析提醒 |
| R4 | MEMORY.md>200行 | 📋 | 提示运行distill蒸馏 |
| 层级 | 存什么 | 位置 | 写入方式 |
|---|---|---|---|
| ------ | -------- | ------ | --------- |
| L1 陈述性 | URL、配置、命名规则 | experiences.json | 手动 / distill |
| L2 程序性⭐ | 已验证步骤、最佳实践 | experiences.json | ★ auto-review自动 |
| L3 语义 | 错误模式、根因链 | experiences.json | ★ auto-review自动 |
| L4 工作 | 当前会话方法 | l4-memory.json | Session内临时 |
Router每次任务前自动预检:
| 级别 | 行为 |
|---|---|
| ------ | ------ |
| 🔴 critical | 必须先确认再行动 |
| 🟡 warning | 有意识绕开 |
| 🔵 info | 可选优化 |
所有数据存储路径零截断:
| 字段 | 旧行为 | 当前行为 |
|---|---|---|
| ------ | -------- | --------- |
| scenario (experiences) | task[:80] 截断 | ✅ 完整保留 |
| scenario (immune_rules) | task[:80] 截断 | ✅ 完整保留 |
| source_lesson | task[:40] 截断 | ✅ 去掉task引用 |
| lesson (evolution.log) | [:80] 截断 | ✅ 500字符 |
| hint (Router输出) | [:300]/[:200] | ✅ 完整输出 |
入口:python3 domains/_shared/evolution_guardian.py
# 基础用法
log <domain> "<task>" <success|failed|partial>
# 完整用法
log <domain> "<task>" <result> [error_type] [error_category] [tokens] [duration_sec]
# 失败时附带教训(直接写experiences+immune_rules)
log data "API超时" failed timeout API --lesson="需要加retry机制"
# ★ v5.1新增: trace和context参数(GEPA思想)
log data "任务" success --trace="tool1→tool2→tool3" --context="因为X选择Y方案"
关键行为:
review --auto(异步,日志写入auto-review.log)review <domain> # 完整报告模式(详细输出每组任务分析)
review <domain> --auto # 轻量自动模式(R1调用,单行摘要)
提取算法:
输入: recent_tasks(20条) + evolution.log(全部历史)
↓
按 _normalize_task_type() 聚类分组
↓
┌────────────────────┬──────────────────────┬──────────────┐
│ 成功组 × ≥2次 │ 含失败记录 │ 单次/混合 │
│ → L2程序性经验 │ → L2教训 + 免疫规则 │ → 跳过 │
│ 置信度 0.5~0.95 │ 置信度固定 0.8 │ 样本不足 │
└────────────────────┴──────────────────────┴──────────────┘
↓
与已有 experiences.json 去重(单字级token重叠>=85% = 已存在;50-85%冲突窗口标记旧经验deprecated)
↓
写入新经验和规则
check <domain> # 文件完整性 / 经验库 / 任务统计 / 免疫系统
evolve <domain> "原因描述"
feedback admin negative <strong|medium|mild> "<触发词>" "<上下文>"
distill --from-daily # 每日日志→STM
distill --from-stm # STM→MEMORY.md
distill # 仅应急:MEMORY超200行
archive-logs [--days=N] [--dry-run]
experience-update <domain> <id> <deprecate|supersede> [new_id]
# ★ v5.1 新增
hot-experiences [数量] # 输出所有域中最高价值经验(供session初始化)
decay [--dry-run] # 经验置信度衰减(>30天+proven<=1 → conf-=0.1; <=0.3→deprecated)
项目根目录/
├── domains/
│ ├── _shared/
│ │ ├── evo-config.json ← 全局配置(阈值)
│ │ ├── evolution_guardian.py ← ★ 统一入口
│ │ ├── domain_router.py ← 领域路由引擎
│ │ ├── evo-feedback.json ← 反馈记录
│ │ └── admin-experiences.json ← 跨域共享经验
│ │
│ └── <域名>/ ← 中文语义命名(禁止hash/英文缩写)
│ ├── experiences.json ← review自动写入
│ ├── memory.json ← 统计(recent_tasks等)
│ ├── immune_rules.json ← review自动写入
│ └── evolution.log ← 进化日志(Review的数据源之一)
│
├── memory/ ← 记忆目录(IDE无关,部署时自动发现或创建)
│ ├── MEMORY.md ← 长期元层(<200行,含PINNED强制校验区)
│ ├── short-term-memory.md ← STM缓冲
│ ├── YYYY-MM-DD.md ← 每日日志
│ └── archive/ ← 归档
│
└── workspace/.tmp/l4-memory.json ← Session临时
修改以下3个文件后必须双地同步:
| # | 文件 | 工作副本位置 | skill源码位置 |
|---|---|---|---|
| --- | ------ | ------------- | -------------- |
| 1 | evolution_guardian.py | domains/_shared/ | {SKILL_HOME}/self-evolving-core/scripts/ |
| 2 | domain_router.py | 同上 | 同上 |
| 3 | evo-config.json | 同上 | 同上 |
> {SKILL_HOME} = 你使用的IDE的skill安装目录。WorkBuddy: ~/.workbuddy/skills/;Cursor: ~/.cursor/skills/;其他IDE请查阅对应文档。
为什么? 新工作空间部署时从 skill 源码复制文件到工作副本。不同步 = 新工作空间拿到旧版 bug。
验证命令:
diff domains/_shared/evolution_guardian.py {SKILL_HOME}/self-evolving-core/scripts/evolution_guardian.py
# 期望输出:空(完全一致)
MEMORY.md 顶部 到 之间为永驻区,蒸馏不会删除。必须包含:
| 规则 | 说明 |
|---|---|
| ------ | ------ |
| ❌ 禁止写版本号 | 不含 v5.0.0 / v4.6.2 等,冗余无实际意义 |
| ❌ 禁止存具体经验原文 | 只存路径指针(如 domains/data/experiences.json) |
| ❌ 禁止存项目具体内容 | 项目信息只存在 workspace/<中文项目名>/ 目录下 |
| ✅ 只存规范+索引+指针 | MEMORY = 元知识层,不是笔记本 |
| ✅ 正确 | ❌ 错误 |
|---|---|
| --------- | -------- |
奖项申报 | topic_e5e22d |
数据定级 | whitelist_data_q |
聚源数据 | dd_gildata_com |
cos内网 | cos(太短无语义) |
| 方式 | 触发条件 | 行为 |
|---|---|---|
| ------ | --------- | ------ |
| Router动态创建 | 任务匹配不到已有域 | 自动分析语义→建域+注册index.json |
| log自动创建 | cmd_log传入不存在域名 | 创建目录+基础文件,回退_shared |
| 手动--deploy | upgrade_agent.py --deploy | 从模板批量初始化静态域 |
python3 {SKILL_PATH}/scripts/upgrade_agent.py --deploy [--root <目录>] [--yes]
自动完成:识别架构 → 创建域 → 注入钩子 → 整理MEMORY.md → 架构优化建议
Step 1: 从skill源码覆盖3个核心文件到工作副本
cp {SKILL_HOME}/self-evolving-core/scripts/evolution_guardian.py \
<项目>/domains/_shared/evolution_guardian.py
cp {SKILL_HOME}/self-evolving-core/scripts/domain_router.py \
<项目>/domains/_shared/domain_router.py
cp {SKILL_HOME}/self-evolving-core/scripts/evo-config.json \
<项目>/domains/_shared/evo-config.json
Step 2: 更新 MEMORY.md(手动,不可覆盖)
前补全「领域经验管理规则」章节Step 3: 验证
python3 domains/_shared/evolution_guardian.py check _shared
python3 domains/_shared/evolution_guardian.py log _shared "升级验证" success "" ""
> 详细升级步骤见:自进化系统升级提示词-v5.1.0.md(skill 目录下)
| 来源 | Layer | 初始置信度 | 说明 |
|---|---|---|---|
| ------ | ------- | ----------- | ------ |
--lesson 参数 | L2 | 0.7 | 用户明确标注的教训 |
| auto-review 成功模式 | L2 | 0.5~0.95 | 出现次数越多置信越高(≥6次=0.95) |
| auto-review 失败教训 | L2 | 0.8 | 失败记录自带高价值 |
| distill 下沉 | L2 | 0.6 | 从MEMORY.md提炼的通用内容 |
{
"id": "lesson_xxx_0",
"status": "active|deprecated",
"layer": "L2",
"scenario": "任务描述(完整,不截断)",
"keywords": ["关键词", "keyword_en"],
"lang": "zh|en|mixed",
"steps": ["教训: xxx"],
"insight": "经验核心内容",
"trace": "tool1→tool2→tool3(决策路径)",
"context": "因为X所以选择Y方案",
"why_failed": "error_type(失败原因分类)",
"confidence": 0.7,
"proven_count": 1,
"superseded_by": null,
"supersedes": ["被本经验替代的旧经验id列表"],
"source_task": "原始任务描述",
"agent": "admin",
"tags": ["from_log_lesson", "failure"],
"timestamp": "2026-05-19T14:00:00",
"updated_at": "2026-05-19T14:00:00"
}
每日日志 → distill --from-daily → STM新内容区
→ distill --from-stm → MEMORY.md(PINNED区之后)
→ distill(仅应急) → experiences.json
| 场景 | 操作 | 自动? |
|---|---|---|
| ------ | ------ | ------ |
| 每次任务结束 | log | 手动执行 |
| 每3次任务 | auto-review | ★全自动 |
| 每日工作结束 | distill --from-daily | 手动 |
| STM>20行 | distill --from-stm | 手动 |
| R4触发(MEMORY>200行) | distill | 手动 |
| 每月维护 | archive-logs | 手动 |
domains/_shared/evo-config.json:
{
"consecutive_error_threshold": 2,
"review_every_n_tasks": 3,
"negative_feedback_threshold": 1,
"memory_line_threshold": 150,
"stm_distill_threshold": 20,
"log_archive_days": 15
}
| 问题 | 解决 |
|---|---|
| ------ | ------ |
| log报目录不存在 | 检查是否已deploy;或新域名会自动创建 |
| check显示缺失 | 跑一次 log <该域> 即可自动创建 |
| Router返回null域 | 用默认身份执行 |
| MEMORY.md超限 | distill --dry-run 后执行 |
| auto-review没提取到经验 | 正常——样本不足时会跳过,继续积累即可 |
| 经验重复写入 | 不会——去重保护(>=85%单字级匹配) + 冲突检测(50-85%标记deprecated) |
| 两边文件不一致 | 以skill源码为准cp覆盖,再验证diff=0 |
| 升级后旧数据丢失 | 不会——运行时JSON不受影响 |
| 版本 | 核心变更 |
|---|---|
| ------ | --------- |
| ★ v5.2.0 | 跨语种经验检索:新增_detect_language语种检测;_extract_keywords智能关键词提取(中文2-4字词组/英文3+字母);_expand_bilingual 200+术语双语映射自动扩展;Router检索query双语扩展+insight字段匹配(权重2);所有4个写入点自动生成高质量keywords+lang字段;存量44条空keywords一次性修复 |
| ★ v5.1.0 | 23项优化:统一路径解析器_resolve_paths;log增加--trace/--context(GEPA思想);去重阈值60%→85%+冲突检测50-85%;R1异步subprocess+日志;R2增强error_cat维度;新增hot-experiences/decay命令;域自动创建同步注册Router;Router兜底匹配域目录名;耗时自动计算;immune_rules增timestamp |
| ★ v5.0.0 (第三轮) | 全面审计修复16个问题:全链路截断清除(9处);cmd_review新域兼容;MEMORY.md纯净性(去版本号+补全领域管理规则);evo-config纳入双地同步;双保险架构(R1/R2/R3全自动) |
| ★ v5.0.0 (第二轮) | R2/R3触发后自动执行(不再仅打印);新域log自动创建;lesson字段80→500字符;Router hint去截断;evo-config补全域注册 |
| ★ v5.0.0 (首轮) | 闭环学习系统:cmd_review从空壳print重写为自动经验提取引擎;R1触发→auto-review自动执行;双数据源融合;智能聚类+去重保护 |
| v4.6.8 | 第三轮深度白盒审计修复10个隐藏bug(feedback参数/archive-params/distill日期/跨域判定/原子写) |
| v4.6.5 | 项目目录管理规则;Memory阈值200行 |
| v4.6.2 | 解决"第二天失效"根因:PINNED保护区+强制log注入 |
| v4.6.0 | 精细化域推断(12种任务模式聚类);精准经验提取 |
| v4.5.4 | 钩子触发条件扩展为14类具体动作 |
| v4.5 | 三段式蒸馏固化;MEMORY.md置顶保护区;STM分区隔离 |
| v4.4 | MEMORY.md生命周期治理;安全写入;日志归档 |
| v4.1 | log内置阈值自检引擎(R1-R4) |
| v4.0 | Domain大一统架构;Router内嵌检索 |
"好的Agent不是不犯错,而是同一个坑只踩一次——而且越踩越聪明。"
共 10 个版本