演化与自我改进 · 2025

Agentic Context Engineering: Evolving Contexts for Self-Improving Language Models

ACE 将大模型应用中的上下文视为可持续演化的 playbook,而不是一次性写好的静态提示。它通过 Generator 产生执行轨迹,Reflector 从成功和失败中提取可复用经验,Curator 再以增量 delta 更新方式把经验合并进结构化上下文,从而缓解简短偏置和上下文坍缩。实验显示,ACE 在 AppWorld 智能体任务、金融分析、医疗推理和文本到 SQL 等场景中持续提升表现,并在适应延迟、rollout 数和部分 token 成本上优于 GEPA 与动态备忘录等强基线。

作者
Qizheng Zhang1Changran Hu2Shubhangi Upasani2Boyuan Ma2Fenglu Hong2Vamsidhar Kamanuru2Jay Rainton2Chen Wu2Mengmeng Ji2Hanchen Li3Urmish Thakker2James Zou1Kunle Olukotun1
机构
  1. Stanford University斯坦福大学
  2. SambaNova Systems, Inc.SambaNova Systems 公司
  3. UC Berkeley加州大学伯克利分校
进入中英精读arXivGitHub

读前先抓住结论

ACE 这篇论文讨论的不是“再写一个更好的系统提示”,而是一个更大的问题:当大模型应用变成 agent、工具调用系统、金融分析器或文本到 SQL 工作流时,真正决定表现的往往是一整套上下文资产。这里的上下文包括系统提示、任务说明、示例、历史轨迹、工具规则、失败经验、领域概念和检索证据。作者的判断很明确:上下文不应该被当成一次性输入,而应该像工程团队的 runbook 或 playbook 一样,在执行反馈中持续演化。

论文把现有上下文适应方法的核心失败概括为两个词。第一个是简短偏置:提示优化器常常偏好短而泛的指令,结果把真正有用的领域细节删掉。第二个是上下文坍缩:如果每次适应都让模型完整重写已有上下文,模型会把长经验压缩成摘要,细粒度规则和失败案例会一轮轮流失。对 AppWorld 这种需要 API 理解、代码执行和环境交互的 agent 来说,这两种失败都很致命。

ACE 的解法是把上下文表示成结构化条目组成的 playbook,并用三个角色维护它:Generator 执行任务并产生轨迹,Reflector 从成功和失败中提炼经验,Curator 把经验合并、去重、剪枝成可复用上下文。重点是增量 delta 更新:系统只把新洞见写成小块更新,而不是整段重写旧上下文。这个设计看起来朴素,但它直接击中了上下文坍缩的原因。

实验上,ACE 在 agent 和领域任务上都表现强。摘要里给出的关键数字是:agent 任务平均提升 10.6%,金融任务平均提升 8.6%;在 AppWorld 上,即使没有真实标签,ACE 也能利用执行反馈自我改进;在成本上,它因为减少完整提示重写和验证 rollout,适应延迟与 rollout 数明显低于 GEPA 等强基线。

为什么上下文成了 agent 的可学习资产

传统提示词优化通常把目标看成“找到一段更好的 instruction”。这在单轮任务里还能工作,但 agent 任务不是这样。一个 agent 需要记住 API 的奇怪边界、工具返回格式、代码执行失败的原因、某类用户目标的解法模板,以及某些中间状态如何影响下一步动作。如果这些经验只能被压缩成一句“注意仔细使用工具”,模型下次仍然会犯同样的错。

论文所说的 context adaptation 指的是通过修改输入上下文改善模型行为,而不是更新模型权重。这个定义故意很宽:系统提示、few-shot 示例、检索材料、外部记忆、任务轨迹总结都算上下文。它的优势是可解释、可审计、更新快、迁移成本低;工程上也更容易回滚一条坏规则,而不是回滚一次模型训练。

问题在于,很多方法只解决了“能不能更新上下文”,没有解决“如何长期维护上下文”。GEPA 这类提示演化方法会生成和选择完整提示候选,动态备忘录会维护外部策略摘要,ICL 会塞入示例。但当任务需要大量细节时,单一 prompt 或整段 cheatsheet 都会遭遇压缩压力。越想让它短,越会丢掉边界条件;越频繁重写,越可能把旧经验磨平。

论文展示的 context collapse:让模型反复完整重写上下文,会把原本丰富的经验压成更短、更泛的摘要,最终损害任务表现。
论文展示的 context collapse:让模型反复完整重写上下文,会把原本丰富的经验压成更短、更泛的摘要,最终损害任务表现。

