← 返回学习资料

Agent Self-Improving 工程指南

本指南只讲一件事:怎么真的把 Agent 自改进搭出来——采集什么证据、怎么反思成经验、如何安全地让它生效。偏工程落地,不是论文综述。

一句话定义

自改进就是一个闭环:让 Agent 把「这次是怎么做成 / 做砸的」变成下次的先验。运行 → 留痕 → 反思 → 归纳 → 激活 → 注入 → 再运行。

学术上这个闭环被抽象为四要素:System Inputs / Agent System / Environment / Optimiser(综述 arXiv:2508.07407)。你要优化的是前两者,信号来自环境,而「反思器」就是那个 Optimiser。

先划边界:是什么,不是什么

这是自改进这不是自改进
沉淀「这类任务该先查再答」这样的方法论记住「用户叫张三、住北京」这样的用户事实
经验归 Agent,可跨用户复用用户画像、个性化人设
提炼可复用、带适用条件的规则把原始日志或历史对话整段堆进 prompt
最容易做错的一条立场

经验归 Agent,不归用户。用户标识只应出现在原始证据里,唯一用途是把轨迹读回来;经验层不带用户维度。这条一旦破防,隐私合规与跨用户复用会一起崩。

改什么:四层选型(决定项目难度)

自改进不是一个动作,而是四个不同层级的动作。选错层级,项目基本就废了。

L4
权重层改模型参数:SFT / RL / 蒸馏  ·  代表:SEAL
慢且贵
需重训才能回退
L3
架构 / 工作流层改拓扑、节点,甚至自改代码  ·  代表:ADAS、Darwin Gödel Machine
上限最高
也最危险
L2
技能 / 工具层沉淀可复用技能、自建工具  ·  代表:Voyager
中等
删技能即回退
L1
上下文 / 经验层  ★ 从这里开始改 prompt、memory、经验手册  ·  代表:ACE、ExpeL、Reflexion、GEPA
快 · 便宜
改一行文本即回退
结论:绝大多数团队应该只做 L1,而且应该先只做 L1

这不是保守,有实证支撑:GEPA(arXiv:2507.19457,ICLR 2026 Oral)用纯 L1 的反思式提示词进化,平均比 GRPO 这类 L4 方法高约 10%(最高 20%),而 rollout 少到 1/35。

L1 还有个隐性优势:可解释。规则是人类可读的自然语言,学错了你能直接看到并删掉;L4 权重学错了只能重训。

关于 L3 的提醒

Darwin Gödel Machine 让 Agent 改写自己的代码库,学术上极漂亮。但自动改代码不该出现在你的第一版生产系统里。一套企业级实现在「非目标」里明确写了:不自动改写子 Agent 描述、不自动改代码。

何时改:任务内 vs 任务间

时机做法代价
任务内(test-time)Reflexion 式:失败 → 口头反思 → 立刻重试直接推高当前请求时延
任务间(offline / sleep-time)运行结束后离线反思,下次生效对话时延零影响

生产系统几乎都选第二种。学界称之为 sleep-time compute(arXiv:2504.13171)——让模型在「睡觉」时预先思考。这与人类睡眠巩固记忆的隐喻一致:白天经历,夜里整理。

架构总览:三段职责

采集 CAPTURE
写证据消息 + 白名单事件
入队反思任务,失败不阻断
读已激活经验拼进 system prompt
纪律在线只做这三件轻活
→
反思 REFLECT
门控先问值不值得反思
轻反思单轨迹 1:1 原子提取
深反思跨轨迹 N:1 聚类归纳
纪律重加工全部离线,可失败可重放
→
生效 ACTIVATE
候选机器唯一能写的终态
激活显式决策,无自动晋升
注入限量加载,单次运行内稳定
纪律未激活不注入
整套架构最重要的一条纪律

在线路径只做三件轻活:读已激活经验 + 写证据 + 入队。重加工全部离线。

由此得到两条必须写进设计文档的降级语义:

  • 没有已激活经验时,prompt 里经验块为空——这是预期降级,不是采集失败。
  • 存储层故障时,整条自改进链路降级,主对话照常可用。

