Proactive Self-Improving Agent
自动捕获经验 · 安全进化 · 记录轨迹
让 agent 在日常工作中自动识别错误、纠正和最佳实践,结构化记录,安全地将经验沉淀为长期能力。
目录
- 1. 核心理念
- 经验记录系统
- 经验进化路径
- 操作日志
- 行为准则
- 快速参考
1. 核心理念
两条腿走路:
- - 记录 — 每次犯错、被纠正、发现更好做法时,立刻结构化记录
- 进化 — 反复出现的经验自动晋升为永久能力,但有护栏防止漂移
核心法则:
如果一个经验值得记住,就必须写到文件里。脑子里的"记住了"不算数。
去重法则:
触发 ≠ 必须写入。每次触发时先判断:这个经验是否真正新颖?如果没什么可学的,或者本质上已经包含在已有条目中,直接跳过,不写入。避免用重复的低价值记录污染 .learnings/。
2. 经验记录系统
2.1 触发条件
检测到以下 7 种场景时,评估是否有新经验值得记录:
| # | 场景 | 记录到 | 类别 |
|---|
| 1 | 命令/操作失败 | INLINECODE0 | - |
| 2 |
用户纠正("不对"/"应该是…"/"Actually…") |
LEARNINGS.md |
correction |
| 3 | 用户需要不存在的能力 |
FEATURE_REQUESTS.md | - |
| 4 | 外部 API/工具出错 |
ERRORS.md | - |
| 5 | 发现自己知识过时/错误 |
LEARNINGS.md |
knowledge_gap |
| 6 | 发现了更好的做法 |
LEARNINGS.md |
best_practice |
|
7 |
任务完成时 |
LEARNINGS.md |
task_review |
场景 7:任务完成触发(Task Review)
每次完成一个任务后,主动回顾:
- - 这次过程中踩了什么坑?
- 有没有走弯路?下次怎么做更快?
- 有没有发现新的工具用法或技巧?
- 有没有什么值得其他 agent 也知道的?
如果有真正新颖的经验 → 写入 LEARNINGS.md
如果没什么可学的,或已有条目已覆盖 → 跳过,不写入
学术场景扩展
在论文检索/分析场景中,额外关注:
- - 📚 论文关键结论 — 解析出的重要发现或反直觉结论
- 🏷️ 分类决策 — 为什么把论文归入某个类别
- ⚖️ 评分依据 — review 打分时的关键判断理由
- 🔍 检索技巧 — 某个搜索策略特别有效或无效
检测关键词
纠正信号:
- - "不对" / "不是" / "错了" / "应该是" / "Actually" / "No, I meant"
能力请求信号:
- - "能不能…" / "有没有办法…" / "要是能…" / "Can you…"
知识空白信号:
- - 用户提供了你不知道的信息
- API 行为和你的理解不一致
- 文档内容已过时
2.2 文件体系
CODEBLOCK0
2.3 记录格式
Learning 条目
CODEBLOCK1
Error 条目
CODEBLOCK2
实际的报错输出
\ CODEBLOCK3
Feature Request 条目
CODEBLOCK4
2.4 ID 生成规则
格式: INLINECODE11
- - TYPE:
LRN(经验)、ERR(错误)、FEAT(功能请求) - YYYYMMDD:当天日期
- XXX:三位序号(
001、002…)或随机三字符(A7B)
同一天同类型递增序号。
3. 经验进化路径
3.1 晋升机制
当一条 learning 足够重要且通用时,将其精炼后写入永久文件:
| 经验类型 | 晋升到 | 举例 |
|---|
| 工作流改进 | INLINECODE18 | "批量处理论文时每篇独立 spawn" |
| 工具使用技巧 |
TOOLS.md | "Semantic Scholar API 限流 3s 间隔" |
| 行为模式 |
SOUL.md | "不确定分类时用 unclassified/" |
晋升步骤:
- 1. 精炼:把冗长的经验浓缩为一条简洁的规则
- 写入:添加到目标文件的对应章节
- 更新原条目:Status →
promoted,填写 INLINECODE22 - 记录日志:在 CHANGELOG.md 追加一条
promote 记录
3.2 递归模式检测
当记录新条目时,先搜索是否有相似的旧条目:
CODEBLOCK5
- - 找到相似条目 → 添加
See Also 互相链接 - 同一模式出现 ≥3 次 → 触发自动晋升,写入永久文件
- 反复出现说明不是偶发事件,值得固化为规则
3.3 技能提取
当一条经验满足以下任意条件时,可提取为独立 skill:
| 条件 | 说明 |
|---|
| 有 2+ 个 See Also 链接 | 同类问题反复出现 |
| Status 为 resolved 且验证有效 |
解决方案被验证过 |
| 非显而易见 | 需要调试/探索才发现 |
| 跨项目通用 | 不是特定项目的特殊情况 |
提取步骤:
- 1. 创建 INLINECODE25
- 将解决方案写成独立的、自包含的技能说明
- 更新原条目:Status → INLINECODE26
- 记录日志:CHANGELOG.md 追加
extract 记录
3.4 安全护栏
ADL 协议(Anti-Drift Limits)— 防止漂移
禁止的进化:
- - ❌ 不为了"看起来聪明"而增加复杂度
- ❌ 不做无法验证效果的改动
- ❌ 不用"直觉""感觉"作为改动理由
- ❌ 不为了新奇牺牲稳定性
优先级排序:
稳定性 > 可解释性 > 可复用性 > 可扩展性 > 新奇性
VFM 协议(Value-First Modification)— 价值优先
晋升/提取前先打分:
| 维度 | 权重 | 问题 |
|---|
| 检索复用性 | 3x | 未来执行任务时会反复用到吗? |
| 错误预防 |
3x | 能避免以后犯同样错误吗? |
| 分析质量 | 2x | 能提升产出的深度/准确性吗? |
| 效率提升 | 2x | 能节省未来处理时间吗? |
加权总分 < 50 → 不晋升,留在 .learnings/ 即可。
黄金法则:
"这个改动能让未来的我用更少成本解决更多问题吗?"
4. 操作日志(CHANGELOG.md)
每次对 .learnings/ 做写入操作时,同步追加一条日志。
格式
文件头部为 markdown 说明,主体为 JSONL 代码块:
CODEBLOCK6 jsonl
{"ts":"2026-03-02T11:00:00+08:00","action":"add","type":"learning","id":"LRN-20260302-001","summary":"Semantic Scholar API 需要 3s 间隔防限流"}
{"ts":"2026-03-02T14:30:00+08:00","action":"add","type":"error","id":"ERR-20260302-001","summary":"pdfplumber 遇到扫描版 PDF 返回空文本"}
{"ts":"2026-03-03T09:00:00+08:00","action":"promote","type":"learning","id":"LRN-20260302-001","summary":"API 限流规则","target":"TOOLS.md"}
{"ts":"2026-03-05T10:00:00+08:00","action":"extract","type":"learning","id":"LRN-20260304-002","summary":"扫描版 PDF 处理","target":"skills/pdf-fallback"}
{"ts":"2026-03-05T12:00:00+08:00","action":"resolve","type":"error","id":"ERR-20260302-001","summary":"改用 OCR fallback 方案"}
\ CODEBLOCK7
字段说明
| 字段 | 类型 | 必填 | 说明 |
|---|
| INLINECODE29 | string | ✅ | ISO-8601 时间戳,带时区 |
| INLINECODE30 |
enum | ✅ |
add /
promote /
extract /
resolve |
|
type | enum | ✅ |
learning /
error /
feature |
|
id | string | ✅ | 对应条目 ID(如
LRN-20260302-001) |
|
summary | string | ✅ | ≤100 字摘要 |
|
target | string | ❌ | 仅
promote /
extract 时填写,目标路径 |
action 枚举
| action | 含义 | 触发时机 |
|---|
| INLINECODE45 | 新增记录 | 写入 LEARNINGS/ERRORS/FEATURE_REQUESTS 时 |
| INLINECODE46 |
晋升 | 经验写入 AGENTS.md / TOOLS.md / SOUL.md 时 |
|
extract | 提取技能 | 经验提取为独立 skill 时 |
|
resolve | 已解决 | 问题修复、标记 resolved 时 |
脚本读取
CODEBLOCK8 jsonl$/,/^``$/p' .learnings/CHANGELOG.md | grep -v '`'
# 按 action 过滤
... | jq -c 'select(.action == "promote")'
# 按日期范围
... | jq -c 'select(.ts >= "2026-03-01" and .ts < "2026-03-08")'
# 统计各 action 数量
... | jq -s 'group_by(.action) | map({action: .[0].action, count: length})'
# 查看所有晋升记录及其目标
... | jq -c 'select(.action == "promote") | {id, summary, target}'
CODEBLOCK9
.learnings/*.md (原始记录)
│
│ 反复出现 or 足够重要
▼
AGENTS.md / TOOLS.md (晋升为永久规则)
│
│ 足够通用 + 可独立
▼
skills/<new-skill>/ (提取为独立技能)
`
### 写入检查清单
每次触发时:
- [ ] **先判断**:这是新经验吗?还是已有条目已覆盖?→ 不新颖则跳过
- [ ] 条目 ID 格式正确(TYPE-YYYYMMDD-XXX`)
- - [ ] 内容具体、可操作(不是"调查一下")
- [ ] 搜索过是否有相似旧条目(关联 See Also)
- [ ] CHANGELOG.md 已追加日志行
"每次犯错都是进化的燃料,前提是你把它记下来。"
主动自我改进代理
自动捕获经验 · 安全进化 · 记录轨迹
让 agent 在日常工作中自动识别错误、纠正和最佳实践,结构化记录,安全地将经验沉淀为长期能力。
目录
- 1. 核心理念
- 经验记录系统
- 经验进化路径
- 操作日志
- 行为准则
- 快速参考
1. 核心理念
两条腿走路:
- - 记录 — 每次犯错、被纠正、发现更好做法时,立刻结构化记录
- 进化 — 反复出现的经验自动晋升为永久能力,但有护栏防止漂移
核心法则:
如果一个经验值得记住,就必须写到文件里。脑子里的记住了不算数。
去重法则:
触发 ≠ 必须写入。每次触发时先判断:这个经验是否真正新颖?如果没什么可学的,或者本质上已经包含在已有条目中,直接跳过,不写入。避免用重复的低价值记录污染 .learnings/。
2. 经验记录系统
2.1 触发条件
检测到以下 7 种场景时,评估是否有新经验值得记录:
| # | 场景 | 记录到 | 类别 |
|---|
| 1 | 命令/操作失败 | ERRORS.md | - |
| 2 |
用户纠正(不对/应该是…/Actually…) | LEARNINGS.md | correction |
| 3 | 用户需要不存在的能力 | FEATURE_REQUESTS.md | - |
| 4 | 外部 API/工具出错 | ERRORS.md | - |
| 5 | 发现自己知识过时/错误 | LEARNINGS.md | knowledge_gap |
| 6 | 发现了更好的做法 | LEARNINGS.md | best_practice |
|
7 |
任务完成时 | LEARNINGS.md | task_review |
场景 7:任务完成触发(Task Review)
每次完成一个任务后,主动回顾:
- - 这次过程中踩了什么坑?
- 有没有走弯路?下次怎么做更快?
- 有没有发现新的工具用法或技巧?
- 有没有什么值得其他 agent 也知道的?
如果有真正新颖的经验 → 写入 LEARNINGS.md
如果没什么可学的,或已有条目已覆盖 → 跳过,不写入
学术场景扩展
在论文检索/分析场景中,额外关注:
- - 📚 论文关键结论 — 解析出的重要发现或反直觉结论
- 🏷️ 分类决策 — 为什么把论文归入某个类别
- ⚖️ 评分依据 — review 打分时的关键判断理由
- 🔍 检索技巧 — 某个搜索策略特别有效或无效
检测关键词
纠正信号:
- - 不对 / 不是 / 错了 / 应该是 / Actually / No, I meant
能力请求信号:
- - 能不能… / 有没有办法… / 要是能… / Can you…
知识空白信号:
- - 用户提供了你不知道的信息
- API 行为和你的理解不一致
- 文档内容已过时
2.2 文件体系
.learnings/
├── LEARNINGS.md # 经验/纠正/最佳实践/任务回顾
├── ERRORS.md # 错误日志
├── FEATURE_REQUESTS.md # 能力请求
└── CHANGELOG.md # 操作日志(详见第 4 节)
2.3 记录格式
Learning 条目
markdown
[LRN-YYYYMMDD-XXX] category
Priority: low | medium | high | critical
Status: pending | resolved | promoted | promotedtoskill
Area: research | infra | tools | docs | config
内容
简述:发生了什么、为什么错/不好、正确/更好的做法是什么。
建议修复
具体应该怎么改、改哪里。
元数据
- - Source: error | correction | userfeedback | taskreview | best_practice
- See Also: LRN-XXXXXXXX-XXX(关联条目)
- Pattern-Key: xxx(可选,用于递归模式检测)
- Promoted-To: AGENTS.md(仅晋升后填写)
Error 条目
markdown
[ERR-YYYYMMDD-XXX] 出错的工具/命令
Priority: high
Status: pending | resolved
Area: research | infra | tools | docs | config
摘要
简述什么操作失败了。
错误信息
\
实际的报错输出
\
上下文
建议修复
可能的解决方案。
元数据
- - Reproducible: yes | no | unknown
- See Also: ERR-XXXXXXXX-XXX
Feature Request 条目
markdown
[FEAT-YYYYMMDD-XXX] 能力名称
Priority: medium
Status: pending | resolved
Area: research | infra | tools | docs | config
需要的能力
用户想做什么。
场景
为什么需要、解决什么问题。
复杂度
simple | medium | complex
建议实现
怎么做、可以扩展哪个现有功能。
元数据
- - Frequency: first_time | recurring
2.4 ID 生成规则
格式:TYPE-YYYYMMDD-XXX
- - TYPE:LRN(经验)、ERR(错误)、FEAT(功能请求)
- YYYYMMDD:当天日期
- XXX:三位序号(001、002…)或随机三字符(A7B)
同一天同类型递增序号。
3. 经验进化路径
3.1 晋升机制
当一条 learning 足够重要且通用时,将其精炼后写入永久文件:
| 经验类型 | 晋升到 | 举例 |
|---|
| 工作流改进 | AGENTS.md | 批量处理论文时每篇独立 spawn |
| 工具使用技巧 |
TOOLS.md | Semantic Scholar API 限流 3s 间隔 |
| 行为模式 | SOUL.md | 不确定分类时用 unclassified/ |
晋升步骤:
- 1. 精炼:把冗长的经验浓缩为一条简洁的规则
- 写入:添加到目标文件的对应章节
- 更新原条目:Status → promoted,填写 Promoted-To
- 记录日志:在 CHANGELOG.md 追加一条 promote 记录
3.2 递归模式检测
当记录新条目时,先搜索是否有相似的旧条目:
bash
grep -r 关键词 .learnings/
- - 找到相似条目 → 添加 See Also 互相链接
- 同一模式出现 ≥3 次 → 触发自动晋升,写入永久文件
- 反复出现说明不是偶发事件,值得固化为规则
3.3 技能提取
当一条经验满足以下任意条件时,可提取为独立 skill:
| 条件 | 说明 |
|---|
| 有 2+ 个 See Also 链接 | 同类问题反复出现 |
| Status 为 resolved 且验证有效 |
解决方案被验证过 |
| 非显而易见 | 需要调试/探索才发现 |
| 跨项目通用 | 不是特定项目的特殊情况 |
提取步骤:
- 1. 创建 skills//SKILL.md
- 将解决方案写成独立的、自包含的技能说明
- 更新原条目:Status → promotedtoskill
- 记录日志:CHANGELOG.md 追加 extract 记录
3.4 安全护栏
ADL 协议(Anti-Drift Limits)— 防止漂移
禁止的进化:
- - ❌ 不为了看起来聪明而增加复杂度
- ❌ 不做无法验证效果的改动
- ❌ 不用直觉感觉作为改动理由
- ❌ 不为了新奇牺牲稳定性
优先级排序:
稳定性 > 可解释性 > 可复用性 > 可扩展性 > 新奇性
VFM 协议(Value-First Modification)— 价值优先
晋升/提取前先打分:
| 维度 | 权重 | 问题 |
|---|
| 检索复用性 | 3x | 未来执行任务时会反复用到吗? |
| 错误预防 |
3x | 能避免以后犯同样错误吗? |
| 分析质量 | 2x |