这个图是整篇论文的动机图。它告诉我们,长上下文本身不是问题,真正的问题是缺少维护结构。如果上下文只是一个巨大字符串,每次都交给 LLM 改写,模型天然会做摘要、合并和删减;这些操作在人类读摘要时很方便,但对 agent 记忆来说可能是灾难,因为 agent 需要的恰恰是“某个 API 参数必须这样写”“某个错误提示意味着先查这个对象”这样的细节。

ACE 因此把上下文从“自然语言段落”改造成“条目化 playbook”。这一步很像把一篇散文改成知识库:每条经验都有局部语义,可以单独添加、查找、合并、删除。上下文仍然用自然语言呈现给模型,但其维护方式更接近数据结构。

ACE 的三角色闭环

ACE 的框架由 Generator、Reflector 和 Curator 三个角色组成。Generator 是任务执行者,它读取当前 playbook,在新问题上生成推理轨迹、工具调用和最终答案。Reflector 是经验抽取者,它读取轨迹、反馈和可用标签,把成功策略与失败原因提炼成候选洞见。Curator 是知识管理员,它决定哪些候选洞见应该进入 playbook,哪些应与旧条目合并,哪些应被丢弃。

ACE 框架:Generator 产生轨迹,Reflector 抽取经验,Curator 负责把候选经验写入结构化上下文。
ACE 框架:Generator 产生轨迹,Reflector 抽取经验,Curator 负责把候选经验写入结构化上下文。

这三个角色的分工很重要。很多自我改进系统会让同一个模型既执行任务又总结经验,还顺手重写提示。ACE 把职责拆开以后,每一步的输入输出更清楚:Generator 的产物是 trace,Reflector 的产物是 candidate bullets,Curator 的产物是 updated playbook。这样做的好处是调试时能定位问题:是执行轨迹质量差,还是反思抽取错了,还是整理器把坏条目合进去了。

1执行

Generator 使用当前 playbook 完成任务并留下轨迹

2反思

Reflector 读取轨迹与反馈,提炼可复用经验

3整理

Curator 将经验合并、去重、剪枝为结构化上下文

4复用

下一轮任务把更新后的 playbook 作为输入继续执行

可以把 ACE 看成一种不改权重的持续学习循环。每次任务执行都是一次数据采样,每次反思都是一次特征提取,每次整理都是一次知识库更新。区别在于,ACE 的“参数”不是神经网络权重,而是上下文条目。它牺牲了参数学习的隐式泛化,换来可解释、可编辑、可快速回滚的工程形态。

论文还强调 ACE 可以同时支持离线和在线适应。离线适应像系统提示优化:先在训练 split 上跑若干任务,生成 playbook,再在测试 split 上使用。在线适应则像 agent memory:系统一边服务新任务,一边把执行反馈写回上下文。两种场景共享同一套生成、反思和整理机制。

playbook、delta update 与 grow-and-refine

ACE 最关键的设计不是“三个 LLM 角色”本身,而是上下文表示。论文要求上下文由结构化、条目化 bullets 组成。每个 bullet 可以记录一个领域概念、一个工具调用规则、一个错误规避策略、一个代码片段或一个任务模式。条目越细,系统越容易局部更新;条目越结构化,后续检索和剪枝越可靠。

ACE 生成的 AppWorld 上下文片段:playbook 中可以包含领域洞见、工具规则和可直接复用的代码或操作策略。
ACE 生成的 AppWorld 上下文片段:playbook 中可以包含领域洞见、工具规则和可直接复用的代码或操作策略。

delta update 是防止坍缩的核心。假设已有 playbook 包含一百条经验,新任务暴露出三条新规则。传统做法可能让 LLM 读完旧 playbook 和新轨迹,然后写一版新的完整 playbook。ACE 不这样做,它只让 Reflector 生成少量 delta bullets,再由 Curator 把这几条合入旧结构。旧内容不被整体重写,自然就不容易被摘要化。

Ct+1=Curate(Ct,Δt),Δt=Reflect(τt,ft)C_{t+1}=\operatorname{Curate}(C_t,\Delta_t),\quad \Delta_t=\operatorname{Reflect}(\tau_t, f_t)

这里的 CtC_t 是当前 playbook,τt\tau_t 是 Generator 的执行轨迹,ftf_t 是反馈信号,Δt\Delta_t 是 Reflector 抽取出的增量经验。ACE 的关键是更新 Δt\Delta_t,而不是每轮重写完整的 CtC_t

grow-and-refine 则解决另一个问题:如果只增长,playbook 会越来越长,最终检索困难、成本上升、条目冲突。ACE 允许新条目先进入上下文,保证经验不丢;当达到阈值或发现相似条目时,再合并重复内容、剪除低价值条目、重新组织结构。它不是一开始就压缩,而是在保留细节和控制规模之间做延迟整理。

