踩坑自动闭环:让AI Agent自己修复自己

? 踩坑自动闭环:让AI Agent自己修复自己
写一次踩坑记录,自动嵌入所有相关技能 —— 再也不用手动修补了
每个AI Agent开发者都经历过这样的痛苦:同一个坑踩了又踩。今天修复了图片生成的bug,明天又在另一个技能里遇到一模一样的问题。为什么?因为踩坑记录躺在memory/踩坑记录.md里睡觉,而技能文件SKILL.md并不知道它的存在。
我们需要一个机制:踩坑产生 → 自动记录 → 自动匹配 → 自动嵌入到技能中。让AI Agent拥有"自我修复"的能力,就像生物体的免疫系统一样——被感染一次,终生免疫。
本文完整揭示这套闭环系统的设计与实现。
一、痛点:踩坑记录是"死"的
典型的Agent工作流是这样的:
- 用户在对话中踩坑(比如"生成的图片里有乱码文字")
- 开发者手动排查,在
memory/踩坑记录.md里写一条记录 - 下次写新技能时不记得查踩坑记录 → 同样的坑再踩一次
核心问题:踩坑记录和技能定义是两条平行线。踩坑记录写得再详细,如果它不被自动嵌入到对应的技能提示词中,就等于没写。
更具体地说,一个Agent可能管理几十个技能(图片生成、代码审查、数据分析……),每个技能都在SKILL.md里有独立定义。当你在image_gen技能里踩了一个坑,它的修复方法应该自动出现在image_gen的技能提示里,而不是留在踩坑记录里等着发霉。
二、闭环架构:三步自动修复
我们的方案是"写一次,处处自动嵌入"。整个闭环只有三个环节:
- 踩坑产生 → 写入
memory/踩坑记录.md
在对话中遇到Bug,手动或自动追加一条踩坑记录,带上标签和描述。 - Dream定时扫描 → 匹配对应技能
每天凌晨3:06,Dream Agent扫描当天新增的踩坑条目,通过关键词 + 语义匹配,找到相关的技能。 - skill_manage patch → 嵌入SKILL.md
调用skill_manage工具,将踩坑条文以## 踩坑备忘区块的形式,patch到对应技能的头部。
下面这张流程图展示了完整的闭环:
三、核心设计:"踩坑备忘录"匹配引擎
整套系统的灵魂在于匹配引擎。Dream Agent 每天凌晨扫描时,做了这三件事:
3.1 条目筛选
读取memory/踩坑记录.md,用文件修改时间或内置时间戳筛选出当天的新增条目。每条踩坑记录的格式约定如下:
## [2026-05-10] 图片生成出现乱码文字
- **标签**: image_gen, text_rendering
- **现象**: 使用 DALL·E 生成图片时,图片中的中文文字出现乱码/方块
- **原因**: 模型对中文 CJK 字符渲染能力不足,需要改用英文描述 + 额外提示
- **修复**: 在 prompt 中添加 "所有文字使用英文,且文字内容放在引号中";同时增加 "Do not render complex Chinese characters directly" 的负面提示
- **验证**: 改动后连续5次生成均无乱码
3.2 技能匹配
利用标签匹配 + 语义相似度双重策略:
- 标签匹配:条目中的
标签字段直接对应SKILL.md中的技能名称,如image_gen→ 直接定位到 image_gen 技能块 - 语义匹配:对无标签或标签模糊的条目,用Embedding做语义匹配,找到最相关的1~3个技能
3.3 Patch 生成
匹配成功后,调用skill_manage patch工具,在对应技能的## 踩坑备忘区块中追加新条目:
## image_gen — 图片生成技能
### 能力描述
你擅长根据用户描述生成高质量图片,使用 DALL·E 或 Stable Diffusion API。……
### ⚠️ 踩坑备忘
**2026-05-10** 图片生成出现乱码文字
- 在 prompt 中添加 "所有文字使用英文,且文字内容放在引号中"
- 增加负面提示 "Do not render complex Chinese characters directly"
- 已验证:改动后连续5次生成均无乱码
(如果你在生成图片时遇到文字相关的问题,请参考以上备忘。)
Patch 操作是幂等的:如果同一踩坑已被嵌入,则跳过不重复追加。
四、真实案例:图片生成踩坑 → 自动嵌入 image_gen 技能
背景:用户让 Agent 生成一张带有中文字幕的电影海报。Agent 调用 image_gen 技能,结果生成的图片里中文字全部变成了乱码方块。
Step 1 — 踩坑记录写入
开发者在对话中发现问题后,在 memory/踩坑记录.md 中追加了一条记录(就是上面3.1节的例子)。标签明确写了 image_gen。
Step 2 — Dream 凌晨扫描
次日凌晨 03:06,Dream Agent 的 cron 任务触发:
# crontab 配置
06 3 * * * cd /home/agent && python scripts/dream_patch.py
脚本读取踩坑记录,发现当日新增条目标签包含 image_gen,直接定位到 SKILL.md 中的 ## image_gen 区块。
Step 3 — skill_manage patch
脚本构造 patch 操作:
skill_manage patch --skill image_gen --section "踩坑备忘" \
--content "**2026-05-10** 图片生成出现乱码文字\n- prompt中添加英文提示\n- 添加负面提示\n- 已验证"
执行后,SKILL.md 中 ## image_gen 区块自动出现了一个 ## 踩坑备忘 子区块,包含了完整的修复方案。
结果 — 自动免疫
一周后,另一个用户要求生成带有中文标题的图片。Agent 调用 image_gen 技能时,技能提示词中已经包含了 "⚠️ 注意:中文文字可能乱码,请用英文替代 + 添加负面提示"。Agent 自动规避了这个问题,一次都没有再踩坑。
五、Dream 调度:cron + 增量扫描
Dream 是整套系统的"心脏起搏器"。它不需要一直运行,只需要每天凌晨工作几十秒。
5.1 Crontab 定时
# 每天凌晨3:06执行踩坑扫描
06 3 * * * /usr/bin/dream scan-pitfalls --since=yesterday
# 可选:每周日全量重扫(处理跨周遗漏)
30 4 * * 0 /usr/bin/dream scan-pitfalls --full
5.2 增量扫描逻辑
核心脚本的逻辑非常简洁:
PITFALLS_FILE = "memory/踩坑记录.md"
SKILL_FILE = "SKILL.md"
def run():
# 1. 读取当日新增条目(按日期标记筛选)
new_items = get_today_new_items(PITFALLS_FILE)
# 2. 对每条记录匹配技能
for item in new_items:
skills = match_skills(item.tags, item.content)
for skill in skills:
# 3. 检查是否已嵌入(幂等)
if not already_patched(skill, item.id):
# 4. patch到SKILL.md
skill_manage_patch(skill, "踩坑备忘", item.to_markdown())
# 5. 记录已处理条目ID,防止重复
mark_processed([item.id for item in new_items])
六、踩坑记录规范:好的格式 = 好的匹配
匹配引擎的效果高度依赖踩坑记录的格式质量。推荐以下规范:
## [YYYY-MM-DD] 一句话标题
- **标签**: tag1, tag2, tag3 ← 最关键的字段,直接决定匹配
- **现象**: 出现的错误或异常表现
- **原因**: 根因分析(可选,但推荐写)
- **修复**: 如何修复的具体步骤
- **验证**: 如何确认修复有效
标签命名规范:
- 直接使用
SKILL.md中的技能名称作为标签,如image_gen、code_review、data_analysis - 如果跨多个技能,写多个标签,用逗号分隔
- 可以加辅助标签细化领域,如
image_gen, dalle, text_rendering
七、收益:为什么这套闭环值得做?
- 消除重复踩坑:同一个问题不会在多个技能中分别出现。只要一个技能修复了,所有相关技能自动同步。
- 零人工干预:从踩坑记录到技能嵌入,全程自动化。开发者只需要在踩坑时写一条好记录。
- 技能持续进化:Agent 的技能提示词随着踩坑累积而不断丰富,越用越聪明。
- 团队协作友好:团队成员各自踩坑、各自记录,最终所有修复自动汇聚到技能中。
- 可审计可回滚:每次patch都有时间戳和条目ID,可以追溯是哪次踩坑导致了技能的哪次变更。
最后的话:让AI Agent自己修复自己,不是科幻。它只需要三个简单的组件——一个踩坑记录文件、一个定时扫描脚本、一个patch工具——和一个"写一次,处处自动嵌入"的闭环思维。你可以今天就动手实现它。