CAPTURE① 数据分层与归属

先定数据分层。只需两段,别搞三层四层。

段内容带用户标识?用途
证据段消息、生命周期事件带唯一用途:把轨迹读回来
经验段候选经验、规范规则、证据边不带按 Agent + 作用域归属

标识与粒度

标识粒度用途
tenant_id(隔离域)租户 / 域第一隔离边界,聚合与消费不得跨越
user_id源用户只在证据段与队列,用来把轨迹读回来
conversation_id + run_id一次完整运行反思的处理单元与幂等单元
target_agent_id责任 Agent这条经验约束谁

作用域枚举:只要两个值

  • agent —— 只约束某一个 target_agent_id
  • global —— 隔离域内全局生效,target_agent_id 为空
这里没有任何以用户为维度的作用域

想跨用户共享,只能通过 global 或 Agent 级规则实现。绝不能把用户标识写进经验层,再靠放宽查询条件来实现共享。

白名单与克制采集

新手最容易犯的错:把所有事件都写库。流式输出一个 token 一条 INSERT,数据库直接被打爆。正确做法是白名单,只持久化重建轨迹必需的那几类。

落库(白名单)为什么必需
运行成功终态完整终态 + 最终回答
运行失败终态失败信号,反思的高价值输入
子 Agent 调用开始证明调过子 Agent
子 Agent 调用结束携带子会话标识
子轨迹快照子 Agent 内部过程,首次归一后重放复用
不落库(仅进文件日志):流式文本分片、推理过程、工具调用明细、心跳、运行开始
实测效果(某企业级实现,匿名)

相比「每条事件都 INSERT」的旧行为,典型长请求的写入量只剩原来的 0.5%–2%。

过滤要放在两处:写库函数入口直接返回,以及异步派发前就跳过(避免白建一堆任务对象)。

想清楚这条,采集就能放心地克制

可观测性靠文件日志,不靠数据库。文件日志仍记全量,数据库只存重建轨迹必需的最小集。

提交时机(顺序错了反思会全跳过)

  • 请求开始:加载 status=active 的规则,拼进各节点的 system prompt。
  • 运行中:只把白名单事件交给采集函数;流式输出只进文件日志。
  • 请求结束:同步写入消息(用户输入 + 最终回答)。终态事件必须在入队前落库。
  • 入队反思:入队失败不阻断主回答。
第 3 步的顺序是硬约束

终态事件若晚于入队落库,轻反思会把轨迹判为 trajectory_incomplete 并直接跳过——表现为「队列都完成了,但一条经验都没产出」。

REFLECT② 分层反思:浅层与深层必须分开

轻反思深反思
输入一次完整运行轻反思积累的候选
动作原子提取,不做归纳聚类 + 归纳
产出候选经验规范规则(带适用条件 / 例外)
关系1 : 1N : 1
默认开启关闭
为什么深反思应该默认关闭

理由非常实际:没有轻反思的稳定产出,开深反思几乎无产出。先让浅层跑稳、有量,再开归纳。这个顺序反了会浪费大量调试时间。

门控:先问「值不值得反思」

不是每条轨迹都有信息量。反思一条「你好 / 你好,有什么可以帮您」纯属浪费 token 并污染经验库。

skip_reason条件
trajectory_incomplete没有终态事件,或轨迹被截断
no_messages轨迹没有任何消息
trivial_interaction消息数 ≤ 2,且无子 Agent、无重试、无错误、无反馈
反过来说

有反馈、有重试、有错误、有子 Agent 链路的轨迹才值得反思——因为那里才有「哪里做对了、哪里踩坑了」的信号。这一步直接决定整个经验库的信噪比,别省。

轻反思:单轨迹原子提取

  • 重建轨迹:按 隔离域 + 用户 + 会话 + 运行 四元组还原完整轨迹。
  • 补全子轨迹:若调过子 Agent,拉取子会话历史;首次归一结果落快照,重放复用,不再回源。注意尊重上游限流(如最小请求间隔 3 秒)。
  • 通读提炼:提炼 3–5 条关键要点。不臆造——原文没有的不写,不确定就标低置信度。
  • 幂等写入:写候选表,归属到目标 Agent 或 global。