AlgorithmACE context adaptation loop
1Require: initial playbook C0C_0, task stream QQ, feedback function FF2Ensure: evolved playbook CC and task outputs YY3for each query qtq_t in QQ:4  yt,τtGenerator(qt,Ct)y_t, \tau_t \leftarrow Generator(q_t, C_t)5  ftF(yt,τt)f_t \leftarrow F(y_t, \tau_t)6  ΔtReflector(τt,ft,Ct)\Delta_t \leftarrow Reflector(\tau_t, f_t, C_t)7  Ct+1Curator.merge(Ct,Δt)C_{t+1} \leftarrow Curator.merge(C_t, \Delta_t)8  if length(Ct+1)>thresholdlength(C_{t+1}) > threshold or duplicates are detected:9    Ct+1Curator.refine(Ct+1)C_{t+1} \leftarrow Curator.refine(C_{t+1})10return CT,YC_T, Y

这段伪代码概括论文方法:Generator 执行任务,Reflector 从轨迹和反馈中抽取增量经验,Curator 合并并在必要时去重剪枝。注意更新对象是 playbook 的局部 delta,而不是完整上下文。

从工程角度看,ACE 至少需要四类数据结构:任务轨迹日志、反馈记录、候选经验条目、当前 playbook。轨迹日志要足够详细,否则 Reflector 无法知道失败发生在哪里;反馈记录要足够可靠,否则系统会把错误经验写入上下文;候选条目要有边界和适用条件,否则容易泛化过度;playbook 要能按任务检索,否则长上下文只会变成噪声。

实验结果怎么读

论文的实验不是只看一个榜单,而是围绕一个问题展开:当任务需要长期保留细节时,ACE 是否比静态提示、提示搜索和动态记忆更有效。作者选择了两类任务。第一类是 AppWorld 这样的 agent benchmark,指标包括任务目标完成率和场景目标完成率。第二类是金融分析、医疗推理和文本到 SQL,指标主要是准确率。

AppWorld 的结果最能说明 ACE 对 agent 的价值。正文表格显示,在 DeepSeek-V3.1 底座上,ReAct 加 ACE 在离线和在线设置中都优于 ReAct、ICL、GEPA 和动态备忘录。尤其重要的是无真实标签设置:ACE 仍能利用代码执行成功与否、环境返回和任务反馈形成经验,说明它不完全依赖人工标注。

金融任务展示的是另一种能力。金融分析需要记住 XBRL 规则、财务概念、公式边界和题目常见陷阱。短提示很容易把这些细节压掉,而 ACE 的 playbook 可以持续保存它们。论文报告金融任务平均提升 8.6%,并指出有可靠标签时收益更稳定;如果没有可靠反馈,ACE 和动态备忘录都可能退化。

ACE 擅长的反馈

代码执行成功或失败;环境状态变化;标准答案;可验证的公式结果;SQL 执行结果;任务目标是否完成。

ACE 容易受伤的反馈

模糊主观评价;错误标签;无法定位原因的失败;反思器过度泛化;把偶然经验写成通用规则。

跨模型实验说明 ACE 不是 DeepSeek-V3.1 的专属技巧。作者在 GPT-OSS-120B、GPT-5.1 和 Llama-3.3-70B-Instruct 上也报告了收益。不过收益幅度随模型能力变化:较弱模型可能无法充分利用复杂 playbook,强模型则更能把细粒度上下文转成正确行动。

消融实验是判断论文可信度的关键。去掉 Reflector、多轮适应、离线 warmup 或增量更新都会削弱效果,特别是增量上下文更新的消融直接支持了论文主张:ACE 不是因为“提示更长”而变好,而是因为它用局部 delta 保存经验,避免上下文被整段重写破坏。

成本、缓存与工程实现

ACE 容易被质疑的一点是:playbook 越来越长,会不会更贵、更慢?论文的回答分成两层。第一,适应阶段 ACE 反而更省,因为它不用像 GEPA 那样反复生成和验证完整提示候选,也不用像某些动态记忆方法那样频繁重写整份备忘录。正文给出的例子是,AppWorld 离线适应中 ACE 相比 GEPA 降低 82.3% 适应延迟和 75.1% rollout 数。

第二,评估阶段长上下文确实会增加输入长度,但成本不是线性灾难。作者强调 KV cache 复用:如果多个查询共享同一个 playbook,系统可以缓存上下文前缀,后续请求只需要为新增 query 和生成部分付出较多计算。也就是说,ACE 更像为一个任务族维护共享工作手册,而不是每个请求重新从零塞入所有材料。

