Lazy loaded image
Agent丨如何让 Agent 具备自我学习和经验沉淀的能力?
字数 5616阅读时长 15 分钟
2026-5-20
type
Post
status
Published
date
May 20, 2026
slug
agent45
summary
tags
Agent
category
icon
password

摘要

让 Agent “自我学习”,在工程上通常不是指它在线修改大模型权重,而是让它在执行任务后,把有效经验沉淀为可检索、可审计、可复用的外部资产:记忆、规则、技能、工具用法、失败案例、测试反馈、知识库条目和策略约束。Reflexion 的核心思想就是“不更新权重”,而是让 Agent 根据任务反馈生成语言化反思,并存入 episodic memory,用于后续决策;Voyager 则把可复用能力沉淀为可检索的 executable skill library;Generative Agents 通过 memory、reflection、planning 构建持续行为一致性。(arXiv)
在生产级 Agent 系统里,自我学习能力可以概括为一句话:
Agent 每次执行任务后,不只是返回答案,还要把“这次为什么成功、为什么失败、以后遇到类似任务该怎么做”转化为长期可用的工程资产。

1. 为什么 Agent 需要“经验沉淀”,而不只是上下文窗口?

普通 Agent 的问题是:每个会话都像“失忆”。用户上一轮纠正过的命令、项目里踩过的坑、工具调用失败原因、代码库特有约定,下一次又可能重复犯错。Claude Code 文档也明确提到,每个 session 都从新的 context window 开始,因此需要 CLAUDE.md 和 Auto Memory 两类机制跨会话保留知识。(Claude API Docs)
成熟 Agent 的共同方向是:把经验分层保存。Claude Code 使用 CLAUDE.md.claude/rules/、Auto Memory、Skills 和 Hooks;OpenCode 使用 AGENTS.md、Agents/Subagents、Skills、Permissions、Compaction;OpenClaw 使用 MEMORY.md、daily notes、DREAMS.md、dreaming consolidation 和 memory-wiki。(Claude API Docs)
这说明一个关键事实:
Agent 的长期能力不是来自“把所有历史都塞进 prompt”,而是来自“选择性记录、结构化沉淀、按需检索、持续纠错”。

2. “自我学习”到底学什么?

Agent 经验通常可以分成六类。
经验类型
示例
存储位置建议
是否每次加载
用户偏好
用户喜欢 TypeScript、回答要先给结论
用户级 memory / profile
部分加载
项目约定
使用 pnpm、不允许直接 push main、API 位于 src/api
AGENTS.md / CLAUDE.md / project memory
经常加载
调试经验
某个测试失败需要先启动 Redis
Auto Memory / daily note / debugging.md
检索加载
工具经验
某 MCP API 参数格式、某脚本执行顺序
tool memory / skill
按需加载
流程技能
发布流程、数据库迁移流程、PR review 流程
Skill / command / workflow
按需加载
失败反思
“上次误删文件,因为没先读 diff”
reflection memory / safety rule
条件加载
Claude Code 的 Auto Memory 会让 Claude 在工作中保存 build commands、debugging insights、architecture notes、code style preferences、workflow habits 等信息,并按项目落到本地 memory 目录;它不是每次都保存,而是判断未来是否有用。(Claude API Docs)
OpenClaw 也采用类似分层:MEMORY.md 保存长期、精炼、可启动加载的事实;memory/YYYY-MM-DD.md 保存 daily notes 和运行上下文;系统会周期性把 daily notes 中有价值的信息提炼回 MEMORY.md,并提醒 MEMORY.md 过大时会被截断,应把细节移回日记层。(OpenClaw)

3. 参考成熟项目后的总体架构

一个具备自我学习能力的 Agent,不应该只有“执行器”,还需要“经验闭环”。
这里最重要的不是“写入向量库”,而是 写入前的判定、分类、压缩、溯源和权限控制。LangGraph 的长期记忆使用 namespace/key 组织 JSON 文档,强调按用户、组织等 namespace 分层;LlamaIndex 的 Memory 会把超出短期窗口的消息 flush 到长期 memory block,并在检索时合并短期和长期记忆。(LangChain 文档)

4. 经验沉淀的四层存储模型

生产中可以采用四层结构。

第一层:Session Trace,完整执行轨迹