子轨迹补全失败时的归因纪律

补全失败必须在调用记录上可见,且不得把内容类经验归到该子 Agent——只能保留入口编排层面的经验。否则你会把「没看到的东西」当成结论写进库里。

幂等与置信度

幂等键必须足够完整,建议包含五段:

idempotency_key = (
  tenant_id,          # 隔离域
  source_run_id,      # 来源运行,保证同一轨迹重放不重复
  target_agent_id,    # 归属
  fingerprint,        # 内容指纹,区分同一轨迹的多条经验
  reflector_version   # 反思器版本,升级 prompt 后可重新反思而不冲突
)
置信度分流

低于阈值(如 0.6)的候选进 review 而不是直接可用。这是在深反思之前的第一道质量筛。

经验分类与信号:固定枚举,别让模型自由发挥

标签一旦漂移就无法分组,深反思会直接失效。建议固定九类:

routing 路由
planning 规划
tool-selection 工具选择
knowledge-use 知识使用
query-generation 查询生成
answer-quality 答案质量
validation 校验
retry-and-fallback 重试兜底
efficiency 效率

未知标签一律归一为空串,避免污染后续分组。信号只需三值:helpful / harmful / neutral。

深反思:跨轨迹归纳

领取候选
pending · 跳过已锁行
→
分组
作用域 · Agent · 类型
→
聚类
Jaccard ≥ 0.4
→
归纳
簇大小 ≥ 2
→
写规则
status=candidate

之后还有两步收尾:写证据边(规则 ↔ 来源候选,保证可回溯)与留痕(记录本次运行状态与摘要)。

两条硬约束
  • 一次运行不得跨隔离域聚合,且应在单一域 + 单目标 Agent 的处理块内加锁串行(归还连接前显式释放锁)。
  • 簇大小 ≥ 2 才归纳——孤例不成规则。只出现过一次的现象,可能只是噪声。

产出格式:要带适用条件和例外

# Agent Experience Context
## Deep Experiences
- {规则标题}: {规范化表述}
  - applicability: 什么场景下适用
  - exceptions: 什么情况下不适用

一句干瘪的结论(「要先查再答」)几乎无法指导行为;带上适用条件与例外,才是可执行的规则。

失败语义:三条

规则含义
主对话不依赖反思成功入队或反思失败不得阻断当前回答
失败可查失败任务把错误写入 payload,方便 grep;但不自动重跑
证据永不因反思受损反思只读证据,失败不回改证据,任务可重放

ACTIVATE③ 激活是独立生命周期

整套系统最重要的安全阀

机器唯一能自动写入的终态是 candidate。从 candidate 到 active 必须经过一次显式决策。没有自动晋升。

为什么值得如此保守

  • 反思是 LLM 生成的,会有幻觉。一条错误规则被自动激活,会污染此后所有请求,且很难归因。
  • 经验注入是全局影响,不像单次回答错了那么容易被发现。
  • 激活前需要人确认一件事:规则里不含用户事实或可识别个人信息。
状态含义是否注入
candidate机器产出的默认状态否
active唯一被注入的状态是
conflicted与已有规则矛盾,人工待裁否(也不归档)
superseded被新版本取代而降级否
archived / rejected退出运行时,保留为资产否
conflicted 是个有用的中间态

与已有规则矛盾的规则,既不注入也不归档,挂起等人裁决。不要让机器自己选边——矛盾往往意味着规则缺少适用条件,而不是其中一条错了。

一个值得参考的取舍

那套企业级实现甚至主动放弃了早期版本设计的自动质量门禁与灰度晋升链,改回人工激活。在没有可靠自动评估之前,这是更诚实的选择。

运行时注入

环节做法
加载按隔离域取 status=active,作用域为 global 或匹配当前 Agent
限量如最多 50 条,按 置信度 → 证据数 → 更新时间 排序
渲染Markdown 经验块进 system prompt,按文本预算截断(如 2000)
稳定性单次运行内这份上下文必须不变
空结果省略经验块,降级为无经验模式,不阻断对话
最后一条容易被忽略但很重要