先在训练任务上演化 playbook,再固定到测试任务使用,适合系统提示优化和发布前调参。

复现 ACE 时,最容易忽视的是日志质量。Generator 的轨迹不能只保存最终答案,必须保存关键中间步骤、工具调用、错误信息和环境反馈。Reflector 需要看到“为什么成功”或“为什么失败”,而不是只看到一个分数。Curator 则需要条目格式约束,否则新经验会变成松散自然语言,后续难以去重。

附录中的 prompt 图也很重要。它们公开了 ICL、动态备忘录、GEPA 以及 ACE 三个角色的提示模板。对读者来说,这些 prompt 是把论文方法落地的接口:Reflector 如何要求模型提炼经验,Curator 如何判断重复和冲突,Generator 如何读取 playbook 并执行任务,都会影响最终效果。

与 GEPA、动态备忘录和 agent memory 的差异

ACE 和 GEPA 的共同点是都不更新模型权重,都利用执行反馈改善上下文。差异在表示和更新机制。GEPA 更像提示版本搜索:生成完整 prompt 候选,评估并选择较好的版本。ACE 更像知识库维护:把经验拆成条目,用 delta 更新局部合并。前者适合压缩成一个强提示,后者适合长期保留很多具体规则。

ACE 和动态备忘录也相近,因为二者都收集测试时经验。论文认为动态备忘录主要适合单轮推理任务,例如数学题或独立问答;ACE 则面向 AppWorld 这类多轮 agent 和金融这类知识密集任务。在这些场景里,经验不是几条启发式就够,而是需要保留步骤、工具参数、异常情况和领域规则。

Agent memory 相关工作证明外部记忆能提升 agent 的适应性和效率。ACE 继承了这个方向,但它的范围更广:它不仅存储过去轨迹,还把系统提示、领域规则、错误教训、代码片段和任务策略统一成可演化上下文。换句话说,ACE 是 memory、prompt optimization 和 test-time adaptation 的交叉。

这种差异也决定了适用场景。如果任务简单、反馈少、经验不能复用,ACE 可能显得过重。若任务复杂、可反复执行、反馈明确、失败模式可总结,ACE 就很有吸引力。例如企业内部数据分析 agent、API 操作 agent、财务问答系统、SQL agent 和客服流程 agent,都可能从 playbook 式上下文中受益。

局限、失败场景与复用建议

ACE 的最大局限是反馈质量。Reflector 只能从轨迹和反馈中抽取经验;如果反馈本身错误、延迟很长或无法归因,抽取出的经验就可能误导系统。金融实验中无可靠反馈时性能可能下降,正说明上下文适应不是无条件自我改进。

第二个风险是 Reflector 过度泛化。一次任务失败可能只是偶然 API 状态、输入格式或模型采样问题,但 Reflector 可能把它总结成通用规则。Curator 需要检查适用条件,把经验写成“在什么情况下使用”,而不是写成无条件命令。否则 playbook 会变成一堆互相冲突的格言。

第三个边界是上下文规模。Grow-and-refine 可以缓解无限增长,但剪枝本身也会犯错。删得太早会丢经验,删得太晚会增加成本并干扰模型注意力。实际系统中最好把 playbook 设计成可检索结构,并保留条目版本、来源任务、最近使用时间和成功率等元数据。

如果要把 ACE 用到自己的 agent 项目,可以从一个很小的闭环开始:让 agent 执行任务并保存 trace;用一个 Reflector prompt 生成三到五条经验;要求每条经验包含适用条件、动作建议和证据;再由 Curator 判断是否新增、合并或拒绝。先不要追求自动化到极致,先让 playbook 可读、可审计、可手动修。

最终,ACE 的价值在于把“上下文工程”从手工 prompt 技巧提升为一种系统状态管理问题。它提醒我们:未来的自我改进 agent 未必都要改权重,很多时候只要把经验记录得足够细、更新得足够稳、反馈用得足够准,系统就能在不训练模型的情况下持续变好。

从论文到系统:如何把 ACE 落成产品能力

把 ACE 落到真实产品时,第一步不是写复杂 agent,而是定义上下文条目的 schema。一个可用条目至少应该包含:适用任务、触发条件、建议动作、证据来源、最近验证时间、冲突条目和置信度。这样 Curator 才能判断一条新经验应该新增、合并、覆盖还是拒绝。如果只保存一段自由文本,后续系统仍然会退回“整段重写”的老路。

第二步是把执行轨迹做成可反思的日志。很多 agent 只保存最终答案,这对 Reflector 几乎没有帮助。更有用的日志应包括用户目标、计划、工具调用参数、工具返回、代码报错、环境状态变化、最终评分和失败定位。Reflector 需要从这些证据里抽取“下次遇到同类情况应该怎么做”,而不是泛泛写一句“要更仔细”。