保存当前任务的完整过程:
用户目标、计划、工具调用、参数、返回值、错误、重试、最终结果、测试输出、用户反馈。
这层不直接进入 prompt,而是用于审计、复盘和经验提取。

第二层:Episodic Memory,事件记忆

保存“某次任务发生了什么”:
2026-05-25:在 xxx 项目中运行 npm test 前必须先启动 Redis,否则 API tests 会失败。
Reflexion 使用的就是这种思路:根据反馈生成反思文本,存入 episodic memory buffer,让后续 trial 决策更好。(arXiv)

第三层:Semantic Memory,稳定知识

保存可复用、去场景化的知识:
该项目 API handler 位于 src/api/handlers/
该项目统一使用 pnpm,不使用 npm。
该团队 PR 前必须运行 lint + test。
Claude Code 建议把构建命令、约定、项目布局、“always do X” 这类事实放入 CLAUDE.md,并提醒指令要具体、避免冲突。(Claude API Docs)

第四层:Procedural Memory / Skill,流程技能

保存“遇到某类任务时如何做”:
数据库迁移流程。
线上问题排查流程。
新增 API endpoint 的标准步骤。
浏览器测试流程。
Claude Code 的 Skills 使用 SKILL.md,其中 YAML frontmatter 的 description 帮助 Claude 判断何时加载技能;技能还可以通过命令动态注入上下文,例如运行 git diff HEAD 后再让模型总结风险。(Claude API Docs)
Letta Code 也把 Skills 定义为按需加载的参考指南,而不是永久塞进上下文;它还强调 skill 适合承载 API patterns、testing workflows、deployment procedures 等专门任务知识。(Letta Docs)

5. 从源码/配置看成熟 Agent 怎么做

5.1 Claude Code:CLAUDE.md + Auto Memory + Rules + Skills + Hooks

Claude Code 的记忆体系很有参考价值:CLAUDE.md 用于人类写的持久指令;Auto Memory 用于 Claude 自己基于纠正和偏好写笔记;.claude/rules/ 可以把规则拆成多个文件并按路径生效,减少上下文噪声;Skills 则用于任务级、按需加载的能力。(Claude API Docs)
一个典型项目可以这样组织:
CLAUDE.md 适合沉淀稳定事实:
路径级规则适合降低污染:
Claude Code Hooks 则适合作为经验闭环的自动触发器。Hooks 会在 session、turn、tool call 等生命周期点执行;例如 PreToolUse 可以在工具调用前检查危险命令并阻断。(Claude API Docs)
可以借鉴这个机制,在 PostToolUseSessionEnd 后触发“经验提取器”:

5.2 OpenCode:AGENTS.md + Agents + Skills + Permissions + Compaction

OpenCode 使用 AGENTS.md 提供项目级自定义指令,/init 会扫描仓库的重要文件,并生成或更新简洁的项目指导,包括 build/lint/test 命令、验证步骤、架构、项目约定和 gotchas;官方也建议把项目的 AGENTS.md 提交到 Git。(OpenCode)
OpenCode 还支持 primary agents 和 subagents。primary agent 是主对话助手,subagent 是可被调用的专门助手;工具权限可以按 agent 配置,例如 Plan 只读,Build 可执行修改。(OpenCode)
这对“经验沉淀”的启发是:不要让一个 Agent 既负责执行、又负责反思、又负责写长期记忆。更稳妥的做法是拆成多个角色:
OpenCode 的 Skills 也是按需加载的 reusable instructions;OpenCode 文档强调 agent 能看到可用 skills,并在需要时通过 native skill tool 加载完整内容。(OpenCode)

5.3 OpenClaw:Markdown 记忆 + Daily Notes + Dreaming + Wiki

OpenClaw 的记忆设计非常直接:模型“只记得保存到磁盘上的东西”,没有隐藏状态;长期记忆在 MEMORY.md,运行上下文在 memory/YYYY-MM-DD.md,可选的 DREAMS.md 用于 dreaming sweep summaries。(OpenClaw)
OpenClaw 还特别强调 action-sensitive memory:如果某条记忆会影响未来行动,就必须记录适用条件、过期条件、禁止动作、来源/owner 等,否则容易把“曾经允许”误解成“永远允许”。(OpenClaw)
这点对生产系统极其重要。经验记忆不能只写:
应该写成:
OpenClaw 的 memory-wiki 插件进一步把 durable memory 编译成带 provenance、confidence、contradictions、open questions 的知识 vault,这说明记忆系统不能只是“Markdown 堆”,还需要知识治理层。(OpenClaw)