如果同一次运行的不同节点(比如分类、规划、反思三个节点)加载到了不同版本的经验,行为会漂移,问题也将无法复现。新激活的规则应从下一次运行才可见。

CASEWarp:另一条路线,把经验写进文件

前面讲的是「经验存数据库」路线:候选表、规则表、改状态激活。但还有一条同样成立、而且更轻的路线——把经验写成文件,让改进走标准代码评审流程。Warp(AI 终端 / agentic 开发环境)的公开实践是个很好的样本。

80 万月活开发者
56%财富 500 强渗透
40 万+每周 Claude Code 会话
4000 万累计 Agent 对话
他们要解决的问题:「80% 正确」陷阱

一次性写好的 prompt 只能把任务做对约 80%,剩下 20% 产生大量噪音,体验反而很差。内部的代码评审 Agent 被工程师抱怨「评论无用」。靠人工不断重写 prompt 来补那 20%,根本无法规模化。

根因诊断(比「Agent 没记性」精准得多)

反馈是无状态的(stateless)。会话结束后,人给 Agent 的反馈就消失了,那些最关键的上下文被直接踢出了 agentic loop。

双层 Skill 循环

内层 Base Skill · 每个任务都执行
触发:新 PR / Issue
→
Base Skill(领域知识 + 指令)
→
产出:评审意见 / 标签 / 规格
人类反馈 · 循环的关键环节
最低门槛:一个 👍
·
最佳:说清「为什么」
·
就地给出,不额外提交
外层 Improver Skill · 定时执行,不按任务
拉取累积反馈
→
对比:Agent 建议 vs 人类回应
→
最小、聚焦的 diff
→
开 PR → 人工 review → merge

合并后,下一次内层运行即继承该改进。

本指南的说法Warp 的对应物
轻反思(单轨迹提取)内层 Skill 的单次产出 + 就地反馈
深反思(跨轨迹归纳)外层 Improver Skill 的定时归纳
候选经验 → 规则Improver 提出的最小 diff
激活是显式决策开 PR → 人工 review → merge
证据可回溯Git 历史天然可 diff
最值得注意的一点:两条路线在红线上不约而同

机器在这里只提建议(开 PR),从不直接改生效内容。这与不变量 I-4「未激活不注入」完全同构——只是把「改数据库状态」换成了「合并 PR」。

Warp CEO Zach Lloyd 的原话

「框架其实非常简单:一个领域特定的 base skill,加一个用来打磨它的 improver skill。这种简单性就是这个方案的美感所在。」

Skills 与 Memory 不是一回事

这个区分很锋利,也是很多人混淆的地方:

SkillsMemory
性质程序性——「如何做 X」事实性上下文
稳定性稳定,与单次运行无关永不停止变化
谁来改刻意变更(走审核)Agent 推理时自动写入
这解释了为什么「未激活不注入」如此重要

本指南采集/反思/生效那三段构建的本质是 Skills,不是 Memory。程序性知识一旦出错,影响是全局且持续的——所以必须有人把关。

编写自改进 Skill 的 6 条准则

#准则要点
1写原则,而非规则「像在指导一个聪明的人,而不是在给计算机编程」。写「寻找重复代码」优于穷举命名规则
2解释「为什么」给出规则背后的理由,Agent 才能推理,泛化更好
3让反馈毫不费力在人已有的工作流中采集(直接在 PR/Issue 下评论)。「低摩擦才能保持信号流动」
4Skill 要小 + 渐进披露好的 Skill 文件不大,它引用资源文件与脚本,而不是一次性塞满上下文
5质量 > 数量,但数量有帮助资深工程师的少量详细反馈胜过大量草率反馈——二元 👍/👎 说不出「为什么」
6在 Improver 上多投入它跨用例高度可复用:除领域知识部分,各 Agent 的 improver 差别不大
第 3 条补上了本指南前面缺的一环

我们讲了「有反馈的轨迹才值得反思」,但没讲反馈从哪来。答案是:不要新建一个反馈系统,去人已经在做事的地方(PR 评论、Issue 回复)把信号捡起来。让人为了喂 Agent 而多做一步操作,信号就会枯竭。