第三步是给 Curator 设置拒绝权。自我改进系统最危险的不是没有学习,而是把坏经验学得太快。Curator 应该能拒绝缺少证据的条目、适用范围过宽的条目、和现有高置信条目冲突的条目,以及来自低质量反馈的条目。对高风险业务,还可以要求新条目先进入候选区,经过若干验证任务后再升为正式 playbook。

第四步是设计回滚和观测。每个 playbook 版本都应该能追溯到哪些任务、哪些反馈和哪些 Reflector 输出。线上表现下降时,工程团队需要能快速定位最近加入的条目,并回滚某一批 delta。这个版本化视角也是 ACE 比隐式微调更容易落地的原因之一:上下文条目是人能读懂、能审查、能删除的。

最后要把 ACE 和检索结合起来。论文强调长上下文模型可以承载丰富 playbook,但真实系统仍然需要按任务选择相关条目。一个实用方案是把 playbook 分成全局规则、工具规则、领域概念、错误案例和任务模板几类;Generator 接收当前任务时,先检索最相关的条目,再附上少量全局约束。这样既保留 ACE 的经验积累能力,也避免每次都把完整上下文塞给模型。

这也是这篇论文最值得复用的地方:它没有把 agent 自我改进神秘化为“模型会自己变聪明”,而是把改进拆成可观测的系统动作。轨迹是数据,反馈是监督信号,Reflector 是经验抽取器,Curator 是知识库维护器,playbook 是可版本化状态。只要这些对象被清楚建模,很多现有 agent 系统都可以逐步接入 ACE 的思想。

复现时最应该盯住的细节

复现 ACE 时,最先要确定的是任务反馈到底是什么。AppWorld 里有代码执行、环境状态和目标完成情况,这些信号相对明确;金融和医疗任务里可以使用标准答案;文本到 SQL 可以使用执行结果或准确率。若反馈只是模糊的自然语言评价,Reflector 很难判断一条经验是否真实有效。ACE 的自我改进不是凭空发生,而是把反馈转写成上下文条目,所以反馈越稳定,playbook 越可靠。

第二个细节是反思粒度。Reflector 生成的经验不能太短,也不能太宽。太短会变成“注意检查工具返回”这种无用提示,太宽会把一个偶然失败写成普遍规则。比较好的经验应该长得像“当 AppWorld 中需要查询日历事件但 API 返回空列表时,先确认用户指定的时间范围是否被归一化到正确时区,再决定是否创建新事件”。这样的条目有场景、有动作、有原因,也更容易被 Curator 判断是否重复。

第三个细节是条目之间的冲突。长期运行的 agent 很可能遇到相反经验:某个 API 在旧版本需要字符串参数,新版本需要对象参数;某个金融指标在不同报表体系中有不同解释。ACE 的论文没有把冲突解决展开成一个复杂数据库系统,但工程实现时必须记录来源、时间、适用范围和优先级。否则 playbook 越学越多,模型看到的不是知识,而是一堆互相打架的建议。

第四个细节是上下文检索。论文强调长上下文模型让丰富 playbook 成为可能,但这不意味着每次都应该塞入完整 playbook。更稳的做法是按任务类型、工具、领域和错误模式检索相关条目,再附上少量全局原则。这样可以降低输入成本,也能减少模型被无关经验干扰。换句话说,ACE 负责让知识增长,检索负责让知识在正确时刻出现。

第五个细节是评估切分。离线适应必须在训练 split 上演化上下文,然后在测试 split 上冻结或按协议使用;在线适应则要明确任务流顺序,避免未来信息泄露。论文之所以反复区分 offline 和 online,就是因为这两种设置回答的问题不同。离线设置更像发布前调参,在线设置更像真实系统边服务边学习。混淆二者会让结果看起来更好,但不再说明真实泛化能力。

第六个细节是标签可用性。ACE 的一个亮点是没有真实标签时仍能利用自然执行反馈,但这并不等于所有无标签任务都适合。AppWorld 的执行环境会告诉你代码是否成功、目标是否推进,这已经是很强的反馈。若任务没有可验证结果,Reflector 只能凭模型自评总结经验,错误会更容易积累。因此读论文结果时,要把“无真实标签”理解为“仍有执行反馈”,而不是“完全没有监督信号”。

第七个细节是成本统计口径。ACE 的 playbook 可能更长,单次请求输入 token 也可能增加;但适应阶段的 rollout 数、完整提示重写次数和验证成本会下降。论文把适应阶段和评估阶段分开统计,是为了避免用单一 token 数误判系统效率。实际部署时,也应该分别看构建 playbook 的成本、每次调用的边际成本、缓存命中率和因性能提升节省的重试成本。

