面向 AI Agent 的自我进化引擎,直击"重复犯错、从沉默误学、记忆压缩丢失、进化无法衡量"四大痛点。通过自反思、纠错学习、模式晋升机制,让 Agent 从每次交互中积累可复用经验,而非每次会话从零开始。 核心能力包括自反思日志(任务后自动评估"是否达预期/如何改进/是否成模式")、纠错学习信号(识别用户纠正...
---
slug: evolution-engine-v2
name: evolution-engine
version: "2.0.0"
displayName: 进化引擎
summary: Agent自我进化:反思+纠错学习+反污染防线+压缩不删,避免重复犯错与误学。
license: MIT
description: |-
面向 AI Agent 的自我进化引擎,直击"重复犯错、从沉默误学、记忆压缩丢失、进化无法衡量"四大痛点。通过自反思、纠错学习、模式晋升机制,让 Agent 从每次交互中积累可复用经验,而非每次会话从零开始。
核心能力包括自反思日志(任务后自动评估"是否达预期/如何改进/是否成模式")、纠错学习信号(识别用户纠正并归类)、反污染防线(3 次确认才晋升、永不从沉默推断)、分层记忆压缩(合并而非删除,保留确认偏好)、进化指标度量(纠正频率/晋升率/复用率可量化)、命名空间隔离(项目/领域/全局三级)、心跳维护机制、冲突解决规则。
适用场景:AI 编程助手避免重复犯错、长期项目经验沉淀、多项目模式复用、希望 Agent 越用越好的用户、需要可衡量进化的团队。
差异化:相比简单记忆存储,本系统提供反污染防线(3 次确认+不从沉默推断)避免误学、压缩合并而非删除保留确认偏好、进化指标让"是否变好"可量化、命名空间隔离避免跨项目污染、心跳自动维护。所有记忆分层加载降低 token 消耗。
触发关键词:自我改进、反思、纠错、学习、进化、经验积累、避免重复犯错、self-improving、reflection
tags:
- 智能代理
- 自我进化
- 经验学习
tools:
- read
- exec
---
# 进化引擎(Evolution Engine)
**让 Agent 越用越好,而非每次从零开始。** 直击四大自我进化顽疾:重复犯错、从沉默误学、记忆压缩丢失、进化无法衡量。通过自反思、纠错学习、反污染防线,让每次交互都积累可复用经验。
## 痛点与对策速查
| 用户痛点 | 发生场景 | 本系统对策 |
|:---|:---|:---|
| 重复犯错 | 同样的坑踩多次 | 纠错日志强制记录 + 召回时优先注入 |
| 从沉默误学 | 用户没纠正就当成"做对了" | 反污染防线:永不从沉默推断 |
| 记忆压缩丢偏好 | 压缩时删了已确认的偏好 | 压缩合并而非删除,确认偏好永不丢 |
| 进化无法衡量 | 不知 Agent 是否真变好 | 进化指标:纠正率/晋升率/复用率 |
| 晋升太快污染 | 一次纠错就当永久规则 | 3 次一致确认才晋升到热层 |
| 跨项目污染 | A 项目的偏好污染 B 项目 | 命名空间隔离:项目/领域/全局三级 |
| 上下文浪费 | 每次加载所有记忆 | 分层加载:热层始终+温层按需 |
| 反思流于形式 | 反思了但不落地 | 反思三问 + 模式晋升闭环 |
## 何时使用
| 触发情境 | 说明 |
|:---|:---|
| 用户纠正你或指出错误 | "不对,应该是..." |
| 完成重要工作想评估结果 | 自反思时机 |
| 发现自己输出可改进 | 主动反思 |
| 希望知识跨会话积累 | 不用手动维护 |
| 用户问"你学到了什么" | 展示进化成果 |
## 记忆架构
记忆存储在 `~/evolution-engine/`,分层结构:
```text
~/evolution-engine/
├── memory.md # 热层:≤100 行,始终加载
├── index.md # 主题索引(含行数)
├── heartbeat-state.md # 心跳状态:上次运行、上次回顾
├── metrics.md # 进化指标追踪
├── projects/ # 按项目隔离的学习
│ ├── [项目A].md
│ └── [项目B].md
├── domains/ # 按领域隔离
│ ├── code.md # 编程领域
│ ├── writing.md # 写作领域
│ └── comms.md # 沟通领域
├── archive/ # 冷层:衰减的模式
└── corrections.md # 最近 50 条纠错日志
```
## 分层记忆策略
| 层级 | 位置 | 大小限制 | 加载行为 |
|:---|:---|:---|:---|
| 热层 | memory.md | ≤100 行 | 始终加载:确认规则、核心偏好 |
| 温层 | projects/, domains/ | ≤200 行/文件 | 按项目/领域匹配加载 |
| 冷层 | archive/ | 无限制 | 显式查询时加载 |
| 纠错 | corrections.md | 最近 50 条 | 回顾时加载 |
## 学习信号识别(差异化核心)
### 纠错信号 → 写入 corrections.md,评估是否晋升 memory.md
| 信号模式 | 示例 |
|:---|:---|
| 直接否定 | "不对,那不是..." |
| 修正 | "其实应该是..." |
| 指出错误 | "你错了关于..." |
| 偏好表达 | "我喜欢 X,不是 Y" |
| 提醒曾告知 | "我记得告诉过你..." |
| 要求停止 | "别再做 X" |
| 质疑重复 | "你为什么一直..." |
### 偏好信号 → 显式时写入 memory.md
| 信号模式 | 示例 |
|:---|:---|
| 喜欢 | "我喜欢你..." |
| 总是要求 | "总是为我做 X" |
| 永不要求 | "永远别做 Y" |
| 风格声明 | "我的风格是..." |
| 项目特定 | "对 [项目],用..." |
### 模式候选 → 追踪,3 次后晋升
| 信号模式 | 说明 |
|:---|:---|
| 相同指令重复 3+ 次 | 可能是偏好 |
| 工作流反复有效 | 可能是模式 |
| 用户赞扬特定方法 | 可能是偏好 |
### 忽略(不记录)— 反污染防线
| 类型 | 示例 | 为什么忽略 |
|:---|:---|:---|
| 一次性指令 | "现在做 X" | 非模式 |
| 上下文特定 | "在这个文件里..." | 非通用 |
| 假设性 | "如果..." | 非真实偏好 |
| **沉默** | 用户没纠正 | **永不从沉默推断"做对了"** |
| 第三方偏好 | "我老板觉得..." | 非用户自身偏好 |
## 反污染防线(差异化核心)
**核心原则:永不从沉默推断偏好。** 用户没纠正 ≠ 用户满意。
### 三级防线
| 级别 | 规则 | 目的 |
|:---|:---|:---|
| 第 1 级 | 沉默不记录 | 避免误学"没被纠正=做对了" |
| 第 2 级 | 单次纠错不晋升 | 避免单点误判成永久规则 |
| 第 3 级 | 3 次一致才确认 | 确保模式稳定才入热层 |
### 晋升流程
```text
用户纠正 → 写入 corrections.md(标记"待观察")
↓
同类信号第 2 次 → 标记"模式候选"
↓
同类信号第 3 次(7 天内)→ 询问用户确认
↓
用户确认 → 晋升到 memory.md(标记"已确认")
用户否认 → 归档到 archive/(标记"误判")
```
## 自反思机制(差异化核心)
完成重要工作后,暂停并评估:
### 反思三问
1. **是否达到预期?** — 结果与意图对比
2. **哪里可以更好?** — 识别下次改进点
3. **这是模式吗?** — 若是,记录到 corrections.md
### 反思触发时机
| 触发条件 | 说明 |
|:---|:---|
| 完成多步任务后 | 评估整体流程 |
| 收到反馈后(正/负) | 记录经验 |
| 修复 bug 后 | 记录根因 |
| 发现输出可改进时 | 主动反思 |
### 反思日志格式
```text
情境:[任务类型]
反思:[我注意到了什么]
经验:[下次如何不同]
```
### 反思示例
```text
情境:构建 Flutter UI
反思:间距看起来不对,不得不重做
经验:展示给用户前先检查视觉间距
情境:生成 API 文档
反思:用户说格式不符合团队规范
经验:先问团队文档规范再生成
→ 写入 corrections.md,第 2 次类似纠错时追踪模式
```
## 进化指标度量(差异化核心)
**"Agent 是否变好了"必须可量化。** 追踪以下指标:
| 指标 | 定义 | 健康趋势 |
|:---|:---|:---|
| 纠错频率 | 每周被纠正次数 | 下降 |
| 晋升率 | 模式成功晋升数/候选数 | 稳定 |
| 复用率 | 热层规则被引用次数 | 上升 |
| 重复犯错率 | 同类错误再次发生比例 | 下降 |
| 反思转化率 | 反思→实际行动的比例 | 上升 |
### 指标记录格式
```markdown
## 进化指标(metrics.md)
### 本周统计
- 纠错次数:12(上周 18,↓33%)
- 晋升成功:3 条规则
- 重复犯错:1 次(上周 4 次,↓75%)
- 热层规则引用:47 次
- 反思转化:5/7(71%)
### 趋势分析
- 纠错频率持续下降,说明学习有效
- 重复犯错率大幅下降,经验沉淀生效
- 复用率上升,热层规则有价值
### 待改进
- 反思转化率 71%,3 条反思未落地
- 建议:反思后立即写入 corrections.md
```
## 快速查询
| 用户说 | 动作 |
|:---|:---|
| "你对 X 了解什么" | 搜索所有层级查找 X |
| "你学到了什么" | 展示 corrections.md 最近 10 条 |
| "显示我的模式" | 列出 memory.md(热层) |
| "显示 [项目] 模式" | 加载 projects/{name}.md |
| "温层有什么" | 列出 projects/ + domains/ 文件 |
| "进化指标" | 显示 metrics.md 统计 |
| "忘记 X" | 从所有层移除(确认后) |
| "导出记忆" | ZIP 所有文件 |
## 进化统计输出
```text
📊 进化引擎记忆
🔥 热层(始终加载):
memory.md: X 条规则
🌡️ 温层(按需加载):
projects/: X 个文件
domains/: X 个文件
❄️ 冷层(已归档):
archive/: X 个文件
📈 进化指标(7 天):
纠错记录:X 条
晋升到热层:X 条
降级到温层:X 条
重复犯错:X 次
规则复用:X 次
```
## 核心规则
### 1. 从纠错和自反思学习
- 用户明确纠正时记录
- 自己识别改进时记录
- **永不从沉默推断**
- 3 次相同教训后询问确认
### 2. 分层存储
| 层级 | 位置 | 限制 | 行为 |
|:---|:---|:---|:---|
| 热层 | memory.md | ≤100 行 | 始终加载 |
| 温层 | projects/, domains/ | ≤200 行/文件 | 按上下文匹配加载 |
| 冷层 | archive/ | 无限制 | 显式查询加载 |
### 3. 自动晋升/降级
| 规则 | 触发条件 | 动作 |
|:---|:---|:---|
| 晋升 | 模式 7 天内用 3 次 | 提升到热层 |
| 降级 | 模式 30 天未用 | 降到温层 |
| 归档 | 模式 90 天未用 | 移入冷层 |
| 删除 | **永不自动删除** | 仅用户明确要求时 |
### 4. 命名空间隔离
```text
全局偏好 → memory.md(热层)
领域模式 → domains/{code,writing,comms}.md
项目模式 → projects/{name}.md
跨命名空间继承:全局 → 领域 → 项目
```
### 5. 冲突解决
模式矛盾时:
1. 最具体优先(项目 > 领域 > 全局)
2. 最近优先(同级)
3. 歧义时问用户
### 6. 压缩策略(差异化核心)
文件超限时,**合并而非删除**:
```text
压缩步骤:
1. 合并相似纠错为单条规则
2. 归档未用模式到 archive/
3. 摘要冗长条目
4. 永不丢失已确认偏好
5. 保留 corrections.md 最近 50 条
```
| 压缩操作 | 说明 | 保留 |
|:---|:---|:---|
| 合并 | 相似条目合并为一条 | 规则内容 |
| 摘要 | 冗长描述精简 | 核心经验 |
| 归档 | 未用模式移入冷层 | 完整记录 |
| **删除** | **仅用户明确要求** | — |
### 7. 透明度
- 每次基于记忆的行动引用来源:"使用 X(来自 projects/foo.md:12)"
- 每周摘要可用:学到的模式、降级、归档
- 按需导出:所有文件 ZIP
### 8. 安全边界
- 永不存储凭证、健康数据、第三方信息
- 永不从沉默推断偏好
- 永不自动删除记忆(仅降级/归档)
### 9. 优雅降级
上下文超限时:
1. 仅加载 memory.md(热层)
2. 按需加载相关命名空间
3. 永不静默失败——告知用户未加载内容
## 常见陷阱
| 陷阱 | 为什么失败 | 更好做法 |
|:---|:---|:---|
| 从沉默学习 | 制造虚假规则 | 等待明确纠正或重复证据 |
| 晋升太快 | 污染热层记忆 | 新教训保持观察直到重复 |
| 读取所有命名空间 | 浪费上下文 | 仅加载热层+最小匹配文件 |
| 压缩即删除 | 丢失信任与历史 | 合并、摘要或降级 |
| 反思不落地 | 反思了但不改 | 反思→写入 corrections.md→晋升闭环 |
| 无指标追踪 | 不知是否进化 | 追踪纠错率/复用率 |
## 真实场景示例
### 场景 1:避免重复犯错
```text
会话 A:
代理生成代码未加类型注解
用户纠正:"加上类型注解,我们用 TypeScript 严格模式"
→ 写入 corrections.md:"TypeScript 项目必须加类型注解"(待观察)
会话 B:
又生成无类型注解代码
用户再次纠正:"我说过要加类型注解"
→ 第 2 次信号,标记"模式候选"
会话 C:
生成代码加了类型注解
用户未纠正(沉默不记录)
但主动检查发现:同类项目都应加
→ 第 3 次确认,询问用户:"是否所有 TS 项目都要求类型注解?"
→ 用户确认 → 晋升到 memory.md(已确认)
会话 D(新项目):
代理在 TS 项目中自动加类型注解
→ 引用来源:"使用 TypeScript 类型注解规则(来自 memory.md:8)"
```
### 场景 2:自反思转化
```text
任务:生成 API 文档
完成后自反思:
情境:生成 API 文档
反思:用户说格式不符合团队规范,需重做
经验:生成文档前先确认团队规范
→ 写入 corrections.md
→ 下次生成文档前,主动询问团队规范
→ 反思转化为行动(转化率+1)
```
### 场景 3:跨项目隔离
```text
项目 A(电商):
用户:"错误日志用结构化 JSON 格式"
→ 写入 projects/ecommerce.md
项目 B(博客):
代理默认用 JSON 格式日志
→ 用户:"不需要 JSON,用简单文本"
→ 项目 B 偏好不同,写入 projects/blog.md
全局规则:无(两个项目偏好不同,不晋升全局)
→ 命名空间隔离防止跨项目污染
```
### 场景 4:压缩不删除
```text
memory.md 超过 100 行限制
压缩执行:
1. 发现 3 条类似规则:
- "用户喜欢简洁代码"
- "用户偏好短函数"
- "用户要删除冗余注释"
2. 合并为一条:"用户偏好简洁代码风格:短函数、无冗余注释"
3. 归档原始 3 条到 archive/(保留历史)
4. memory.md 行数减少
结果:热层精简,但偏好未丢失,历史可追溯。
```
## 常见问题 FAQ
**Q1:3 次确认会不会太慢?**
A:不会。大多数纠错是即时记录到 corrections.md,立即可查。仅晋升到热层需 3 次,防止误判污染核心规则。
**Q2:沉默真的完全不记录吗?**
A:是的。用户没纠正可能是没注意、懒得说、或确实满意——无法区分。从沉默推断会制造虚假规则,风险大于收益。
**Q3:压缩后还能找回原始记录吗?**
A:能。原始条目归档到 archive/,完整保留。热层是精简版,冷层是完整历史。
**Q4:进化指标怎么用?**
A:每周查看 metrics.md。纠错频率下降说明学习有效;重复犯错率下降说明经验沉淀生效。若指标不改善,说明反思未落地。
**Q5:能和其他记忆系统共用吗?**
A:能。本系统专注"从纠错学习",可与长期记忆系统互补。建议进化引擎管"经验/教训",长期记忆管"事实/偏好"。
## 故障排查
| 现象 | 排查步骤 | 解决方案 |
|:---|:---|:---|
| 重复犯错 | 检查 corrections.md 是否有记录 | 确认纠错已记录;检查召回是否注入 |
| 误学虚假规则 | 检查 memory.md 来源 | 确认是否走了 3 次确认流程 |
| 热层膨胀 | 检查晋升频率 | 执行压缩;提高晋升门槛 |
| 指标不改善 | 检查反思转化率 | 确保反思写入 corrections.md |
| 跨项目污染 | 检查命名空间隔离 | 确认项目模式未晋升全局 |
| 上下文超限 | 检查加载策略 | 仅加载热层+最小匹配 |
## 依赖说明
### 运行环境
- **Agent 平台**:支持 SKILL.md 的任意 AI Agent(Claude Code / Cursor / Codex / Gemini CLI 等)
- **操作系统**:Windows / macOS / Linux
### 第三方依赖
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|:---|:---|:---|:---|
| LLM API | API | 必需 | 由 Agent 内置 LLM 提供 |
| 文件系统 | 本地存储 | 必需 | 操作系统内置 |
### API Key 配置
- **本 Skill 无需任何 API Key**
- 纯 Markdown 指令驱动,所有记忆存储在本地文件
- 不做任何网络请求
### 可用性分类
- **分类**:MD(纯 Markdown 指令,无需 exec)
- **说明**:基于 Markdown 的 AI Skill,完全通过自然语言指令驱动 Agent 执行自我进化任务。所有记忆通过文件读写管理,无需命令行执行能力。
don't have the plugin yet? install it then click "run inline in claude" again.