会记住 ≠ 会成长。记忆只是把东西存下来,自我进化是把存下来的东西变成下次更好的自己——这篇拆的,是那条让 Agent 越用越聪明的闭环。
很多人把「给 Agent 加记忆」和「让 Agent 自我进化」当成一回事,这俩其实是两件事。记忆解决的是状态留存:上次的对话、查到的资料、用户偏好,别再丢。自我进化解决的是行为改变:Agent 从一次失败里提炼出一条规矩,下次遇到同类情况不再犯。前者是仓库,后者是仓库里的东西被反复改写、让主人越长越能干的那个过程。
这篇不重复讲记忆怎么存(那块在《AI Agent 的持久化记忆》里已经拆透),专门讲那条经验 → 洞察 → 回灌 → 更好的下一次的闭环怎么在工程里落地,以及哪些「自我进化」其实是空转。
先把边界划清楚:记忆是 noun,进化是 verb
一句话区分:记忆是名词,是 Agent 临时的或长期的「所知」;自我进化是动词,是 Agent 的「所能」随经验单调变好的机制。一个装了向量库的 Agent,如果每次都从零开始决策、从不把失败变成规则,它只是记性好,不是会学。
判断一个 Agent 有没有自我进化能力,看三件事就够了:
- 它做完一件事之后,有没有主动复盘(reflection)这步,而不只是把轨迹原样丢进库里?
- 复盘产出的结论,是不是抽象成了可跨任务复用的洞察,而不是一段只有当下用得上的流水账?
- 这些洞察在下次、甚至下一个会话执行时,有没有真的被读出来、改写决策?
三点都满足,才算进入了自我进化。只满足第一点,那叫「写了日记」;只满足前两点但从不回灌,那叫「想明白了但没改」。
实战经验:我见过不少项目把「把对话历史存进 Redis」包装成「Agent 具备学习能力」拿去汇报。这最多算记忆,离进化差着「复盘 + 抽象 + 回灌」三步。汇报可以这么讲,自己心里得有数。
四种已被论文验证的进化机制
学术界把「Agent 怎么从经验里变强」拆出了几条清晰的路子,各自解决不同场景。下面四个都有可复现的实验数据,不是拍脑袋。
技能库:把解法存成可复用的代码(Voyager)
NVIDIA 和斯坦福 2023 年的 Voyager(arXiv:2305.16291)在《我的世界》里让一个 Agent 自己学会玩:它不记住「上次怎么造了工作台」,而是把成功的操作序列提炼成一段可复用的代码(skill),存进一个技能库。下次遇到类似子目标,先查库,命中就直接调,而不是重新摸索。
Voyager 有三个模块协同:迭代式rompting 负责边做边改、技能库负责沉淀可复用解法、自动课程(automatic curriculum)负责根据已掌握技能动态出更难的任务。结果很硬:相比之前的 SOTA,它的探索效率是 3.3 倍,产出的独特程序是 2.3 倍,造出的独特建筑是 15.3 倍。关键不在「记」,在于它把经验固化成了能直接执行的代码资产。
语言反思:用自然语言做强化学习(Reflexion)
Reflexion(Shinn et al., arXiv:2303.11366,NeurIPS 2023)的思路更轻:Agent 失败后不改模型权重,而是生成一段自然语言的「反思笔记」,写清楚自己刚才为什么错、下次该注意什么,存进长期记忆。下次再上手时,先把这段反思读进来。
数据是:HumanEval 代码生成从 GPT-4 的 80.1% 拉到 91.0%;ALFWorld 决策任务成功率从 63% 提升到 97%。注意它和 Voyager 的区别——Voyager 存的是「怎么做」的代码,Reflexion 存的是「上次为什么错」的教训。一个偏程序性记忆,一个偏情景性反思,常常配合使用。
自我精炼:一个模型又当裁判又当选手(Self-Refine)
Self-Refine(Madaan et al., arXiv:2303.17651,NeurIPS 2023)更极简:同一个冻结的 LLM,先出初稿,再自己给自己写反馈,再照反馈改,循环几轮,全程不训练、不更新参数。它证明了一件事——很多模型第一遍写不对,但它其实有能力认出自己的错,只是没被要求改。
七个任务上平均提升约 20 个百分点;其中 GPT-4 在受约束生成任务上从 4.4% 飙到 61.3%。迭代很少,前两轮就吃掉大部分收益,论文上限设 4 轮。这套机制特别适合「单次生成质量不稳、但能自我校对」的场景,比如代码可读性优化、长文本润色。
经验显性化:把洞察抽成可读的规则(ExpeL)
ExpeL(Zhao et al., arXiv:2308.10144,AAAI-24)把「学」这件事做到最像人:它先在训练任务上用 Reflexion 式复盘积累成败轨迹,再让 LLM 从经验池里抽象出自然语言洞察(insight),并且这些洞察能被动态增删改——ADD、UPVOTE、DOWNVOTE、EDIT。被反复验证的洞察置信度涨上去,被证伪的沉下去。
效果:ALFWorld 从 ReAct 基线的 40% 提到 59%;HotpotQA 上它单次尝试就追平了 Reflexion 的多轮重试;更妙的是迁移——从 HotpotQA 抽的洞察用到 FEVER 事实核验,成功率从 63% 涨到 70%。这说明好的洞察是跨任务通用的,这也是「显性知识」比「藏在权重里」强的地方:人能读懂、能审计、能改。
编辑
一个最小闭环:经验到底怎么变成本事
把上面四个机制揉成一个工程上能落地的闭环,核心就五步:执行 → 观察 → 反思 → 抽象 → 回灌。下面用一个零依赖、确定性的 Python 示例把它跑通——不调任何 LLM,用规则模拟「反思」和「抽象」,专注把闭环本身讲透。
场景:一个在网格里找出口的导航 Agent,环境里散布着它事先不知道的墙。它每次用「当前已知墙」做路径规划,照计划走;一旦撞上未知墙,就反思出一条「避开这里」的规则写进经验库,下次复用。
# -*- coding: utf-8 -*-
from collections import deque
GRID_W, GRID_H = 9, 7
START = (0, 0)
GOAL = (8, 6)
WALLS = {(2,1),(2,2),(2,3),(4,2),(4,3),(4,4),(5,5),(6,5),(7,5),(1,5),(3,0),(6,2)}
class InsightStore:
"""经验库:显式程序性记忆,每条洞察带置信度,可被 upvote / downvote。"""
def __init__(self):
self.insights = {}
def add(self, text):
self.insights[text] = self.insights.get(text, 0) + 1
return "ADD" if self.insights[text] == 1 else "UPVOTE"
def downvote(self, text):
if text in self.insights:
self.insights[text] -= 1
def active(self):
return {t for t, c in self.insights.items() if c > 0}
def known_walls(self):
out = set()
for t in self.active():
x, y = t.split(":")[1].split(",")
out.add((int(x), int(y)))
return out
def __len__(self):
return len(self.known_walls())
def bfs_path(start, goal, blocked):
q = deque([start]); prev = {start: None}
while q:
c = q.popleft()
if c == goal:
break
for nb in ((c[0]+1,c[1]),(c[0]-1,c[1]),(c[0],c[1]+1),(c[0],c[1]-1)):
if 0 <= nb[0] < GRID_W and 0 <= nb[1] < GRID_H and nb not in prev:
if nb in blocked:
continue
prev[nb] = c; q.append(nb)
if goal not in prev:
return None
path, cur = [], goal
while cur is not None:
path.append(cur); cur = prev[cur]
path.reverse(); return path
def attempt(store):
known = store.known_walls()
path = bfs_path(START, GOAL, known)
if path is None:
return False
for cell in path[1:]:
if cell in WALLS:
store.add("avoid:%d,%d" % cell) # 撞墙 -> 反思 -> 抽象成规则
return False
return True
store = InsightStore()
for ep in range(1, 20):
if attempt(store):
print("第 %d 次尝试:一次到达终点 ✅ 经验库 %d 条" % (ep, len(store)))
break
else:
print("第 %d 次:失败,已学 %d 条避墙规则" % (ep, len(store)))
# 经验可跨会话复用:新 Agent 加载同一份经验库
print("新会话加载经验库 ->", "一次到达 ✅" if attempt(store) else "失败 ❌")
跑出来的结果是:前 6 次每次撞一面新墙、学一条规则,第 7 次起稳定一次到达;而加载这份经验库的「新会话」直接一次到位。整个过程没改一行代码、没动模型权重,仅仅是把失败沉淀成了可复用规则。这就是自我进化的最小可信证明——Agent 的能力随经验单调上升,而且经验能跨进程存活。
踩坑提醒:上面这个 demo 把「反思」简化成了「撞墙就记下来」。真实任务里反思远没这么便宜:失败的原因往往是多步叠加的,光记「最后一步错了」会学到错误因果。生产里的反思必须配合轨迹回放 + 外部验证,否则经验库会囤一堆假教训。
跨会话的成长靠什么存:经验库的三张表
闭环要持久,背后得有结构化的存储。它和「记忆层」是包含关系——经验库是记忆层里专门负责「可复用洞察」的那一部分。工程上我习惯拆成三张逻辑表,各管各的:
| 表 | 存什么 | 生命周期 | 例子 |
| 轨迹池 Trajectory | 成功/失败的完整执行记录 | 中短期,用于复盘 | 「调用 A 后超时,回退 B 成功」 |
| 洞察库 Insight | 抽象出的可复用规则 | 长期,带置信度 | 「涉及退款必须走人工审批」 |
| 技能库 Skill | 可执行的代码/工具封装 | 长期,版本化 | 「生成周报」的封装函数 |
轨迹池是原材料,洞察库是提炼物,技能库是固化物。Reflexion 主要写轨迹池和情景反思,Voyager 主要写技能库,ExpeL 三张表都写(轨迹→洞察→下次读洞察)。一个常见错误是把三者混在一张表里用向量检索一把梭——结果「上周那条具体报错」和「一条通用铁律」被同等对待,检索噪声巨大。
实战经验:洞察库一定要带置信度字段和来源任务 ID。没置信度,你没法做「被证伪就沉底」;没来源,哪天一条洞察导致线上事故,你连它从哪次复盘来都查不着。可观测性不是可选项,是自我进化的安全带。
没有外部验证的反思,是空转
这是自我进化里最容易被忽略、也最致命的一点。直觉上「让模型自己反思自己」很美,但 2024 年 Huang 等人的论文《LLMs Cannot Self-Correct Reasoning Yet》(ICLR 2024)给了当头一棒:没有外部反馈时,纯自我反思反而可能把对的改成错的——GSM8K 上 GPT-4 从 95.5% 掉到 89.0%。模型会「自信地犯错」。
解法不是不用反思,而是给反思接一个外部验证器(verifier),这正是 CRITIC(Gou et al., arXiv:2305.11738,2023)做的事:
- 代码任务:写完跑单元测试,测试结果说话,而不是模型自己说「我觉得对了」;
- 事实任务:写完用搜索核对关键事实,搜不到就改;
- 数学任务:用计算器验证结果。
把验证器当成闭环里不可省略的一环,自我反思才从玄学变成工程。这点和《推理模型时代的 Agent 设计》《AI Agent 输出工程》里「验证必须外部化」是一脉相承的——模型自己校验自己,信用为零。
踩坑提醒:别把「LLM-as-Judge 给反思打高分」当成外部验证。同一个模型既写答案又当裁判,偏差会被放大。真要上 LLM 裁判,至少换模型、换视角,且只用于「可验证信号缺失」的软指标,硬指标(测试过没过、数字对没对)必须靠真实执行。
更狠的一层:让 Agent 自己造工具、自己设计 Agent
经验沉淀到极致,会出现两种「涌现」式进化,工程价值很高但风险也更高。
自己造工具(Tool Self-Authoring)。 当现有工具集搞不定某类子任务,Agent 可以现场写一段代码当新工具,存进技能库,下次直接调。Voyager 的技能库本质就是这个。好处是能力边界随使用自动扩张;代价是这段代码成了生产资产——它得进代码评审、进测试、进版本管理,绝不能悄悄写进内存就完事。
自己设计 Agent(ADAS)。 Hu 等人 2024 年的 ADAS(Automated Design of Agentic Systems,arXiv:2408.08435)走得更远:用一个元智能体(meta-agent)去搜索、改写、评测另一个智能体的工作流设计,在迭代中自动发现更优的提示词与结构,甚至重新发现了 Self-Refine 这类已被人提出的 motif。这相当于把「Agent 工程」本身也交给 Agent 优化。这块目前更适合做离线搜索 + 人工确认的辅助设计,直接让它线上自动改自己,风险远超收益。
实战经验:自我造工具、自我改架构这两条路,我的建议是只允许离线、只允许进评审流、只允许带评估门禁。让线上 Agent 偷偷给自己加工具、改提示词,等于把生产环境的修改权限交给了会幻觉的程序,出事你连 diff 都看不到。
生产落地的三道闸门
自我进化一旦接上生产,最大的危险不是「不学」,而是「学歪了」——一条错误的洞察被高置信度记住,下次坚定地犯。三道闸门必须上:
- 评估门禁。任何新洞察要进长期库,先过一小批黄金用例(见《AI Agent 的测试与仿真工程》),确认它真能提升而非只是拟合了那次偶然。没过的洞察进「待验证区」,不进主库。
- 回滚与版本。经验库和技能库必须版本化、可回滚。某条洞察导致指标异常,一键退回上一个已知良好版本。别让经验库变成只能加不能减的黑盒。
- 写操作的硬隔离。自我进化的产物若涉及「发邮件、打款、删数据」这类动作,必须回到《AI Agent 安全防护实战》的最小权限 + 人工确认防线,进化出来的「便利」不能绕过护栏。
踩坑提醒:自我进化最容易在「成本」上爆雷。每次复盘、每次抽象洞察都要再调一次模型,经验库越大、每次要读进上下文的洞察越多,单轮成本线性上涨。务必给「反思调用」单独设预算和限流,并定期做洞察压缩(多条相似的合并成一条),否则你的 Agent 越学越贵。
写在最后:把这套能力接进你的 Agent
如果要把自我进化接进现有系统,按这个顺序来,别跳:
- 先有记忆层(轨迹能存、能取),这是地基,没它免谈;
- 在关键长链路任务上加反思步骤,但反思必须接外部验证器,不接就别开;
- 把反思产出抽象成带置信度的洞察,分轨迹池 / 洞察库 / 技能库三张表;
- 下次执行前读洞察,并用黄金用例做评估门禁,错的进待验证区;
- 经验库与技能库版本化、可回滚,写操作回安全护栏;
- 给反思调用单独配成本预算与限流,定期压缩洞察。
自我进化不是给 Agent 加个「学习模式」开关那么简单,它是一条要被评测、被护栏、被审计的闭环。但一旦跑通,你的 Agent 就不再是「每次都从零开始」的耗材,而是会随着真实流量越用越懂你业务的资产——这才是「智能体」三个字真正值钱的地方。
我是果酱,热衷于分享 AI Agent 工程实战与干货。如果觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见。