第八个细节是 prompt 模板。附录中的 Generator、Reflector 和 Curator prompt 不是装饰材料,而是方法实现的一部分。Generator prompt 决定模型如何使用 playbook,Reflector prompt 决定经验是否具体,Curator prompt 决定是否合并或拒绝条目。复现失败时,不要只看主算法,也要检查这些角色提示是否把输入输出格式、证据要求和拒绝条件写清楚。

从结果阅读角度,AppWorld 表格最重要的是同时看普通分割和挑战分割。普通分割能说明方法是否提升常规任务,挑战分割更能说明 playbook 是否保存了可迁移的复杂策略。ACE 在挑战分割上的表现尤其有意义,因为这类任务更容易暴露工具调用顺序、代码修复和环境理解方面的短板。

金融表格则要关注有无真实标签。带标签时 ACE 能显著提升,说明它擅长把领域知识写成可复用上下文;无标签时部分方法可能退化,说明反馈质量是边界。这个结果反而让论文更可信,因为它没有宣称上下文演化在所有场景都会自动变好,而是指出了可靠反馈的必要性。

消融表格要按机制读,而不是只看最高分。去掉 Reflector 后,系统缺少从轨迹抽取经验的能力;去掉多 epoch 后,playbook 少了反复强化和整理的机会;去掉离线 warmup 后,在线系统从更弱初始上下文出发;去掉增量更新后,系统又回到容易坍缩的整段重写。每一个消融对应 ACE 方法链条中的一个环节。

鲁棒性实验提供了部署提醒。较弱 Reflector 仍有收益,说明不一定每个角色都要用最贵模型;但有害反馈频繁出现时性能下降,说明 Curator 不能只是无条件接收。生产系统可以加入规则校验、回放测试、小流量验证和人工审核,把新经验先放进候选区,再逐步提升权限。

超参数实验也有工程意义。反思轮数控制思考深度,去重阈值控制合并力度,剪枝触发长度控制上下文规模。论文发现合理范围内结果比较稳定,这对复现是好消息:读者不必精确找到某个神奇参数。但极端值仍然危险,反思太少会漏经验,反思太多会产生噪声,剪枝太激进会删掉关键规则。

把 ACE 和传统 RAG 放在一起看,也能看出差异。RAG 通常检索外部知识回答当前问题,知识本身不一定因为执行反馈而变化。ACE 的 playbook 则是系统自己在任务中生成和维护的经验,它更像“运行后知识”。二者可以结合:RAG 提供外部事实,ACE 记录如何使用这些事实、哪些工具步骤有效、哪些错误需要避免。

把 ACE 和微调放在一起看,差异也很清楚。微调把经验写进权重,优点是推理时不需要长上下文,缺点是更新慢、难解释、难回滚。ACE 把经验写进上下文,优点是透明、可编辑、可按任务检索,缺点是需要管理上下文长度和反馈质量。对于快速变化的工具型 agent,ACE 这种外部状态往往比频繁微调更实际。

一个合理的落地路线是先做离线 ACE。团队可以收集一批历史任务轨迹,在离线环境中生成初版 playbook,再让人审查高风险条目。等离线 playbook 证明有效后,再打开在线增量更新,并设置更严格的监控和回滚。这样能降低自动学习带来的风险,也更符合企业系统逐步上线的节奏。

另一个可行路线是只采用 ACE 的 Curator 思想。即使暂时不做自动 Reflector,也可以让人工或规则系统产生候选经验,再用 Curator 统一管理条目、合并重复、记录来源、维护版本。很多团队的问题不是没有经验,而是经验散落在文档、工单和聊天记录里。ACE 提供了一种把这些经验变成可执行上下文的组织方式。

读完这篇论文,最不应该带走的结论是“上下文越长越好”。更准确的结论是:上下文需要被组织、被验证、被增量维护。ACE 的贡献在于提出一个可以运行的维护闭环,并用实验说明这个闭环在 agent 和领域任务中有效。长上下文只是承载 playbook 的基础设施,真正产生价值的是条目化经验、反馈驱动更新和防止坍缩的工程纪律。

对正在做 agent 产品的人来说,ACE 还提供了一个很实用的诊断清单。第一,系统是否会重复犯同一种错。如果会,说明失败经验没有被保存成可复用上下文。第二,系统是否在提示越来越长后表现反而变差。如果会,说明上下文可能缺少结构化检索和剪枝。第三,团队是否无法解释某次自动优化到底改了什么。如果无法解释,说明更新机制过于黑箱,应该从整段重写切到 delta 条目。

