Agent 自学习与模式识别
Agent 自学习与模式识别
学习目标
本章介绍 AI Agent 系统如何实现”从经验中学习”——不仅完成当前任务,还能将成功的模式存储下来,在未来的类似场景中快速复用,同时避免灾难性遗忘。
核心概念
为什么 Agent 需要自学习
静态 Agent 每次从零开始处理任务,即使之前遇到过完全相同的问题。自学习 Agent 通过以下三个层次积累经验:
- 模式匹配:识别”这个场景我以前见过”,直接复用成功的策略
- 轨迹学习:记录 Agent 的完整决策路径(做了什么 → 结果如何),从中提取可泛化的规则
- 神经适应:将经验编码为可调用的权重或向量,实现亚毫秒级的模式检索
通用学习范式:RETRIEVE → JUDGE → DISTILL → CONSOLIDATE
这是一个从任何 Agent 系统中抽象出的通用学习管线:
| 阶段 | 职责 | 类比 |
|---|---|---|
| RETRIEVE | 从历史记忆中检索与当前任务相似的模式 | ”这个问题我以前解决过吗?“ |
| JUDGE | 评估 Agent 的决策结果是成功还是失败 | ”上次的方法效果好吗?“ |
| DISTILL | 从成功/失败中提取可复用的关键模式 | ”上次做对了什么?做错了什么?“ |
| CONSOLIDATE | 将新模式整合到长期记忆中,防止覆盖旧知识 | ”怎么记住新知识的同时不忘旧知识?“ |
自学习的三种模式
1. 模式匹配(Pattern Matching)
最简单的形式:将成功经验存储为键值对或向量,下次遇到相似场景时检索。
关键组件:
- 模式存储:向量化(支持语义相似度检索)或键值存储(精确匹配)
- 检索策略:向量相似度搜索(Top-K)、关键词匹配、标签过滤
- 质量评分:对存储的模式进行质量打分,优先使用高评分模式
优势:实现简单,检索快速。 陷阱:模式过于具体时无法泛化到新场景。需要在”具体”与”通用”之间找到平衡。
2. 轨迹学习(Trajectory Learning)
不仅存储”答案”,还存储 Agent 的完整决策路径:
任务: "修复认证 bug"→ 轨迹: [搜索 auth 模块] → [发现 TOCTOU 竞态] → [添加 Promise 缓存] → [通过测试]→ 评判: success (score: 0.95)→ 提炼: "TOCTOU 竞态 → 使用 Promise 缓存而非锁"关键组件:
- 轨迹记录:每个 Agent 执行步骤的结构化日志
- 结果关联:将轨迹与最终结果(成功/失败、耗时、质量评分)关联
- 规则提取:从多条成功轨迹中归纳通用规则
优势:可以学习”怎么做”而不仅是”做什么”。 陷阱:轨迹数据量大,存储和检索成本高。需要定期压缩和淘汰低价值轨迹。
3. 神经适应(Neural Adaptation)
将经验编码为神经网络权重或向量嵌入,实现亚毫秒级检索:
- LoRA(Low-Rank Adaptation):对大语言模型进行小规模微调,仅更新低秩矩阵
- Elastic Weight Consolidation(EWC):在学习新知识时,对影响旧知识的权重施加惩罚,防止灾难性遗忘
- Mixture of Experts(MoE):将不同领域的经验分配给不同的”专家”网络,按任务类型路由
优势:检索速度极快(<0.05ms),可以处理非结构化模式。 陷阱:训练成本高,需要足够的样本量。模型容量有限,专家数量受约束。
防止灾难性遗忘
这是自学习系统的核心挑战:学习新知识时,如何不遗忘旧知识?
策略对比:
| 策略 | 原理 | 适用场景 | 代价 |
|---|---|---|---|
| EWC(弹性权重巩固) | 对重要权重施加保护,阻止大幅修改 | 参数化模型 | 需要 Fisher 信息矩阵 |
| 经验回放 | 定期混合旧样本与新样本一起训练 | 向量存储 | 存储空间翻倍 |
| 模块化隔离 | 不同领域的经验存储在不同模块中 | MoE 架构 | 路由复杂度增加 |
| 渐进式暴露 | 新知识以小剂量逐步融入 | 在线学习 | 学习速度慢 |
智能路由:三级模型选择
自学习系统还可以帮助选择最优的执行路径:
通过学习历史任务的复杂度与最优执行路径的映射关系,系统可以在新任务到来时快速判断应该使用哪种处理方式,避免过度消耗资源。
问题与规避
陷阱 1:模式过拟合
问题:存储的模式过于依赖特定场景的细节,无法泛化到新任务。
规避:在 DISTILL 阶段添加泛化检查——如果提取的模式包含具体文件名、变量名或特定值,则拒绝存储或要求重写为通用形式。
陷阱 2:遗忘曲线
问题:随着新模式不断写入,旧模式被覆盖或排名下降。
规避:使用 CONSOLIDATE 阶段定期进行记忆整理——合并相似模式、淘汰过时模式、提升高频使用模式的优先级。
陷阱 3:学习延迟
问题:新写入的模式需要”冷却期”才能生效,Agent 在学习后立即遇到相同场景时无法复用。
规避:在会话级别维护热缓存(hot cache),新学习立即对当前会话可见;后台异步写入持久存储。
陷阱 4:虚假模式
问题:偶然成功的策略被错误地记录为”可靠模式”。
规避:JUDGE 阶段要求多次验证——同一模式至少在 2-3 次独立场景中都成功,才标记为”可信”。
设计取舍
向量化 vs 键值存储
| 维度 | 向量化存储 | 键值存储 |
|---|---|---|
| 检索能力 | 语义相似度,支持模糊匹配 | 精确匹配 |
| 延迟 | 依赖索引(HNSW 可达亚毫秒) | O(1) |
| 存储成本 | 较高(384 维向量 × 条目数) | 低 |
| 泛化能力 | 强 | 无 |
推荐:两者结合。高频精确匹配走键值路径,模糊场景走向量检索。
在线学习 vs 批量学习
| 维度 | 在线学习(每次任务后立即学习) | 批量学习(定期整理后学习) |
|---|---|---|
| 响应速度 | 即时 | 延迟 |
| 噪声抵抗 | 弱(单次失败也会写入) | 强(多场景统计后决定) |
| 资源消耗 | 持续 | 集中 |
推荐:在线学习写入热缓存(快速可见),批量学习写入持久存储(质量保证)。
参考来源
- ReAct: Synergizing Reasoning and Acting in Language Models, Yao et al., 2022
- Overcoming Catastrophic Forgetting in Neural Networks, Kirkpatrick et al., 2017 (EWC)
- Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer, Shazeer et al., 2017
补充:Agno 的 LearningMachine 六存储协调器
来源:Agno
libs/agno/agno/learn/machine.py,2026-05-30
六存储统一协调
Agno 的 LearningMachine 协调 6 种学习存储,每种独立配置:
| 存储 | 捕获内容 | 范围 | 配置类型 |
|---|---|---|---|
| User Profile | 结构化字段(姓名、偏好) | 每用户 | bool / Config / Store |
| User Memory | 非结构化观察 | 每用户 | bool / Config / Store |
| Session Context | 目标、计划、进度、摘要 | 每会话 | bool / Config / Store |
| Entity Memory | 外部事物事实、事件、关系 | 可配置命名空间 | bool / Config / Store |
| Learned Knowledge | 可复用模式、最佳实践 | 可配置命名空间 | bool / Config / Store |
| Decision Log | 决策追踪(为什么选了 A 而非 B) | 每用户/会话 | bool / Config / Store |
每种存储接受三种配置输入:
bool:True启用默认配置,False禁用Config:自定义配置(如模型、提示词、数据库)Store:完全自定义的 LearningStore 实例
一行启用全部学习
# 伪代码:最简学习 Agentagent = Agent( model=OpenAIResponses(id="gpt-4o"), db=PostgresDb(db_url="..."), learning=True, # 一行启用全部 6 种学习存储)Curator 记忆维护
Curator 负责后台记忆维护:
- 合并重复记忆
- 淘汰过期记忆
- 去重和关联
自定义存储扩展
LearningMachine 支持 custom_stores 参数,接受任何实现 LearningStore 协议的类。这使得用户可以添加项目特定的学习存储类型,而不需要修改框架。
# 伪代码:自定义存储class BugPatternStore(LearningStore): def recall(self, query: str) -> str: ... def process(self, messages: list) -> None: ... def get_tools(self) -> list: ...