智能体面试准备(三十三):智能体自我改进与在线学习------从"一次性聪明"到"越用越聪明"
本篇是 B 系列第 33 篇(B11--B32 已覆盖评估、ReAct、记忆、MCP、多智能体、安全、HTN、Function Calling、RAG评估、可观测、多租户、长时任务、灰度、GUI、多模态、成本、人机、编程、框架、生产化、评测深化、安全对抗)。B13 讲过持久化记忆的"存",本文讲更高级的"用":智能体如何沉淀经验、反思失败、自我改进,甚至闭环微调。这是 Agent 从"能跑"走向"能进化"的分水岭。B31 讲的评测体系,本文会反复用到------没有评测,自我改进就是玄学。
一、为什么"记忆"不够,还要"自我改进"
B13 的持久化记忆解决了"记住用户偏好、历史对话",但那是静态存档------Agent 下次遇到同类问题,还是用同样的方式去撞,不会"吃一堑长一智"。真正的自我改进包含三个递进层次:
层级1: 记忆(Memory) ------ 存下事实/偏好, 下次能检索 [B13 已覆盖]
层级2: 经验(Experience) ------ 存下"怎么做成功/失败", 下次主动规避/复用
层级3: 演进(Evolution) ------ 从经验中提取规律, 改自己的提示词/工具/甚至权重
面试里能区分这三者,说明你理解的不是"加个数据库",而是"Agent 的学习闭环"。很多简历写"Agent 有记忆",一问"它怎么从错误里变聪明"就卡壳------本文就是补这个缺口。
二、反思(Reflection):让 Agent 自己给自己的输出打分
最经典的机制(源自 Reflexion 论文):Agent 执行后,不直接交差,而是先"照镜子"------用一次额外的 LLM 调用评估自己的结果,产出"反思轨迹",存进记忆,供下次参考。
┌─────────────┐
任务 ──>│ Agent 执行 │──> 结果
└─────────────┘ │
▼
┌─────────────┐
│ 自我反思 │ LLM 评估: 对不对? 错在哪? 下次怎么改?
│ (反思轨迹) │ 例: "我上次忘了校验日期格式, 导致解析失败"
└─────────────┘
│
▼
┌─────────────┐
│ 经验记忆库 │ 存 (任务类型 -> 反思 -> 改进建议)
└─────────────┘
│ 下次同类型任务前先读
▼
改进后的执行 (更少犯错)
def reflect(task, trajectory, result, llm):
prompt = f"""
你刚完成了任务:\n{task}
你的执行轨迹:\n{trajectory}
最终结果: {result}
请反思:
1. 结果是否正确? 若否, 根本原因是什么?
2. 哪一步本可以做得更好?
3. 下次遇到同类任务, 给出 1 条具体改进建议。
"""
return llm(prompt) # 产出结构化反思, 存入经验库
反思的关键是把"失败"变成"可检索的经验"。没有反思,错误随风而去;有反思,错误沉淀为资产。这是自我改进最便宜、最先该做的一层。
三、经验库(Experience Bank):结构化的"踩坑本"
反思产出的是自然语言,直接塞进向量库会噪声很大。工程上要做结构化经验:
经验条目 schema:
{
"trigger": "当任务是 X 类型时", # 检索键
"context": "在 Y 条件下",
"failure_mode": "曾因 Z 失败", # 失败模式
"fix": "应当先做 W 再执行", # 改进动作
"confidence": 0.8, # 该经验可信度
"usage_count": 3, # 被复用次数
"success_after": 3, # 复用后成功次数
}
检索时按"当前任务特征"匹配 trigger/context,命中就把 fix 前置成 system 提示或前置步骤 。经验库要能自我加权:复用后成功的经验置信度升、反复失效的经验降级甚至淘汰------避免"一条错误经验被奉为圭臬"反而带偏。这其实是把 B13 的记忆从"事实库"升级成"策略库"。
┌──────────────┬──────────────────┬────────────────────────┐
│ 机制 │ 存什么 │ 检索后怎么用 │
├──────────────┼──────────────────┼────────────────────────┤
│ 记忆(B13) │ 事实/偏好/状态 │ 拼进上下文当背景知识 │
│ 反思 │ 对单次结果的评价 │ 下次规避同类错误 │
│ 经验库 │ 结构化策略条目 │ 命中则前置改进动作 │
└──────────────┴──────────────────┴────────────────────────┘
四、从失败中学习:错误分类与纠正回路
自我改进要"可运营",先得把错误分类,不同类走不同回路:
错误类型 -> 纠正回路
─────────────────────────────────────────────
工具调用参数错 -> 经验库记录正确参数模板, 下次预填
检索不到/检索错 -> 反思 query 构造, 改进重写策略
推理逻辑错 -> 触发 self-consistency / 外部校验
幻觉/事实错 -> 强制引用溯源, 接事实核查工具
规划失败(卡死循环) -> 记录死循环模式, 加步数上限+回溯
一个常被忽视的设计:失败也要落库并归因 ,而不是只记录成功。很多团队的 Agent 日志只存"成功轨迹",等于只学了一半。要建"错误样本集",定期让 Agent 在错误样本上"重做并对比",看改进是否真的生效------这就是经验的回归测试。
五、提示词自我演化:让 Agent 改自己的 system prompt
比经验库更激进的是让 LLM 直接改写自己的提示词。典型流程:
初始 system prompt
│
▼
跑一批任务, 收集 (成功/失败) 轨迹
│
▼
元提示(Meta-prompt): "基于以下成败, 重写 system prompt 使其更鲁棒"
│
▼
新 prompt ──> 在验证集上评测 ──> 优于旧版则采纳, 否则回滚
这本质上是提示词层面的"变异-选择"进化 。要点:
-
必须有验证集 + 自动评测 ,否则 prompt 会被改得越来越长、越来越啰嗦(prompt 膨胀)。
-
要版本化 提示词,可灰度、可回滚(呼应 B23 灰度)。
-
元提示本身要约束"不要无限加规则",防止正反馈式的复杂度爆炸。
def evolve_prompt(old_prompt, trajectories, eval_fn):
critique = summarize(trajectories) # 成败归纳
new_prompt = meta_llm(f"""
当前 prompt:\n{old_prompt}
近期成败:\n{critique}
请重写 prompt 以修复失败模式, 但保持简洁, 不超过原长度 1.2 倍。
""")
score_new = eval_fn(new_prompt)
score_old = eval_fn(old_prompt)
return new_prompt if score_new > score_old else old_prompt # 劣化则回滚
六、闭环微调(Fine-tuning Loop):把经验变成权重
提示词演化有天花板(上下文有限、长 prompt 反而干扰)。更高阶的是把高质量轨迹变成训练数据,微调底座:
线上 Agent 运行
│ 收集 (任务, 轨迹, 结果, 人类反馈/自动评分)
▼
筛选高质量轨迹 (成功 + 人类赞 + 评测高分)
│
▼
SFT 微调 或 DPO (以高分轨迹为正, 低分为负)
│
▼
新模型上灰度 (B23) ──> 评测优于旧版? ──> 全量, 否则回滚
│
▼
下一轮继续收集 (持续学习闭环)
这条路的收益是推理成本下降 (好能力固化进权重,不再依赖长 prompt / 多次采样),但代价是训练管线复杂、有灾难性遗忘风险、需严格护栏。所以它是"成熟业务、量大、已验证提示词方案有效"之后的进阶选项,不是起手式。和 A27 讲的模型融合/蒸馏一样,微调进的是"能力固化"这条线。
经验沉淀的三条技术路线对比:
路线 成本 收益 适用阶段
──────────────────────────────────────────────
经验库/反思 极低 中(避坑) 任何阶段先上
提示词演化 低 中高 有验证集后
闭环微调 高 高(降本) 规模化且方案稳定后
七、在线学习与人类反馈:把人请回闭环
自我改进不能只靠 Agent 自己反思,否则会强化自己的偏见(自己觉得对就一直错)。必须接入人类反馈:
-
显式反馈:用户对结果点赞/点踩、编辑修正------这是最珍贵的信号,直接入经验库与微调集。
-
隐式反馈:用户是否可以继续对话、是否中途放弃、是否重复提问------负向信号。
-
人类在环审核(呼应 B27):高风险动作的改进建议,先让人确认再固化。
-
反馈偏见校正:避免"爱点赞的甜言蜜语"被过度学习,要对反馈做去偏与抽样。
人类反馈 ──> 经验库(可解释) + 微调训练集(权重级)
│ │
│ └─> 透明、可审计、可逆
└─> 权重级改进需严格灰度+回滚护栏
八、自我改进的陷阱与护栏
-
错误经验自我强化:一条错的经验被反复复用,越改越错。对策:经验置信度机制 + 人类抽检。
-
prompt / 经验膨胀:越攒越多规则,反而降低泛化。对策:定期压缩、用验证集卡阈值。
-
灾难性遗忘(微调路线):新任务冲掉旧能力。对策:保留旧任务评测集做回归。
-
反馈偏见:模型讨好爱点赞用户。对策:反馈去偏、引入客观评测。
-
不可解释:权重级改进黑盒,出事难排查。对策:关键改进留提示词层 + 全量日志。
┌──────────────────┬──────────────────────────────┐
│ 陷阱 │ 护栏 │
├──────────────────┼──────────────────────────────┤
│ 错误经验自强化 │ 置信度权重 + 人工抽检 │
│ 规则膨胀 │ 验证集卡阈值 + 定期压缩 │
│ 灾难性遗忘 │ 旧任务回归集 │
│ 反馈偏见 │ 反馈去偏 + 客观评测 │
│ 黑盒不可解释 │ 关键改进留提示词层 + 日志 │
└──────────────────┴──────────────────────────────┘
九、生产落地深潜:把"自我改进"做成可运营的系统
落到真实团队,自我改进最忌"做成研究 toy",正确做法是当成带护栏的数据飞轮 运营。第一步是全量埋点 :每条轨迹自动打标"成功/失败/人类反馈/复用经验ID",没有这些数据,所谓改进全是玄学。第二步是经验回归测试 :每周用历史错误样本跑一遍当前 Agent,看"老错误是否还会犯",这比看新指标更能说明改进是否有效。第三步是分级采纳 :经验库可自动采纳、提示词演化需人工 review、权重微调需灰度+回滚------越往权重走,护栏越重。第四步是可解释看板:展示"本周新增 N 条经验、采纳 M 条、因经验规避了 K 次同类失败",让业务方看得见 Agent 在变聪明。
这套飞轮的核心纪律是"改进必须可量化、可回滚、可归因"。我见过最典型的翻车:一个团队让 Agent 自动改自己的 prompt,三个月后 prompt 胀到上万字,新同事完全看不懂,且无人知道哪条规则是何时加的、为什么加------这就是缺了版本化与回归测试的后果。所以自我改进系统的成熟标志,不是"它改了多少次",而是"任何一次改动都能在 5 分钟内定位、复盘、回滚"。能讲清这个运营视角,面试基本已站在 Agent 平台负责人的位置。
9.1 冷启动与隐私合规
补两节容易被忽略、却决定项目生死的角度。第一是冷启动:自我改进系统最尴尬的阶段是"还没积累经验时,它什么都不懂"。解决冷启动有三招------其一,用专家知识手动播种一批初始经验(老员工的踩坑本直接结构化入库),让 Agent 一上线就有底子;其二,先用"规则 + 提示词"把基线做稳,再在稳定运行中慢慢用真实数据稠化经验库,别一上来就依赖自动反思;其三,早期多接人类反馈(B27 的 HITL),用人的纠正当第一批高质量经验。冷启动做不好,系统会在"空库 -> 乱猜 -> 更乱"的恶性循环里死掉,所以"先人工后自动"是铁律。
第二是隐私与合规 ------自我改进会把用户交互"内化"进模型或经验库,这有合规风险。比如经验库里沉淀了"某用户的特殊偏好",这算不算隐私数据?微调训练集里混入了含 PII 的轨迹,是否符合数据合规?我的做法是:经验库存储去标识化的策略("当任务类型是 X 时应当先做 Y"),而非原始对话;微调数据过一道脱敏与合规审查;并且给用户"退出改进计划"的权利(类似隐私协议里的 opt-out)。这些不是技术细节,而是上线前必须过的法务关卡。能在面试里把"自我改进"和"隐私合规"挂钩,会显得你懂真实企业落地,而不只是做研究玩具。
9.2 经验库与 RAG 的边界,以及组织落地
补一节容易被混淆的概念边界------经验库(本文)和 RAG(A32)到底什么关系 。很多人把"Agent 会学习"等同于"接个 RAG 知识库"。其实 RAG 喂的是外部事实知识 (文档、手册、实时数据),经验库喂的是Agent 自身的成败策略 (怎么做更对)。两者是不同维度的"外挂":RAG 解决"知不知道",经验库解决"会不会做"。一个 Agent 可以同时挂两者------先 RAG 检索业务文档,再调经验库规避"上次在这类任务上踩的坑"。混为一谈的后果是:把反思文本当知识文档塞进 RAG,导致检索召回一堆"我上次犯的错误"当成正经知识,反而带偏。正确做法是两套存储、两套 schema、两套检索逻辑,经验库带置信度与成败标记,RAG 带来源与时效标记,绝不混库。这个区分本身就是一个很好的面试点。
再谈组织层面的落地,这是很多技术人忽略的。自我改进系统上线后,最大的阻力往往不是技术而是组织流程 :谁有权批准一条经验晋级为"默认策略"?谁负责复核自动改写的 prompt?当 Agent 因为"学到了错误经验"犯了重大事故,责任怎么定?我建议设一个轻量的改进治理委员会 (甚至可以是周会形式):每周 review 经验库新增条目、prompt 演化 diff、微调候选,人工签字后才进生产。这听起来笨重,但能把"自我改进"从"危险的自动化"变成"可控的进化"。见过最激进的团队让 Agent 全自动改 prompt + 全自动微调,三个月后线上行为完全不可解释,只能回滚到零并推倒重来------这就是缺治理的代价。所以自我改进的成熟度,最后拼的不是算法多花哨,而是有没有把"让机器自己改自己"关进可审计、可追责的笼子里。这也是为什么 B27 人机协作、B32 安全对抗在这条链路上是刚需而非点缀。
9.3 自我改进的"度":什么时候不该让它自己学
补一节反直觉的认知------自我改进不是越多越好,有些场景必须关掉 。其一是高监管行业 (金融决策、医疗诊断):任何"模型自己改自己"的行为都需可解释、可追责,自动演化 prompt 或微调在这种环境里往往不被合规接受,宁可人工驱动、慢但可控。其二是长尾罕见任务 :样本太少,自我改进容易过拟合到个别案例,反而损害泛化,这类应走"人工审核 + 慢迭代"而非自动吸纳。其三是探索期的新业务:连"什么是好结果"都没定义清楚,就让 Agent 自我改进,等于让它朝一个未知方向狂奔,必须先用人工标定 baseline 和评测集,再谈自动化。
还有个工程心态值得单独讲:自我改进是"锦上添花"不是"雪中送炭" 。很多团队 Agent 基础能力还稀烂(检索不准、工具老报错),就急着上"自我改进飞轮",结果飞轮转起来只是在加速放大基础缺陷,越学越错。正确的优先级永远是:先把单条链路做对(检索、工具、规划都稳),再叠经验库(避坑),再叠提示词演化,最后才上闭环微调。跳级只会放大问题。这和各系列一贯的工程纪律一致------先把确定性做扎实,再谈智能化,顺序错了全盘皆输。能把"自我改进的启用条件"讲清楚,比只会吹"我们的 Agent 会自己学习"专业得多。
9.4 经验检索的双路召回与适用性判断
补一个工程细节:经验库的检索召回质量 直接决定改进上限。很多团队把反思文本直接丢向量库,结果命中一堆语义相近但情境不同的经验,反而误导。正确做法是双路检索 ------一路按"任务类型/工具名"做结构化精确匹配(如 trigger=调用日历API 且 参数含时区),一路按语义做相似匹配,两者交集合并后再用置信度排序。还能用 LLM 做"经验适用性判断"(这条经验对当前任务真的适用吗),过滤掉误召回。这一步做好了,经验的命中率能从"聊胜于无"提升到"真正帮得上忙",是自我改进从玩具变生产的关键一跃。
双路召回:
结构化精确匹配 ──┐
├─> 交集 + 置信度排序 ──> LLM 适用性过滤 ──> 命中经验
语义相似匹配 ──┘
9.5 自我改进与 RAG、评测的协同闭环
把 B33 放进整个 Agent 技术栈里看,它和 A32(RAG 进阶)、B31(评测深化)是铁三角关系:
┌─────────────┐
│ RAG(A32) │ 喂"外部事实知识"(知不知道)
└─────────────┘
│
▼
┌─────────────┐ ┌─────────────┐
│ 经验库(B33) │<────>│ 评测(B31) │ 裁判: 改动是否真更好
│ 喂"成败策略" │ │ 轨迹/部分分 │
└─────────────┘ └─────────────┘
│
▼
Agent 行为持续变聪明(可量化/可回滚/可归因)
具体讲:RAG 解决"知不知道业务知识",经验库解决"会不会做这类任务",评测则充当"裁判"------任何新经验 / 新 prompt / 新权重,先过 B31 的评测门禁再过灰度(B23)。没有评测,自我改进就是玄学;没有 RAG,Agent 缺少事实底座;没有经验库,Agent 每次都从零开始。三者协同,才是完整的"越用越聪明"飞轮。面试能把这三者串成一张图,说明你理解的是 Agent 的全局工程,而非孤立技巧。
9.6 错误样本回归测试怎么落地
"越用越聪明"必须可被证伪,否则只是错觉。落地做法:每周从线上抽一批"历史错误样本"(失败轨迹 + 当时命中的经验),让当前 Agent 重跑,对比"旧版是否还犯、新版是否规避"。配套一张回归看板:
错误样本集 ──> 当前 Agent 重跑 ──> 成功率 vs 上周
│ │
└── 老错误复发? ──> 告警 + 复盘经验库 ──> 降级/修正对应经验
要点:错误样本要覆盖"不同失败模式"(参数错、检索错、逻辑错、幻觉),且要带"当时上下文"而非只存结论,否则重跑失真。这一步把自我改进从"感觉变聪明"变成"可度量的能力曲线",是和 B31 评测深化同构的工程纪律。见过太多团队只盯着"本周新增多少经验",却从不验证"老错误是否复发"------结果经验库越长,Agent 反而越容易在老坑里反复栽。回归测试就是专治这种"虚假进化"的疫苗。
9.7 与 B30 生产化的承接
最后点一句和 B30(生产化)的承接:本文讲的自我改进,正是 B30 里"持续运营"的具体手段之一。生产化改造时,把"经验库 + 反思 + 评测门禁"作为标准组件接入,Agent 就从"上线即巅峰、之后只退不进"变成"持续演进"。所以如果你只能给现有 Agent 加一个长期能力,优先加"自我改进飞轮"------它单点撬动的是整个系统的寿命。这也是为什么 B 系列从 B11 评估一路走到 B33,始终在讲同一件事:智能体能不能上生产,不取决于它多会聊,而取决于它"在一切都会出错的现实里"是否依然稳、可控、可查、可进化。
十补、自我改进的启用条件与组织 owner
补一个落地真相:自我改进最容易失败在'没人维护'。系统上线时轰轰烈烈,三个月后负责 review 经验的同学转岗了,经验库开始堆积未审核条目、错误经验慢慢占据主流,Agent 行为悄悄退化却没人发现。所以必须把这个'改进治理'写进某人的 OKR,设置定期巡检(周会 review 新增经验 + 月度错误样本回归),把它当成'系统运维'而不是'一次性项目'。见过太多 Agent 平台'上线即巅峰、之后只退不进',根因都是缺了持续的治理 ownership。这又回到 B30 生产化的主题------能上线只是开始,能持续运营才是本事。
十、面试速答 + 高频追问清单
面试速答(背下来):
-
自我改进三层:记忆(存事实)→ 经验(存成败策略)→ 演进(改提示词/权重)。
-
反思(Reflexion):执行后额外 LLM 调用评估轨迹,产出反思存库,下次复用避坑。
-
经验库要结构化(trigger/failure_mode/fix/confidence),并能按复用成功率加权、淘汰失效经验。
-
提示词演化:用元提示改 system prompt,须配验证集+版本化+回滚,防膨胀。
-
闭环微调:高质量轨迹 SFT/DPO,降本但需防灾难性遗忘,规模化后上。
-
必须接人类反馈校正偏见;改进要可量化、可回滚、可归因。
-
经验库 ≠ RAG:RAG 喂事实知识,经验库喂成败策略,两套存储绝不混库。
高频追问:
-
反思和经验库有何不同?答:反思是单次评价,经验库是结构化、可加权、可检索的策略沉淀。
-
提示词自动演化最大的风险?答:无验证集导致膨胀与正反馈复杂度爆炸,需回归门禁。
-
什么时候才上闭环微调?答:规模化、提示词方案已验证有效、且能扛训练管线成本时。
-
怎么防止错误经验自我强化?答:置信度衰减+人工抽检+错误样本回归测试。
-
自我改进为什么依赖评测?答:没有评测门禁就无法判断改动是否真的更好,只能玄学。
-
经验库直接丢向量库够吗?答:不够,需结构化精确匹配+语义匹配双路,并用 LLM 判适用性。
-
高监管场景能上自动微调吗?答:通常不行,需可解释可追责,宁可人工驱动慢但可控。