一个小团队可以先在单一工具链上试验 ACE。比如内部报表 agent 经常需要查询数据库、解释指标、生成图表。团队可以让 agent 每次失败后保存 SQL、错误信息、修复后的 SQL、指标解释和用户反馈。Reflector 从这些日志里提炼“某类指标要过滤哪些状态”“某张表的时间字段如何解释”“某个错误通常表示 join 条件缺失”。Curator 再把这些经验写成条目,下一次相似问题就能直接复用。

客服或运营 agent 也适合这个思路。很多流程不是难在推理,而是难在规则多、例外多、政策更新快。ACE 的 playbook 可以保存“退款场景先检查订单状态”“某类优惠券不能和会员折扣叠加”“当用户缺少凭证时应先索取哪些信息”。这些条目不需要进入模型权重,却能随着业务变化快速更新。相比把所有规则写进一段系统提示,条目化维护更容易审计和下线。

代码 agent 的迁移方式也很直接。Generator 是实际改代码和跑测试的模型,Reflector 读取失败测试、编译错误和修复 diff,提炼仓库特有经验,例如“这个项目的异步任务必须通过某个 helper 包装”“修改 schema 后要同步更新生成文件”“某个测试 fixture 依赖固定时区”。Curator 把这些经验写入仓库级 playbook。长期看,这比每次让模型重新阅读所有历史 PR 更可控。

不过,ACE 不应该替代单元测试、权限控制和人工 review。它保存的是经验,不是真理。任何会改变生产行为的条目,都应该能追溯到证据,并在高风险场景中经过验证。尤其是金融、医疗和权限敏感系统,Reflector 的自然语言总结不能直接当作合规规则。更稳妥的做法是把 ACE 产出的条目作为候选建议,再经过规则检查或人工审核进入正式上下文。

论文中的 AppWorld 结果也提醒我们,ACE 更适合有环境反馈的任务。API 调用成功与否、代码执行结果、SQL 查询结果、自动化测试结果,都是很好的反馈。相反,如果任务只靠模型自己判断答案好不好,系统就容易陷入自我确认。实践中可以优先把 ACE 用在“能跑、能测、能回放”的 agent 上,再逐步扩展到主观任务。

还要注意 playbook 的生命周期。刚开始,playbook 可能很小,任何新经验都值得加入;运行一段时间后,新增条目会越来越多,重复和冲突也会增加。此时需要定期生成报告:哪些条目最近被频繁使用,哪些条目从未命中,哪些条目命中后反而导致失败,哪些条目和新业务规则冲突。ACE 论文中的 grow-and-refine 可以看成这个生命周期管理的基础版本。

如果把 ACE 做成平台能力,最有价值的界面可能不是聊天窗口,而是 playbook 管理台。团队需要看到条目列表、来源任务、适用范围、最近效果、版本历史和回滚按钮。这样开发者才能相信系统的自我改进是真实可控的,而不是模型在后台悄悄改提示。这个管理台也能帮助业务专家参与:他们不必懂模型训练,只要审查和修订上下文条目。

从研究角度看,ACE 也留下了不少开放问题。比如,Curator 的合并策略能否形式化成更强的冲突检测;playbook 检索能否和任务规划联合优化;不同条目的置信度如何估计;错误经验如何自动发现并撤销;多 agent 系统中不同角色是否应该共享同一个 playbook。这些问题都说明,context engineering 已经接近一个系统研究方向,而不只是 prompt 写作技巧。

这篇论文最有启发的地方,是它把“智能体会从经验中学习”拆成了普通工程师能实现的几件事:记录轨迹,解释反馈,写入条目,整理上下文,评估效果。每一步都不神秘,每一步也都可能出错。ACE 的价值就在于给这些步骤一个清晰的闭环,让自我改进从一句愿景变成可以调试、可以复现、可以上线的系统机制。

附录里的 prompt 模板值得单独读。ICL 的模板主要告诉模型如何利用示例,动态备忘录的模板强调把经验写进 cheatsheet,GEPA 的模板服务于提示变体优化,而 ACE 的三类模板分别约束执行、反思和整理。它们之间的差异,其实就是几种上下文适应范式的差异:示例驱动、摘要驱动、提示搜索驱动和 playbook 维护驱动。读这些模板时,不要只看措辞,而要看每个角色被允许产出什么结构。

ACE Generator prompt 的关键是让模型把 playbook 当作行动依据,而不是背景材料。一个弱实现常见的问题是:虽然把经验塞进了上下文,但模型仍然按自己的默认习惯行动。更好的提示会要求模型在计划和工具调用前显式检查相关条目,并在必要时引用具体规则。这样 playbook 才能真正影响执行轨迹。