落地案例:Issue Triage Agent 全链路

Warp 开源了完整示例(warpdotdev/warp-agents-demo-github-issue-triage),链路值得抄:

  • 触发:有人提新 Issue → CI 启动 Agent → 分析复杂度与可行性 → 打标签、建议修复方向。内层 Skill 文件里写明每个标签的语义定义、行动前如何研究代码库。
  • 发现缺口:首轮表现不错,但漏掉了 ready to spec 标签(表示贡献者可以开始撰写规格)。
  • 就地反馈:维护者直接在该 Issue 下留言,并同时说明「期望什么 + 为什么期望」。
  • 外层运行:定时 Agent 认证 → 运行 Skill 内捆绑的脚本拉取近期带反馈的 Issue → 汇总为结构化文件 → 读回上下文。
  • 最小修改:开 PR 改内层 Skill——当 Issue 描述了真实问题时即应用该标签,即使 UI 形态尚未确定;PR 描述里写明哪些信号触发了改动。
  • 闭环:人 review → merge → 下次运行继承。这一步人工环节闭合了循环,并保证人始终掌控改了什么。
第 4 步的「捆绑脚本」是准则 4 的体现

Skill 引用脚本,避免每次运行都让模型重新写一遍取数代码——既省 token,又消除了随机性。

Warp 现在把这套模式跑在整个开源仓库上,拥有独立的 spec 撰写 Agent、评审 Agent、triage Agent,每个都带自己的自改进循环。

两条路线怎么选

存数据库(前三段)存文件走 PR(本节)
适合面向终端用户的在线业务 Agent研发流程内的 Agent(评审 / triage / spec)
经验载体候选表 / 规则表Skill 文件
激活方式改状态为 activemerge PR
审核工具需自建审核台直接复用代码评审
可回滚性需自己实现Git 原生
轨迹重建需自建证据表大多已在 PR / Issue 里
选型建议

如果你的 Agent 本来就工作在代码仓库里,优先选文件路线——你能白捡 diff、review、回滚、历史四件套。如果是面向用户的在线对话 Agent(轨迹在数据库里、没有天然的 PR 载体),那就用前三段那套。

八条不变量(破坏即事故)

这是评审任何改动的第一标尺。

I-1
隔离域不可跨越落地:查询显式带隔离域;归纳按域加锁与领取  |  验证:域 A 的规则不被域 B 读到
I-2
经验不按用户召回落地:经验表无用户字段;运行时只按域与作用域选择  |  验证:断言加载 SQL 不含用户条件
I-3
证据可回溯落地:证据保留完整四元组;规则连回来源候选  |  验证:写入后能完整重建轨迹
I-4
未激活不注入落地:机器只写 candidate,运行时只读 active  |  验证:新规则不出现在 prompt 的行为测试
I-5
采集克制落地:白名单;异步派发前就跳过  |  验证:端到端断言流式事件不落库
I-6
主路径不依赖反思成功落地:入队与 worker 失败不阻断回答;存储失败整条降级  |  验证:断开存储后主对话仍返回
I-7
单轨迹幂等落地:幂等键含运行 ID 与内容指纹  |  验证:同一轨迹重放不产生重复行
I-8
轨迹可序列化落地:序列化时统一处理时间类型  |  验证:用真实游标读出的行走完全链路
如果只能记两条

记 I-6(自改进永远不能拖垮主业务)和 I-4(未验证的东西永远不上线)。

测试与监控

三条测试原则

  • 真实数据库验证:常规单测用替身连接;真库用例读环境变量,未配置时自动跳过而非失败。
  • 端到端覆盖:采集 → 入队 → 真实类型序列化 → 写入候选,并断言流式事件不落库。
  • 测行为,不测实现:断言「未激活不注入」「跨域读不到」「白名单外不落库」这些意图,不锁定 SQL 文本,避免测试固化实现、阻碍演进。

日常巡检:先看三张表的状态分布