6. 生产级自我学习系统的核心模块

6.1 Trace Logger:记录事实,不记录幻想

Trace 是经验提取的原材料。至少要记录:
字段
说明
task_id
任务 ID
user_goal
用户目标
plan
Agent 计划
tool_calls
工具名、参数、返回、耗时
files_changed
修改文件
verification
测试、lint、人工反馈
result
成功/失败/部分成功
error_type
工具失败、参数错误、理解错误、权限错误
timestamp
时间
source_agent
哪个 agent 产生
confidence
可置信度
OpenClaw 社区 issue 里也提到,多 Agent 向共享 RAG 写入知识时,需要记录 agentIdworkspacesessionIdlearnedFromcreatedAt 等 metadata,用于追踪哪个 Agent 贡献了哪条知识。(GitHub)

6.2 Experience Extractor:从轨迹中提取经验候选

经验候选不等于立即写入长期记忆。可以让一个专门的 learner agent 生成结构化候选:

6.3 Memory Gate:判断是否值得保存

保存标准建议采用“五问法”:
未来是否会复用?是否足够稳定?是否有证据支撑?是否有明确作用域?是否存在隐私、安全或授权风险?
不满足这些条件,只进日志,不进长期记忆。

6.4 Consolidator:压缩、去重、合并、降噪

长期记忆最怕膨胀和冲突。Claude Code 文档提醒,指令冲突时模型可能随机选择,应该定期移除过时或冲突指令。(Claude API Docs)
Consolidator 的职责是:
把多条相似经验合成一条稳定规则;
把临时事实留在 daily notes;
把流程型经验升级成 skill;
把冲突经验标记为待人工确认;
把过期经验降级或删除。

6.5 Retriever:按任务动态召回

不要把所有记忆都塞进 prompt。MemGPT 的核心洞察是:上下文窗口是有限资源,可以借鉴操作系统虚拟内存,通过函数调用在上下文和外部存储之间 page in/page out。(arXiv)
所以检索策略应按任务动态选择:
当前任务
召回内容
改 API
API rules、相关代码历史、测试命令
修 CI
最近失败日志、CI gotchas、部署 skill
生成 PR
commit 规范、review checklist
调用工具
工具 schema、历史失败参数、权限边界
跨会话继续任务
上次 session summary、open decisions

7. 经验如何从“记忆”升级成“技能”?

不是所有经验都应该写入 memory。流程型、可重复执行的经验应该升级成 Skill。
判断标准:
适合 Memory
适合 Skill
一个事实
一套步骤
一个偏好
一个 workflow
一个约定
一个工具使用方法
一个 debug insight
一个可复用操作流程
常驻轻量信息
按需加载的大段说明
例如,Agent 第一次学会数据库迁移流程后,不应该只写一句“迁移要小心”,而应该创建项目级 Skill:
SKILL.md
Claude Code 的 Skills 和 OpenCode/Letta 的 Skills 都体现了同一个方向:技能是可复用行为的载体,按需加载,避免长期污染上下文。(Claude API Docs)

8. 自我学习的写入链路:示例代码

下面给一个简化版 Python 设计,展示如何把任务执行结果转成经验候选,并经过 gate 后写入不同存储。
真实生产环境里,这个 MemoryGate 不应该只靠规则,还应叠加:
LLM reviewer、embedding 去重、权限策略、敏感信息扫描、人工审批、版本化 diff、回滚机制。

9. 经验沉淀和 RAG 的关系

RAG 知识库通常回答“外部世界或业务文档里有什么”;Agent 经验库回答“我以前怎么做、哪里失败、什么流程有效”。
两者可以复用同一套检索基础设施,但 metadata 必须不同。
建议把 RAG 分成三类 corpus:
Corpus
内容
检索方式
docs
产品文档、代码文档、规范
semantic + keyword
code
代码片段、接口定义、测试
hybrid + path filter
experience
Agent 经验、反思、失败案例、工具用法
semantic + metadata filter + recency
Self-RAG 的启发是:检索不应该固定发生,而应该由模型判断是否需要检索,并对检索结果和生成内容进行反思。(arXiv)

10. 自我学习的关键难点

10.1 记忆污染