ACE Reflector prompt 的关键是证据约束。它不能只要求模型“总结经验”,还要要求模型说明经验来自哪条轨迹、哪个错误、哪个成功动作,以及该经验适用于哪些未来情况。没有证据约束的 Reflector 很容易产生听起来合理但无法验证的建议,这正是上下文污染的来源。

ACE Curator prompt 的关键是维护动作。它需要区分新增、合并、更新、拒绝和剪枝。新增用于保存全新经验,合并用于处理重复经验,更新用于修正旧规则,拒绝用于挡住无证据或过宽的建议,剪枝用于控制规模。只要 Curator 没有这些动作,ACE 就会退化成“把所有反思都追加到记忆末尾”的简单系统。

图表也应该按论证链来读。Figure 2 说明为什么整段重写危险,Figure 4 说明 ACE 如何拆分职责,Figure 3 说明生成出的 playbook 具体长什么样,主结果表说明方法是否有效,成本表说明方法是否可用,消融表说明哪些设计不可缺。把这些图表连起来,才能看出论文不是单点技巧,而是一套从问题诊断到系统设计再到实验验证的完整方案。

对于站在研究视角的读者,ACE 还提出了一个更深的问题:当上下文越来越长、越来越结构化、越来越像外部程序状态时,大模型系统的“学习”边界在哪里。过去我们常把学习等同于权重更新,但 ACE 展示了另一种路径:系统可以通过可编辑的外部上下文积累经验,并在推理时调用这些经验。它不是参数学习,却能表现出任务级改进。

对于站在产品视角的读者,ACE 的意义更直接:不要让 agent 的经验只停留在日志里。日志如果不能被反思、整理和复用,就只是事后排错材料;一旦日志能变成 playbook,它就成了下一轮推理的输入。很多 agent 产品从演示走向稳定生产,缺的正是这层把历史经验转成运行时能力的机制。

因此,这篇论文可以和 AFlow、AgentSquare 这类自动优化 workflow 的工作放在一起看。AFlow 优化的是工作流代码或算子组合,AgentSquare 搜索的是模块化 agent 设计空间,ACE 优化的是围绕模型的上下文状态。三者都在回答同一个大问题:agent 系统如何利用反馈改善自己。区别在于,ACE 选择了最透明、最容易上线的一条路,也就是持续维护上下文。

最终评价 ACE 时,可以用三个标准。第一,它是否保留了比普通提示更多的可操作细节。第二,它是否避免了长期更新中的上下文坍缩。第三,它是否在真实成本约束下仍然提升任务表现。论文的实验大体围绕这三个标准展开,也给后来者留下了清晰的复现路线:先证明 playbook 有用,再证明增量维护必要,最后证明成本和风险可控。

还有一个容易被忽略的点:ACE 把“经验”从模型内部移到了系统外部,因此组织边界也变得清楚。不同团队可以维护不同 playbook,不同业务线可以共享一部分全局规则又保留自己的局部经验,不同版本可以并行 A/B 测试。这种外部化让 agent 的学习过程更像软件配置管理,而不是不可见的模型漂移。对企业应用来说,这种可治理性可能和准确率提升同样重要。

如果未来继续扩展 ACE,一个自然方向是把条目质量纳入自动评估。比如每条经验可以记录命中次数、命中后的成功率、最近一次导致失败的任务、与其他条目的冲突数量。Curator 不只根据语义相似度合并条目,还可以根据这些运行指标调整优先级。这样 playbook 就不只是文本集合,而会变成带统计反馈的运行知识库。

另一个方向是多 agent 共享上下文。一个复杂系统里,规划 agent、执行 agent、审查 agent 和数据分析 agent 可能需要不同视角的经验。共享全部 playbook 会造成噪声,完全隔离又会浪费经验。ACE 的条目化表示为这种分层共享提供了基础:全局层保存通用约束,角色层保存职责经验,任务层保存领域规则,临时层保存当前会话状态。

所以,ACE 的核心启发不是某个具体数字,而是一种设计哲学:把上下文当作系统状态来维护。状态需要结构、版本、验证、回滚、检索和生命周期管理。只要沿着这个方向理解,论文中的 Generator、Reflector 和 Curator 就不只是三个提示词角色,而是自我改进 agent 系统中三类长期存在的工程职责。

从这个角度回看全文,ACE 的新意并不在于使用更多模型调用,而在于给这些调用分配了可审计的责任。执行者负责产生事实,反思者负责解释事实,整理者负责维护状态。职责清楚以后,系统才有机会长期改进而不失控。