SELECT status, count(*) FROM 任务队列   GROUP BY 1 ORDER BY 1;
SELECT status, count(*) FROM 候选经验表 GROUP BY 1 ORDER BY 1;
SELECT status, count(*) FROM 规则表     GROUP BY 1 ORDER BY 1;
队列 completed ≠ 写出了经验

跳过反思时任务照样标记 completed。所以监控必须同时看产物表。队列全绿而候选表为空,就是下面那个故障的特征信号。

真实故障复盘:一个静默失败

现象

测试环境轻反思全部失败,任务队列进 failed,候选表始终为空。

根因

序列化轨迹时没处理数据库游标读出的时间类型:

Object of type datetime is not JSON serializable
为什么没被测出来

本地单测用 None 和 ISO 字符串手搓轨迹对象,从没覆盖真实游标读出的数据形状。

修复本身很简单——序列化时统一把时间类型转 ISO 字符串。但教训的价值远超这个 bug:

  • 任务完成 ≠ 有产出。监控必须同时看产物表,不能只看任务表。
  • 测试要用真实数据形状。整条链路最容易碎的地方,恰恰是跨系统边界的数据形状转换。
  • 测行为,不测实现。断言意图而非 SQL 文本。
还有一条运维细节

历史 failed 任务通常不会自动重跑。部署修复后要手动把它们打回 queued,再观察候选表是否开始增长。在此之前开启深反思没有意义。

战略级教训:别一次性设计太多层

那套企业级实现的 1.0 版本,设计了一份相当宏大的蓝图。结果几乎全部未落地,2.0 果断砍掉,收敛为单一产品线:只做 Agent 经验。

1.0 设计2.0 现状
用户记忆(原子 / 人设 / 场景)未实现,不按用户召回
策略手册 + 版本化发布链 + 回滚未实现
多组件存储(关系库 + 缓存 + 对象存储 + Git)收敛为单库
自动晋升 + 质量门禁人工激活
软遗忘、硬上限、向量检索不做
一句话

自改进系统最常见的死法,是一次性设计太多层。先把「一条轨迹 → 一条经验 → 注入生效」这条最小闭环打通并跑稳,再考虑加东西。

从零复现的最小清单

门槛比想象的低

不需要向量库,不需要多组件存储。一个关系库 + 两个 worker 就能起步。

数据骨架

证据段
├── messages ← 用户输入与最终回答
└── events ← 白名单生命周期事件(含子轨迹快照)
 
任务段
└── offline_queue ← 入队 / 领取 / 回收 / 完成 / 失败
 
经验段
├── candidates ← 浅层:单轨迹原子经验(分类/信号/置信度)
├── patterns ← 深层:规范规则(适用条件/例外)
├── pattern_evidence ← 证据边:规则 ↔ 来源候选
└── reflect_runs ← 留痕:每次归纳运行的状态与摘要

实施顺序

  • 采集 建证据段 + 采集:白名单过滤,终态事件先于入队落库。
  • 反思 建队列 + 轻反思 worker:门控 → 重建 → 提炼 → 幂等写候选。
  • 生效 建注入:加载 active。一开始手工插一条测试规则验证链路。
  • 生效 验证最小闭环:手工规则能进 prompt,且断开存储时主对话仍可用。
  • 反思 跑量:让轻反思稳定产出一段时间,观察候选表增长与质量。
  • 反思 再开深反思:分组 → 聚类 → 归纳 → 写 candidate。
  • 生效 建激活流程:人工审核台(哪怕先是一条 SQL + 一个 checklist)。
注意第 3、4 步的顺序

先打通注入链路再做深反思。这样你能尽早验证「经验真的能影响行为」这件最核心的事,而不是等归纳跑完才发现注入是坏的。

避坑对照表