最大风险是把错误经验写进长期记忆。例如某次临时绕过测试成功了,Agent 把它记成“以后都可以跳过测试”。
解决方式:
所有经验必须带 evidence、scope、confidence、created_at、expires_at;
临时经验默认不进入长期记忆;
权限相关经验必须写明 action boundary;
高影响记忆需要人工确认。

10.2 经验过期

技术栈、API、组织流程都会变。过期经验比没有经验更危险。
解决方式:
给 memory 增加 TTL;
通过 CI/test 结果反向修正记忆;
定期运行 memory doctor;
被反复检索但导致失败的经验自动降权。

10.3 上下文膨胀

Claude Code、OpenClaw、LlamaIndex 都体现了一个原则:长期信息不能无脑注入上下文。Claude Code 的 path-scoped rules 只在匹配文件时加载;OpenClaw 的 daily notes 可被检索但不会每次注入;LlamaIndex 会在短期 token 超限后 flush 到长期 memory block。(Claude API Docs)

10.4 权限和安全

经验记忆不能代替安全策略。OpenClaw 文档明确说,memory 可以保存 approval context,但不能执行 policy,硬控制要靠 approval settings、sandboxing、scheduled tasks。(OpenClaw)
这意味着:
“记得用户允许我删除临时文件”不是安全边界;
真正的边界应该由 permission、sandbox、hook、审批系统控制。
OpenCode 也支持按 agent 覆盖权限,例如允许 git *、拒绝 git push *,并让 agent 级权限与全局配置合并。(OpenCode)

11. 推荐的生产级落地方案

11.1 最小可用版本

适合单 Agent 或小团队:
流程:
每次任务结束写 trace;
trace 进入 extractor;
extractor 生成 memory candidates;
gate 判断是否保存;
reviewer 检查冲突和敏感信息;
写入 memory 或 skill;
下次任务启动时检索相关经验。

11.2 团队版

团队版需要增加:
Git 版本化 memory;
PR 审核 memory 变更;
项目级和用户级隔离;
多 Agent 贡献者 attribution;
记忆回滚;
memory eval;
过期清理任务;
安全扫描。
Letta Code 的 MemFS 就是一个值得参考的方向:它把 memory 组织为 git-backed filesystem,Agent 直接编辑 markdown 文件并 commit,从而保留完整版本历史;系统目录内容会加载到 system prompt,其他文件只通过 memory tree 可见,从而控制上下文成本。(Letta Docs)

12. 经验沉淀的评估指标

自我学习系统不能只看“记了多少”,要看“记得是否有用”。
指标
含义
Repeat Error Rate
同类错误是否下降
Task Success Rate
同类任务成功率是否提升
Memory Precision
被召回记忆中有多少确实有用
Memory Harm Rate
记忆导致错误或越权的比例
Staleness Rate
被召回但已过期的记忆比例
Context Cost
每次任务注入记忆消耗 token
Human Correction Rate
用户重复纠正次数是否下降
Skill Reuse Rate
自动生成技能被复用次数
可以设计一个简单评测:

13. 最佳实践清单

原则
说明
先记录 trace,再提取经验
不要让模型凭印象写长期记忆
记忆必须有作用域
user / project / team / org 分清楚
记忆必须有证据
没 evidence 的经验不要长期保存
长期记忆要短
细节放 daily notes 或 RAG
流程升级为 skill
不要把长流程塞进 memory
权限不靠记忆实现
用 permission、sandbox、hook 做硬控制
定期 consolidation
去重、合并、降权、删除过期项
高风险记忆人工审查
权限、生产环境、财务、隐私相关必须审
多 Agent 需要 attribution
记录 agentId、workspace、sessionId
记忆要可回滚
Git、版本号、diff、审计日志必不可少

14. 一句话总结

让 Agent 具备自我学习和经验沉淀能力,本质上是给 Agent 增加一套“经验操作系统”:
Trace 是日志,Memory 是长期状态,Reflection 是学习算法,Skill 是可复用程序,RAG 是外部知识索引,Hook/Permission 是安全内核,Evaluation 是持续改进闭环。
Claude Code、OpenCode、OpenClaw、Letta、LangGraph、LlamaIndex 和 MemGPT/Reflexion/Voyager 这些系统给出的共同答案是:不要幻想模型自己永久变聪明,而要把每次任务产生的有效反馈,转化为可验证、可检索、可版本化、可治理的外部经验资产。
回到首页