Agentic Context Engineering: Evolving Contexts for Self-Improving Language Models
ACE 将大模型应用中的上下文视为可持续演化的 playbook,而不是一次性写好的静态提示。它通过 Generator 产生执行轨迹,Reflector 从成功和失败中提取可复用经验,Curator 再以增量 delta 更新方式把经验合并进结构化上下文,从而缓解简短偏置和上下文坍缩。实验显示,ACE 在 AppWorld 智能体任务、金融分析、医疗推理和文本到 SQL 等场景中持续提升表现,并在适应延迟、rollout 数和部分 token 成本上优于 GEPA 与动态备忘录等强基线。
- 作者
- 机构
- Stanford University斯坦福大学
- SambaNova Systems, Inc.SambaNova Systems 公司
- UC Berkeley加州大学伯克利分校
读前先抓住结论
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 都会遭遇压缩压力。越想让它短,越会丢掉边界条件;越频繁重写,越可能把旧经验磨平。

这个图是整篇论文的动机图。它告诉我们,长上下文本身不是问题,真正的问题是缺少维护结构。如果上下文只是一个巨大字符串,每次都交给 LLM 改写,模型天然会做摘要、合并和删减;这些操作在人类读摘要时很方便,但对 agent 记忆来说可能是灾难,因为 agent 需要的恰恰是“某个 API 参数必须这样写”“某个错误提示意味着先查这个对象”这样的细节。
ACE 因此把上下文从“自然语言段落”改造成“条目化 playbook”。这一步很像把一篇散文改成知识库:每条经验都有局部语义,可以单独添加、查找、合并、删除。上下文仍然用自然语言呈现给模型,但其维护方式更接近数据结构。
ACE 的三角色闭环
ACE 的框架由 Generator、Reflector 和 Curator 三个角色组成。Generator 是任务执行者,它读取当前 playbook,在新问题上生成推理轨迹、工具调用和最终答案。Reflector 是经验抽取者,它读取轨迹、反馈和可用标签,把成功策略与失败原因提炼成候选洞见。Curator 是知识管理员,它决定哪些候选洞见应该进入 playbook,哪些应与旧条目合并,哪些应被丢弃。

这三个角色的分工很重要。很多自我改进系统会让同一个模型既执行任务又总结经验,还顺手重写提示。ACE 把职责拆开以后,每一步的输入输出更清楚:Generator 的产物是 trace,Reflector 的产物是 candidate bullets,Curator 的产物是 updated playbook。这样做的好处是调试时能定位问题:是执行轨迹质量差,还是反思抽取错了,还是整理器把坏条目合进去了。
Generator 使用当前 playbook 完成任务并留下轨迹
Reflector 读取轨迹与反馈,提炼可复用经验
Curator 将经验合并、去重、剪枝为结构化上下文
下一轮任务把更新后的 playbook 作为输入继续执行
可以把 ACE 看成一种不改权重的持续学习循环。每次任务执行都是一次数据采样,每次反思都是一次特征提取,每次整理都是一次知识库更新。区别在于,ACE 的“参数”不是神经网络权重,而是上下文条目。它牺牲了参数学习的隐式泛化,换来可解释、可编辑、可快速回滚的工程形态。
论文还强调 ACE 可以同时支持离线和在线适应。离线适应像系统提示优化:先在训练 split 上跑若干任务,生成 playbook,再在测试 split 上使用。在线适应则像 agent memory:系统一边服务新任务,一边把执行反馈写回上下文。两种场景共享同一套生成、反思和整理机制。
playbook、delta update 与 grow-and-refine
ACE 最关键的设计不是“三个 LLM 角色”本身,而是上下文表示。论文要求上下文由结构化、条目化 bullets 组成。每个 bullet 可以记录一个领域概念、一个工具调用规则、一个错误规避策略、一个代码片段或一个任务模式。条目越细,系统越容易局部更新;条目越结构化,后续检索和剪枝越可靠。

delta update 是防止坍缩的核心。假设已有 playbook 包含一百条经验,新任务暴露出三条新规则。传统做法可能让 LLM 读完旧 playbook 和新轨迹,然后写一版新的完整 playbook。ACE 不这样做,它只让 Reflector 生成少量 delta bullets,再由 Curator 把这几条合入旧结构。旧内容不被整体重写,自然就不容易被摘要化。
这里的 是当前 playbook, 是 Generator 的执行轨迹, 是反馈信号, 是 Reflector 抽取出的增量经验。ACE 的关键是更新 ,而不是每轮重写完整的 。
grow-and-refine 则解决另一个问题:如果只增长,playbook 会越来越长,最终检索困难、成本上升、条目冲突。ACE 允许新条目先进入上下文,保证经验不丢;当达到阈值或发现相似条目时,再合并重复内容、剪除低价值条目、重新组织结构。它不是一开始就压缩,而是在保留细节和控制规模之间做延迟整理。
1Require: initial playbook , task stream , feedback function 2Ensure: evolved playbook and task outputs 3for each query in :4 5 6 7 8 if or duplicates are detected:9 10return 这段伪代码概括论文方法: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 的新意并不在于使用更多模型调用,而在于给这些调用分配了可审计的责任。执行者负责产生事实,反思者负责解释事实,整理者负责维护状态。职责清楚以后,系统才有机会长期改进而不失控。
