2026年4月13日 · 阅读 —
Self-Improving Agent:主动工作与用户参与边界说明
Self-Improving Agent:主动工作与用户参与边界说明
Self-Improving Agent 怎么分工:哪些步骤 AI 主动做,哪些需要用户参与?
Self-Improving Agent 不是一个“会自己变聪明”的魔法 skill,它本质上是一套工程化复盘机制:当 AI 被纠正、命令失败、发现最佳实践、或者用户提出缺失能力时,先记录到 .learnings/,再把高价值结论逐步升级到 AGENTS.md 和长期记忆里。这样 AI 的改进就不会停留在当次对话,而会沉淀成下一次默认能用的规则。
更口语一点的说法
它就是给 AI 建了一个错题本。 错了要记,被纠正了要记,发现更好的做法也要记。 但重点不是“记下来”,而是以后遇到同类问题能直接用,最后还能升级成长期规则。
文件结构
~/.openclaw/workspace/ ├── AGENTS.md ├── MEMORY.md ├── memory/ │ └── agent-notes.md └── .learnings/ ├── LEARNINGS.md ├── ERRORS.md └── FEATURE_REQUESTS.md
它们分别干什么
| 文件 | 作用 | 什么时候写 |
|---|---|---|
| .learnings/LEARNINGS.md | 记录纠正、知识缺口、最佳实践 | 我答错了、你纠正我了、发现更好的做法 |
| .learnings/ERRORS.md | 记录命令失败、工具异常、外部 API 故障 | 命令报错、服务超时、接口异常 |
| .learnings/FEATURE_REQUESTS.md | 记录现在没有、但你明确想要的能力 | 你说“能不能支持这个” |
| AGENTS.md | 写默认流程规则 | 某条规则已经值得固化 |
| memory/agent-notes.md | 写长期执行守则 | 某个方法以后会反复用到 |
1. 先说结论
- Self-Improving Agent 不是让用户多做记录工作,而是让 AI 在完成任务后,顺手把“错误、修复路径、最佳实践、统一规则”沉淀下来。
也就是说,这套机制的理想状态不是:
- 每次都要你手把手提醒“去记一条”
而是:
- 我在合适的时候主动判断、主动记录、主动升级规则
- 只有在涉及策略选择、跨任务规则定稿、或者需要你拍板时,才让你参与
2. 先把角色分清楚
在下面的示例里:
- 莫菲 Murph = AI 助理 = 主要执行者
- 蓝葛格 = 用户 = 决策者 / 需求提出者 / 纠正者
为了让边界更清楚,可以先看一个总表。
| 阶段 | 由谁主导 | 是否通常需要用户参与 | 说明 |
|---|---|---|---|
| 发现问题 | 莫菲主导 | 不一定 | AI 在执行过程中发现 bug、错误、异常 |
| 修复当前问题 | 莫菲主导 | 视情况 | 常规修复一般我先做;重大改动才需要你确认 |
| 判断是否值得沉淀 | 莫菲主导 | 通常不需要 | 我应该主动判断这次修复是否值得写进 .learnings/ |
写入 .learnings/ | 莫菲主导 | 通常不需要 | 这是 AI 的整理工作,不该转嫁给用户 |
| 升级为统一规则 | 莫菲先提炼 | 有时需要你确认 | 如果规则会影响长期工作方式,最好由你拍板 |
| 后续复用 | 莫菲主导 | 不需要 | 下次我应主动按既有规则执行 |
一句话版:
修 bug 是我干,记经验也是我干;只有“这条规则以后是不是要长期生效”这类问题,才更需要你参与。
3. 一个真实可理解的场景:代码 bug 缺陷修复
下面用一个非常典型的工程场景来说明。
场景设定
假设我们正在修一个 Python 服务 bug。
问题现象是:
- 接口偶发 500
- 日志显示某个字段为空时,代码直接调用
.strip() - 结果抛出异常
报错类似这样:
AttributeError: 'NoneType' object has no attribute 'strip'
这时,如果没有 Self-Improving 机制,可能只是:
- 修掉 bug
- 提交代码
- 结束
但这样的问题以后非常容易再来一遍。
有了 Self-Improving Agent,真正目标就变成两层:
- 先把当前 bug 修好
- 再把“以后类似 bug 怎么处理”的规则沉淀下来
4. 用对话方式看清楚:哪些是我主动做,哪些需要你参与
下面直接用对话来演示。
5. 对话示例:Bug 修复 + Self-Improving 沉淀
阶段 A:你提出任务
蓝葛格: 这个接口报 500 了,帮我修一下。
这一段是谁在工作?
- 需要你参与的部分:提出任务
- 莫菲主动工作:开始排查
这一步你只需要告诉我目标:“修这个 bug”。 后面的看日志、定位原因、找修法,默认由我主动推进。
阶段 B:我排查并定位问题
莫菲: 我先看了一下报错,触发点在这里:
name = payload.get("name").strip()
当 payload.get("name") 返回 None 时,会直接报:
AttributeError: 'NoneType' object has no attribute 'strip'
我判断这是一个典型的空值保护缺失问题,不是业务逻辑本身错了,而是输入边界没兜住。
这一段是谁在工作?
- 莫菲主动工作:读代码、定位 bug、归类问题类型
- 你不需要参与:除非日志不全、上下文缺失
这一段完全应该由我自己做,不需要你一步步带着排查。
阶段 C:我给出修复方案
莫菲: 修法我建议这样改:
raw_name = payload.get("name")
name = raw_name.strip() if isinstance(raw_name, str) else ""
如果你希望保守一点,也可以在入口直接校验参数,不合法就返回 400,而不是默默兜底成空字符串。
这一段是谁在工作?
- 莫菲主动工作:提出修复方案和备选路径
- 你可能需要参与:如果涉及产品策略选择
这里有个边界:
- 如果只是技术性 bug 修复,我可以直接修
- 如果修法会影响业务行为,比如“空值时返回空串”还是“直接报 400”,那最好你拍板
也就是说:
技术修复我主导,业务策略你决定。
阶段 D:你做业务确认
蓝葛格: 这个字段不能为空,空了就返回 400,不要默默兜底。
这一段是谁在工作?
- 需要你参与:业务规则拍板
- 莫菲主动工作:据此实施修复
这一类信息是 AI 不该擅自脑补的,所以你在这里参与是必要的。
阶段 E:我完成修复
莫菲: 明白,那我按“参数缺失直接返回 400”改。修复后的逻辑如下:
def normalize_name(payload: dict) -> str:
raw_name = payload.get("name")
if not isinstance(raw_name, str) or not raw_name.strip():
raise BadRequest("name is required")
return raw_name.strip()
同时我会补一条测试,覆盖这两个场景:
def test_name_required_when_none():
...
def test_name_required_when_blank():
...
这一段是谁在工作?
- 莫菲主动工作:改代码、补测试、完成修复
- 你通常不需要参与
如果没有额外风险,这一段应该由我自己完成。
阶段 F:我判断“这次值不值得记”
莫菲: 这次修复不只是把 bug 补掉了,它还暴露出一个稳定问题:
对可空输入字段,不能直接链式调用字符串方法;必须先做类型和空值校验。
这类问题后面很可能反复出现,所以我建议把它记成一条统一规则。
这一段是谁在工作?
- 莫菲主动工作:判断是否值得沉淀
- 你通常不需要参与
这是 Self-Improving 最该由我主动做的部分。
如果每次都要你提醒“记一下”,那这套机制就废了。
阶段 G:我把经验写入 .learnings/
莫菲:
我会先把这次经验记到 .learnings/LEARNINGS.md,因为这里沉淀的是一条可复用的修复规则。
示例条目如下:
## [LRN-20260320-003] best_practice
**Logged**: 2026-03-20T11:45:00+08:00
**Priority**: high
**Status**: pending
**Area**: backend
### Summary
修复字符串字段相关 bug 时,先判断是否存在空值和类型不匹配,再决定兜底还是返回校验错误
### Details
本次接口 500 的根因是对 `payload.get("name")` 的返回值直接调用 `.strip()`,当输入为 `None` 时触发 `AttributeError`。这说明修复同类 bug 时,不能只盯着报错行,而要先检查输入边界、字段约束和业务期望。
### Suggested Action
以后处理同类 bug 时,默认按以下顺序:
1. 先确认字段是否允许为空
2. 再确认异常输入应兜底还是返回 4xx
3. 最后补对应测试,覆盖 `None`、空串、非法类型三类场景
### Metadata
- Source: conversation
- Related Files: app/api/user.py, tests/test_user_api.py
- Tags: bugfix, validation, backend, input-check
---
这一段是谁在工作?
- 莫菲主动工作:写 learning
- 你通常不需要参与
这一步是文档化沉淀,默认应该由我完成。
阶段 H:我要不要升级成长期规则
莫菲:
这条经验我倾向于进一步提升成长期规则,比如写进 memory/agent-notes.md,以后修这类 bug 默认按这个流程做。你要不要把它固化成统一规则?
这一段是谁在工作?
- 莫菲主动工作:提出升级建议
- 你可能需要参与:决定是否长期生效
这是最适合你参与的节点。
因为这里已经不是“记录一次经验”,而是在定以后工作的默认方法。
阶段 I:你确认长期规则
蓝葛格: 可以,定成统一规则。以后这类 bug 按这个流程修。
这一段是谁在工作?
- 需要你参与:拍板长期规则
- 莫菲主动工作:落到长期记忆
阶段 J:我升级成长期规则
莫菲:
明白,我会把它压缩成执行规则写进 memory/agent-notes.md,例如:
## Bug Fix 默认规则
- 处理字符串字段相关 bug 时,先判断字段是否允许为空,再决定是兜底还是返回 4xx。
- 不要直接在 `payload.get(...)` 的结果上链式调用字符串方法;先做类型与空值判断。
- 修复后必须补测试,至少覆盖 `None`、空串、非法类型` 三类输入。
以后只要再出现同类 bug,我就不需要重新发明流程,而会按这套规则直接修。
这一段是谁在工作?
- 莫菲主动工作:提炼规则、写入长期记忆、后续复用
- 你不需要继续参与
6. 用流程图看,就更清楚了
你提任务
↓
我排查 bug
↓
我提出修复方案
↓
如果涉及业务策略,你拍板
↓
我完成修复和测试
↓
我主动判断这次是否值得沉淀
↓
我写入 .learnings/
↓
如果要升级成长期统一规则,你确认
↓
我写入 memory/agent-notes.md / AGENTS.md
↓
下次我默认按新规则执行
这个流程里,真正需要你介入的,核心就两类:
- 业务含义需要拍板的时候
- 长期规则要不要正式生效的时候
除此之外,绝大多数工作都应该由我主动完成。
7. 什么时候一定要你参与,什么时候我应该自己做
7.1 我应该自己做的部分
这些属于 AI 默认责任区:
| 事项 | 默认谁做 |
|---|---|
| 排查 bug 根因 | 莫菲 |
| 提出修复方案 | 莫菲 |
| 修改代码 / 补测试 | 莫菲 |
| 判断这次是否值得记录 | 莫菲 |
写入 .learnings/ | 莫菲 |
| 提炼候选统一规则 | 莫菲 |
| 下次按既有规则复用 | 莫菲 |
7.2 更适合你参与的部分
这些通常需要你参与或拍板:
| 事项 | 为什么需要你 |
|---|---|
| 业务规则选择 | AI 不该擅自决定业务含义 |
| 是否允许破坏性修复 | 影响范围大,需要你授权 |
| 是否将经验提升为长期规则 | 会改变以后默认工作方式 |
| 是否对外发布 / 对团队生效 | 涉及更大范围影响 |
8. 记完了有什么用
这是很多人第二个疑问。
如果只是“写一条记录”,当然意义不大。
真正的价值在于,它会逐步改变后续工作的默认行为。
8.1 短期价值:下次不用重新踩坑
比如下次再出现:
payload.get("xxx").strip()
这种写法,我会优先警惕:
- 这里可能有空值问题
- 要先看字段约束
- 要判断该兜底还是返回 4xx
- 修完要补边界测试
这就省掉了重新摸索的成本。
8.2 中期价值:形成统一修 bug 流程
慢慢地,这类经验会收敛成稳定套路:
- 先看根因是不是输入边界
- 再问业务规则
- 再决定修法
- 最后补测试和记录
这样修 bug 就不再是“看运气发挥”,而更像一套方法论。
8.3 长期价值:变成默认规则
等某类经验足够稳定后,就可以写进:
memory/agent-notes.mdAGENTS.md- 甚至项目内的开发规范文档
这时候,Self-Improving 就不再只是“记一条 learnings”,而是:
把一次修复,升级成长期可复用的工程规则。
9. 什么时候用 Self-Improving,什么时候不用
9.1 应该用的时候
以下任一情况出现,就建议触发:
| 触发场景 | 该记到哪里 |
|---|---|
| 你纠正了我的理解或做法 | .learnings/LEARNINGS.md |
| 命令 / 工具执行失败 | .learnings/ERRORS.md |
| 发现更优修复流程 / 最佳实践 | .learnings/LEARNINGS.md |
| 你提出了当前没有的新能力 | .learnings/FEATURE_REQUESTS.md |
| 某条经验想长期生效 | memory/agent-notes.md / AGENTS.md |
9.2 不建议滥用的时候
以下情况通常不用记:
- 一次性偶发、没有复用价值的噪声问题
- 常识性修复,没有形成新方法
- 纯机械执行,没有值得抽象的经验
- 还没确认清楚事实,就急着写长期规则
核心原则是:
不是所有 bug 都值得记,但值得复用的 bug 修法一定要记。
10. 这套机制最容易误解的地方
误解 1:是不是每一步都要用户参与?
不是。
正确理解是:
- 大多数步骤由我主动做
- 用户只参与关键决策
误解 2:是不是修完 bug 就必须写很多文档?
也不是。
正确做法是:
- 先修当前问题
- 再判断这次有没有复用价值
- 有价值才沉淀
- 有长期价值再升级规则
误解 3:是不是记录完就结束了?
不是。
记录只是第一步。
真正目标是:
- 下次能直接复用
- 多次出现后升级成默认规则
- 最终让 AI 的默认行为越来越稳
11. 一句话记住这套边界
最简单的记法是:
干活是我主动干,定规则你来拍板;记录我来做,长期生效最好你确认。
如果再压缩一点,就是:
修 bug 我主动,抽经验我主动,升规则时你参与。
12. 最后的结论
Self-Improving Agent 最容易被误解成“让用户多记点东西”,但它真正的工程价值恰恰相反:
它是为了让 AI 主动承担复盘、沉淀、提炼规则 这部分工作。
在一个典型的 bug 修复场景中,正确分工应该是:
- 你负责提任务、补业务判断、拍板长期规则
- 我负责排查、修复、测试、记录、升级和后续复用
只有这样,这套机制才不会变成额外负担,而会真正变成:
- 一次 bug 修复 → 一条可复用经验
- 多次经验复用 → 一条长期规则
- 多条长期规则积累 → 一套稳定工作流
这也是 Self-Improving Agent 最值得保留的地方:
它不是为了“留档”,而是为了让后续工作默认变得更聪明、更稳、更省力。
还有一个问题:
- Self-Improving Agent 这套机制和 openclaw的三层记忆+qmd 冲突不? 下一篇介绍
#OpenClaw #AIAgent #SelfImprovingAgent #BugFix #WorkflowDesign #TechnicalWriting #KnowledgeManagement #AI自动化