陷阱正确做法
每条流式事件都写库白名单,只留重建轨迹必需的几类
反思失败阻断主回答入队与 worker 失败一律不阻断
把用户标识写进经验层经验按 Agent + 作用域归属
机器自动激活规则只写 candidate,激活是显式决策
幂等键只用运行 ID加内容指纹与反思器版本
孤例直接升级成规则成簇 ≥ 2 才归纳
只监控任务队列状态必须同时看候选表与规则表
单测手搓理想数据对象用真库真实游标形状跑端到端
一次运行内热加载新规则单次运行内注入集保持不变
让人为了喂 Agent 而多做一步操作在人已有的工作流里就地采集反馈
无条件相信人类反馈假定反馈会出错,做合理性校验并筛选来源
把 Skill 写成穷举规则清单写原则 + 解释为什么,让 Agent 能推理
让 Agent 直接改证据反思只读证据,永不回改
一上来就做自改代码(L3)先把 L1 做透

怎么验证它真的有效

这是最容易被忽略的一环。两条腿都要有。

📊
学术侧
固定 benchmark 上的通过率 / 准确率对比。GEPA、ACE 这些工作都是这么验证的。
🔬
生产侧:A/B
有 / 无经验注入的对照实验——这是唯一能真正回答「值不值得」的手段。
📈
生产侧:巡检
三张表状态分布日常监控 + 失败原因可 grep。
一条底线

在你有可靠自动评估之前,别开自动激活。人工审核慢,但错误规则污染全局的代价更高。

五个治理问题(来自 Warp 的实践问答)

这几条把「怎么评估」从原则推进到了可操作层面。

问题答案
反馈本身是错的怎么办?假定它一定会出错。不要让 Agent 盲目接受反馈——给它上下文做合理性校验、筛选谁的意见算数,并在筛选阶段或最终评审阶段保留人在环
你的领域可验证吗?可验证就先建验证 harness,再让 Agent 对着它调优:生成参考语料 → 对比输出与参考 → 修正 → 重复
不可验证怎么办?尽量依赖针对 golden outputs 的确定性 evals;必须用人类反馈时,限定为领域专家——不要开闸放水
一个 Improver 还是每个 Agent 一个?折中:用模板化的 base loop 捕捉共性,再叠加领域特定权重。少数几个 → 各自独立;上百个 → 共享
怎么知道整个系统在变好?追踪人本就在看的全局指标(合并耗时、贡献者数量、成本),并把这些指标回灌给 Improver Agent
最后一条尤其值得抄

把业务指标回灌给改进器,让它知道自己的修改到底有没有让整体变好,而不是只盯着单条反馈优化。

部署节奏:crawl-walk-run

爬 → 走 → 跑:先小范围只读观察,再半自动,最后才扩大自动化范围。

参考资料与脱敏说明

综述与课程

  • A Comprehensive Survey of Self-Evolving AI Agents — arXiv:2508.07407(System Inputs / Agent System / Environment / Optimiser 统一反馈环)
  • A Survey of Self-Evolving Agents: On the Path to ASI — arXiv:2507.21046
  • Stanford CS329A《Self-Improving AI Agents》(2025 秋) — cs329a.stanford.edu

L1 上下文 / 经验层

L3 架构层 / L4 权重层 / 离线范式

工业界实践

脱敏与事实核查说明

上述 arXiv 编号与会议归属均经公开来源检索核对。GEPA 的性能数字来自其论文摘要自述结果,适用于其评测设置,不应外推为普适结论。

Warp 案例(双层 Skill 架构、6 条准则、Issue Triage 链路、治理问答、规模数据、CEO 引语)均来自上述 Anthropic 官方博客,属公开可引用信息;规模数据为该文发布时(2026-08)口径。「两条路线怎么选」的对比表是本页归纳,用于串联两个来源不同的案例,不出自任何单一原始资料。

本页其余工程细节(白名单五类事件、写入量降至 0.5%–2%、置信度阈值 0.6、聚类 Jaccard 0.4、成簇 ≥ 2、最多 50 条 active、渲染预算 2000、时间类型序列化故障等)来自某企业级实现的内部架构文档,已做匿名化与通用化处理,去除了全部内部平台名、仓库标识、环境变量名与表名,不指向任何具体系统。这些数值是该系统的经验取值,不是通用最优值,请结合自身场景调参。

→ 阅读博客版《如何做 Agent 的 Self-Improving:一条可落地的工程路径》(含 6 张 SVG 图解)

↑