Agent持续演进
预计学习时间:50分钟
并非所有场景都需要训练模型。通过记忆系统、经验沉淀和技能库,Agent 可以在不更新权重的情况下持续改进——OpenClaw 的 Markdown 记忆与 Hermes 的 Learning Loop 代表了两种典型路径。
为什么需要「无训练」的持续改进
Agentic RL 效果好,但门槛高:需要可交互环境、奖励函数设计、大量算力。多数团队更现实的路径是:
| 路径 | 成本 | 见效速度 | 适用场景 |
|---|---|---|---|
| 工程化记忆与技能 | 低 | 快(当次/下次会话) | 个人助手、编码 Agent、垂直客服 |
| Prompt / 工具 Schema 迭代 | 低 | 中(需 benchmark 回归) | 所有 Agent |
| RAG 知识库扩充 | 中 | 中 | 领域问答、企业知识 |
| Agentic RL 微调 | 高 | 慢(需训练周期) | 复杂决策、大规模部署 |
本节聚焦前三种:让 Agent 从使用中学习,而不动模型参数。
经验沉淀的核心模式
无论 OpenClaw 还是 Hermes,「越用越好」都依赖同一抽象:
执行任务 → 记录轨迹 → 提取模式 → 持久化存储 → 下次任务检索注入
差异在于:谁写记忆、写什么格式、何时触发更新。
三种记忆类型
| 类型 | 存什么 | 生命周期 | 示例 |
|---|---|---|---|
| 情景记忆(Episodic) | 单次任务的完整轨迹 | 短期,可归档 | 本次改 bug 试了哪几步 |
| 语义记忆(Semantic) | 事实、偏好、项目约定 | 长期 | 用户喜欢用 pytest、项目用 monorepo |
| 程序记忆(Procedural) | 可复用的工作流/技能 | 长期,可迭代 | 「发布前检查清单」Skill |
OpenClaw 式记忆:人工可读的文件系统
OpenClaw 将记忆存为纯 Markdown 文件,透明、可编辑、可版本控制。
核心文件
| 文件 | 作用 |
|---|---|
SOUL.md | Agent 人格、语气、行为边界 |
USER.md | 用户画像、偏好、常用上下文 |
MEMORY.md | 跨会话持久笔记,Agent 主动整理 |
skills/ | 人工编写的可复用技能(工作流说明) |
工作机制
- 每次会话启动时,框架将上述文件注入 system context
- Agent 执行任务过程中,可将重要信息写回 MEMORY.md
- 通过 SQLite 向量 + 关键词检索,在长记忆中查找相关内容
- Skills 从 workspace / personal / shared / plugin 多作用域加载
优势与局限
优势:完全透明,开发者可直接编辑纠错;无额外训练成本;适合「人主导、Agent 辅助」的工作流。
局限:记忆更新依赖 Agent 自觉写入或人工维护;不会自动从失败中提炼技能;跨会话记忆需手动配置 MEMORY.md 才会稳定生效。
实践:手动沉淀失败与成功经验
即使不用 OpenClaw,也可在任意 Agent 项目中复用此模式:
# MEMORY.md
## 成功经验
- 2025-06-18: 修改 Next.js 路由时,需同时更新 Sidebar.tsx 和 page.mdx,否则导航 404
- 部署前运行 `npm run build` 比 `npm run dev` 更能发现 MDX 语法错误
## 失败教训
- 不要在 tool description 里写负面约束(「不要用 X」),Qwen 反而会频繁调用 X
- Bash 工具输出超过 8k 字符时应截断,否则撑爆上下文导致后续 tool call 失败
## 项目约定
- 提交信息用中文,focus on why not what
- 新页面必须同步更新 Sidebar.tsx
OpenClaw 的 MEMORY.md 需要 Agent 或用户主动维护。如果从不写入,跨会话「越用越好」的效果有限——这是与 Hermes 自动 Learning Loop 的核心区别。
Hermes 式 Learning Loop:自动技能提炼
Hermes Agent(Nous Research)将自我改进作为架构中心,形成 observe → distill → reuse → refine 闭环。
Learning Loop 流程
1. Observe 跟踪多步任务轨迹(每次 tool call、分支、用户纠正)
2. Distill 相似任务成功 3+ 次后,自动生成 SKILL.md
3. Reuse 下次匹配任务时,渐进式加载技能(先看描述,命中再读全文)
4. Refine 使用中根据反馈 patch 技能;每 15 个任务 Curator 整理归档
与 OpenClaw Skills 的关键区别
| 维度 | OpenClaw Skills | Hermes Skills |
|---|---|---|
| 来源 | 人工编写 | 从完成任务中自动提取 |
| 格式 | Markdown 工作流说明 | SKILL.md(兼容 agentskills.io 标准) |
| 更新 | 人工编辑 | Agent 用 skill_manage 自行 patch |
| 加载 | 全量或按 scope | 渐进式披露(描述 ~3k tokens,命中才加载全文) |
| 用户纠正 | 写入 MEMORY(需配置) | 纳入 episodic memory,影响下次 distill |
渐进式技能加载
Hermes 将所有技能描述保持在约 3k tokens 以内;仅当任务匹配时才加载完整 SKILL.md。这样技能库增长不会线性推高每次请求的 token 成本。
# 技能目录 ~/.hermes/skills/
deploy-check/SKILL.md # 仅 name+description 常驻上下文
code-review/SKILL.md # 命中「review PR」时才加载全文
data-pipeline/SKILL.md
可选:轨迹导出用于 RL
Hermes 集成 Atropos RL 管道,可将交互轨迹导出为 ShareGPT 格式,用于 DPO/RLHF 微调。这意味着 Learning Loop 是无训练改进的主路径,同时为将来训练留下数据资产。
不训练模型的完整改进方案
方案一:会话内自我反思(Session Reflection)
任务结束后,用一次额外 LLM 调用总结本次成败,写入记忆文件:
def reflect_and_save(trajectory, memory_path="MEMORY.md"):
reflection_prompt = f"""
分析以下 Agent 任务轨迹,提取:
1. 做对了什么(可复用的模式)
2. 做错了什么(需避免的坑)
3. 下次类似任务的建议
轨迹摘要:
{summarize_trajectory(trajectory)}
"""
reflection = llm.generate(reflection_prompt)
append_to_memory(memory_path, reflection)
成本低、实现简单,适合每次重要任务后自动触发。
方案二:失败驱动的规则沉淀
监控 tool call 失败率,自动记录高频错误模式:
| 失败类型 | 自动沉淀为 |
|---|---|
| 同一工具连续 3 次参数错误 | 该工具的参数示例补充到 Schema description |
edit_file 匹配失败 | MEMORY.md 记录「该文件需先 read 再 edit」 |
| 上下文超长截断 | 调低单次 tool_result 最大长度 |
方案三:Benchmark 回归 + Prompt 版本管理
将 6.1 benchmark 与 Prompt 版本绑定:
- 每次修改 system prompt / 工具描述 / AGENTS.md 后跑回归集
- 对比 task 完成率、tool call 准确率、平均轮数
- 仅当指标不降时才合并到生产配置
这比「感觉变好了」更可靠,且完全不涉及模型训练。
方案四:RAG 增强领域知识
对静态领域知识(API 文档、内部规范、历史工单),用向量库检索注入上下文。Agent 本身不变,但每次看到的知识更新,等效于「变聪明了」。
方案五:用户反馈闭环
用户对回复点 👎 → 记录 (query, trajectory, correction)
→ 定期人工审核 → 写入 MEMORY / 更新 Skill
→ 或积累为 SFT 数据集(将来可选微调)
OpenClaw vs Hermes:如何选择
| 你的需求 | 推荐 |
|---|---|
| 完全掌控记忆内容,愿意手动维护 | OpenClaw 式 MEMORY.md |
| 希望 Agent 自动从完成任务中学习技能 | Hermes Learning Loop |
| 编码项目,团队共享约定 | AGENTS.md / CLAUDE.md(OpenCode/Claude Code) |
| 企业合规,记忆必须可审计可编辑 | Markdown 文件 + Git 版本管理 |
| 长期要走向模型微调 | Hermes 轨迹导出 + Agent微调 |
两条路径并不互斥:可用 OpenClaw 式透明记忆做「人工审核层」,用 Hermes 式自动 distill 做「候选技能生成」,审核通过后再写入正式 Skills 目录。
与 Agent 微调的关系
| 手段 | 改什么 | 何时用 |
|---|---|---|
| 记忆 / Skills / Prompt | 上下文与行为引导 | 立刻、低成本、可逆 |
| 拒绝采样 SFT | 用高质量轨迹蒸馏到大模型 | 有 RL 轨迹、想迁移到更大模型 |
| Agentic RL | 模型权重 | 有环境+奖励+算力,需策略级优化 |
工程上推荐路径:先靠记忆和 Prompt 跑到 benchmark 瓶颈 → 积累轨迹 → 再考虑 SFT 或 Agentic RL。跳过前两步直接训练,往往事倍功半。
小结
让 Agent 越用越好,不一定需要训练模型:
- 透明记忆(SOUL/USER/MEMORY/AGENTS.md)—— 人可读、可编辑、零成本
- 自动技能提炼(Hermes Learning Loop)—— 从成功任务中生成可复用 SKILL.md
- 会话反思与失败沉淀—— 任务结束后总结,写入持久记忆
- Benchmark 回归—— 量化 Prompt 改动效果,避免「感觉更好」的错觉
下一节可继续学习 Agent微调,在工程优化触及天花板后,通过 Agentic RL 从权重层面提升决策能力。