厦门大学团队如何让AI程序员又聪明又不“忘事“?
这项由厦门大学多媒体可信感知与高效计算教育部重点实验室联合微软研究人员开展的研究以预印本形式发布于2026年4月论文编号为arXiv:2604.11716有兴趣深入了解的读者可以通过该编号查询完整论文。**一个程序员AI的烦恼**假设你是一位公司里的高级程序员每天要帮同事修复代码错误。你的工作方式是这样的同事发来一个问题你打开代码库翻阅相关文件思考哪里出了问题然后动手修改。整个过程可能要来回操作几十次查看文件、运行测试、分析报错信息、再修改……现在AI也被训练来做这种事了。这类任务在学术界被称为软件工程任务SWE任务简单说就是让AI自动找到真实代码仓库里的Bug并把它修好。这听起来很酷但背后有一个长期被忽视的麻烦——AI在做这件事的时候到底该怎么思考厦门大学的研究团队发现现有的AI程序员普遍存在两种极端问题任何一种都会让它的表现大打折扣。这项研究提出的解决方案叫做**SWE-AGILE**它的核心是一套被称为动态推理上下文的工作机制像给AI装上了一套高效的记忆管理系统。**一、AI程序员面临的两难困境要么浅尝辄止要么撑爆记忆**要理解SWE-AGILE解决了什么问题得先理解AI在多轮工作时的记忆是怎么运作的。你可以把AI的上下文窗口理解成一张有限大小的工作桌。AI每次思考都要把相关的内容——历史操作记录、代码片段、工具返回的信息、自己之前写下的分析——全部摊开放在这张桌子上才能做出下一步判断。桌子的面积是有限的放的东西越多找到有用信息的难度就越大甚至会出现明明放在桌上却怎么也找不到的情况。现有的AI程序员大致分成两派来应对这个问题。第一派是浅思考派代表是SWE-Dev、SWE-smith这类系统。它们每走一步只写下简短的想法备注就像一个只会说我要查这个文件然后就去查的助手思考过程非常浅。好处是桌面不会变乱但坏处同样明显遇到真正复杂的问题比如一个隐藏在多个文件交互逻辑中的Bug浅薄的思考根本不够用很容易走弯路或做错判断。第二派是深思考派也就是近年大热的推理模型比如OpenAI o1、DeepSeek-R1。这类模型会在每一步都写下大量详细的分析过程——这种方式叫做链式思维Chain-of-ThoughtCoT。研究人员发现越长、越详细的思考过程往往对应越准确的答案。但把这种方式用到需要几十轮操作的程序修复任务上就会遇到一个灾难性的问题每走一步桌子上就要多摆一大堆思考记录很快桌面就会被塞满。桌面塞满之后会发生什么一方面AI处理这么长的内容需要消耗巨量的计算资源训练速度会急剧下降另一方面更致命的是一个被研究人员称为迷失在中间Lost-in-the-Middle的现象——当桌上堆满了东西AI反而无法准确找到它需要的信息就像在一张塞满文件的乱桌子上找一张便利贴反而比整洁的桌子更难找。还有第三种做法允许AI深度思考但思考完之后立刻把思考记录丢掉只保留最终的操作指令。这样桌面确实保持整洁了但代价是每走新的一步AI都得从头把整个情况重新想一遍——就像一个每次开会都要从零开始熟悉项目背景的工程师极其低效。研究团队用实验验证了这个困境的真实性。在基础测试中保留完整推理历史深思考全留方案的成功率只有12.42%而把推理历史全丢、每步只保留最新思考当前步骤思考方案的成功率反而达到了15.83%。这个反直觉的结果清楚地说明更多信息如果没有被妥善管理反而是负担。**二、SWE-AGILE的解法给AI装一套滑动记忆窗口**SWE-AGILE的核心思想可以用一位经验丰富的侦探处理案件档案的方式来理解。侦探每天都在调查新线索、翻阅文件、走访证人。他的工作台面积有限不可能把所有卷宗都摊开。他的做法是最近几天的调查笔记完整保留在桌面随时可以翻看更早的笔记则被整理成一份简明摘要——第三天走访了嫌疑人A确认了其不在场证明排除嫌疑——只保留关键结论不保留完整思考过程。这样侦探既能回顾最近的调查细节保持思路连贯又不会被远古卷宗淹没。SWE-AGILE就是这样运作的。每一个工作步骤AI都被要求生成三个严格有序的部分首先是详细的推理过程用标签包裹这是AI真正动脑筋的地方其次是一份对这次推理的压缩摘要叫做推理摘要Reasoning Digest最后才是实际的工具调用操作比如查看这个文件的第50到80行。关键在于这三个部分如何进入历史记录。推理摘要和操作记录会被永久保存而详细的推理过程只有最近N步N是一个随机设置在2到5之间的数的完整内容会留着更早的详细推理会被其对应的摘要替代从历史上消失。这个N步的范围就是滑动推理窗口它保证AI在做下一步决策时既能看到最近几步自己完整的思考脉络又不会被几十步之前的冗长分析淹没。这个设计产生了一种被研究团队形象地称为锯齿形的上下文增长模式。在窗口内每步都有完整的深度推理上下文快速增长当某步的推理滑出窗口范围它就被压缩成摘要上下文随之收缩——增长与压缩交替出现形成像心电图一样的锯齿形曲线而不是像全留方案那样一路直线飙升直到撑爆。**三、训练的难题如何让AI真正学会按规则记忆**设计出这套记忆管理机制只是第一步更难的问题是怎么训练AI去真正掌握这套规则通常训练AI的方式是把它做过的所有操作记录排成一条长序列让AI从头到尾学习。但这种训练方式和SWE-AGILE的实际工作方式之间存在一个根本矛盾训练时AI能看到所有历史推理细节但工作时窗口外的推理细节已经被替换成摘要根本不存在了。用这种方式训练出来的AI就像一个人在考试时能查书但实际工作时却没有书——它学到的是一种在现实中不存在的条件下的行为。为了解决这个矛盾研究团队发明了轨迹快照训练Trajectory Snapshot Training。做法是把一条完整的工作轨迹拆分成若干快照每个快照代表AI在某个特定步骤时的视角——在那个视角下窗口外的历史推理已经被替换成摘要。每个快照就是一个独立的训练样本AI要学的只是在这个视角下如何生成正确的推理、摘要和操作。具体来说每个快照由两部分组成。一部分是冻结的背景计算损失时被屏蔽它完整模拟了推理时的动态上下文状态包含窗口内的完整历史推理和窗口外被压缩成摘要的历史另一部分是主动学习目标也就是AI在当前步骤需要生成的完整三件套详细推理、推理摘要、操作指令。这样每一条完整轨迹被拆成T个快照每个快照都精确还原了AI在那个时刻应该看到什么和生成什么训练与推理之间的鸿沟就被填平了。**四、让AI学会深度思考反填数据合成流水线**训练这套系统还面临另一个现实困难现有的成功轨迹数据比如开源数据集SWE-Dev里的记录里面的思考过程都非常浅薄——大多数只是简单的一句话说明意图完全没有SWE-AGILE所需要的那种深度分析。拿这种浅薄的数据去训练不仅无法教会AI深度推理实验还证明这反而会损害AI的能力成功率从基础的15.83%掉到了14.83%。为了解决这个数据问题研究团队设计了一套事后反填Hindsight Backfill数据合成流水线。这个方法的灵感来自于一个很有趣的思路如果你已经知道了答案回过头来解释为什么这个答案是对的要比从零开始推导容易得多而且质量更高。具体操作是这样的拿一条原始的浅薄成功轨迹在每个步骤上用一个能力强大的推理模型研究团队使用了Qwen3-235B来补写详细推理和推理摘要。补写时这个强大模型会拿到三样东西作为参考第一是那个步骤对应的正确操作也就是答案确保补写出来的推理必然朝着正确结论走第二是原始轨迹中那一步的浅薄想法作为语义提示确保新推理和原始意图保持一致第三是模拟了动态上下文约束的历史信息也就是窗口外的部分已经被替换成摘要——这保证了合成的推理不仅格式正确而且与运行时的实际条件完全匹配。最终每个步骤的浅薄记录就被升级成了包含详细推理和摘要的完整三元组而不用从零收集新轨迹。这种方式在数据效率上极具优势——研究团队仅用了2200条轨迹来自SWE-Dev原始19300条中的精选高质量子集就完成了冷启动阶段的训练省去了大量从零探索的环境执行开销。另外研究团队还补充收集了200条通过拒绝采样得到的新轨迹这些轨迹从一开始就按照SWE-AGILE的完整格式生成用来进一步减少后续强化学习阶段的分布偏移。**五、强化学习阶段用压缩奖励让AI学会精练表达**完成了监督微调之后研究团队还引入了强化学习阶段进一步优化算法采用的是DAPO一种开源的大规模强化学习框架。强化学习的核心是设计一个好的奖励函数——也就是告诉AI什么是好的表现、什么是差的表现。这里研究团队设计了一个聪明的奖励函数它同时考虑了两件事任务有没有成功以及上下文压缩得怎么样。压缩率的计算方式很直观假设所有推理细节都完整保留在历史里总共需要占用L_full个token而在SWE-AGILE实际机制下窗口外的推理已经被摘要替代实际占用的是L_hybrid个token。压缩率R_comp就等于1减去L_hybrid除以L_full代表节省了多少比例的上下文空间。最终的奖励函数是如果任务成功I_success1则奖励等于1加上β乘以min(R_comp, γ)如果任务失败I_success0则奖励为零。这个设计有几个精妙之处值得细说。奖励里用了乘法门控只有任务成功了压缩奖励才会被加上去。这防止了AI为了追求压缩分数而牺牲正确率——如果AI把推理写得极短摘要也超级简洁但任务失败了它什么奖励都得不到。同时奖励里对压缩率设了一个上限γ设定值为0.55如果压缩率已经达到了55%继续提升就不会再带来更多奖励了。这防止了另一种作弊方式——AI可能会故意把推理写得极长这样即使摘要也很长压缩率看起来还是很高分母变大了但实际上并没有节省上下文。设了上限之后这种膨胀分母的把戏就没有意义了。研究团队还特别解释了为什么使用全局轨迹压缩率而不是每步压缩率的平均值。原因在于有些步骤比如按计划执行刚才决定的脚本本来就是简单的例行操作推理本身就很短摘要和推理差不多长本地压缩率近乎零。如果用每步压缩率AI会被激励在这些简单步骤上水推理以提高分母这是没有意义的。而全局压缩率天然对这类简单步骤的贡献不敏感把优化重心集中在了那些推理又长、又确实可以大幅压缩的深度思考步骤上引导AI在复杂问题上充分展开、在简单操作上精练表达。**六、实验结果数字背后的真实意义**研究团队在SWE-Bench Verified基准测试上评估了SWE-AGILE这个基准包含500个来自12个真实GitHub代码仓库的软件问题。从结果来看仅经过监督微调的SWE-AGILESFT版本使用Qwen3-8B模型在只有2200条训练轨迹的情况下成功率达到了21.45%。这个数字有几个值得关注的维度相比基础的Qwen3-8B模型15.83%这是35.5%的相对提升而同样规模的7B/8B级别竞争对手中R2EGym用了3300条轨迹达到19%SWE-Dev用了19300条轨迹达到23.4%——SWE-AGILE用少得多的数据超过了前者并接近了后者。加入强化学习阶段后SWE-AGILESFTRL的成功率进一步提升到24.05%超过了所有同等规模的基线。更值得一提的是这个8B模型的成绩甚至超过了基于14B参数模型的SkyRL-Agent-v021.6%。在可扩展性验证上将SWE-AGILE的SFT流水线应用于Qwen3-14B成功率跃升至30.06%大幅领先现有14B基线。SWE-Bench Lite上SWE-AGILE-8B的成功率为14.77%同样超过了SWE-smith-7B11.7%和R2EGym11.0%。研究团队还仔细分析了模型的每步平均推理长度。实验发现当前步骤思考的基线方法平均每步需要约1075个token的推理因为每步都要从头重建状态SWE-AGILESFTRL完整版的平均每步推理降低到了约819.6个token减少了约28%。这验证了推理摘要和滑动窗口确实起到了认知缓存的作用——AI不再需要每次都从原始观察重新推导而是能从摘要中快速获取历史状态把推理资源集中在真正需要的新问题上。在压缩奖励的效果验证上对比有无压缩奖励的RL版本可以发现加入压缩奖励后推理摘要dt的平均长度从41个token降低到了27.3个token减少了33.4%而任务成功率几乎没有变化23.45%对比24.05%。每步节省13.7个token看起来不多但考虑到一条轨迹平均有二十多步并且未来还可以将这一机制扩展到压缩工具输出工具执行结果往往占据大量上下文节省效果会显著放大。**七、与同类方法的区别为什么不用现成的压缩技术**有人可能会问现在不是已经有很多压缩推理的技术了吗比如LightThinker、InftyThink为什么还要专门设计SWE-AGILE这是一个好问题研究团队在论文中也给出了解释。LightThinker和InftyThink等技术解决的是单轮内的推理压缩问题——就是如何在一次对话中把过于冗长的内部思考过程压缩得更短。但SWE-AGILE面对的是另一个维度的挑战如何在几十轮来回交互的过程中保持认知连贯性的同时不让历史积累的推理拖垮整个系统。这两个问题本质上是正交的互不干扰的SWE-AGILE实际上可以和这些单轮压缩技术叠加使用潜力更大。与LangChain的对话摘要缓存ConversationSummaryBufferMemory和MemGPT的工作上下文相比SWE-AGILE也有两点关键区别。前者是对整体对话历史做增量摘要生成一个不断生长的摘要段落后者是维护一块固定大小的非结构化文本块。而SWE-AGILE的压缩目标是推理过程本身而非通用的交互内容而且每步生成一个独立的结构化摘要条目而非滚动更新一个大摘要——这种结构化的方式更符合大语言模型的预训练行为模式也降低了摘要之间层层传递可能带来的错误累积风险。**八、未来的方向与局限**研究团队在论文末尾坦诚地指出了当前版本的局限。滑动窗口的大小N在整个流程中都被设定为2到5之间的随机整数这种设定虽然证明了系统的鲁棒性它能适应不同窗口大小但关于最优窗口大小是多少以及窗口大小是否应该根据任务复杂度动态调整目前还没有系统性分析。此外论文提到了一个很有前景的未来方向当前的机制能隐式地减少冗余状态重建推理变短了但还没有办法显式地检测和惩罚冗余推理。未来可以通过计算相邻步骤推理的语义相似度或者用AI评判者来识别重复分析进而直接过滤掉冗余的SFT轨迹或者设计专门针对重复分析的RL惩罚项把认知效率优化推向一个新的边界。归根结底SWE-AGILE解决的是一个在AI走向实用化过程中绕不开的基础问题当一个AI系统需要在复杂的现实任务中持续工作几十轮它的记忆该如何管理思考该如何保持深度而不失控。厦门大学的这项研究给出了一个结构清晰、实验扎实的答案不是全记也不是全忘而是用一个精心设计的滑动窗口让近期的深度思考完整保留让远期的历史思考凝练成摘要——这样的AI才能既聪明又持久。对于人工智能走向更复杂、更长程的实际任务场景这或许是一个值得深入探索的方向。你可能会好奇随着这类技术不断进步有一天AI程序员会不会真的能独立处理一个完整软件项目的全部Bug而不仅仅是一个孤立问题这个问题也许在不久之后就会有答案。希望追踪这一方向的读者可以通过arXiv:2604.11716查阅原论文。---QAQ1SWE-AGILE中的推理摘要和普通的对话摘要有什么不同A普通对话摘要比如LangChain的方案是把所有历史对话内容滚动压缩成一段越来越长的摘要段落压缩对象是通用交互内容。SWE-AGILE的推理摘要专门针对AI的思考过程本身而不是操作记录。而且每一步独立生成一个结构化的摘要条目不会层层叠加降低了错误累积的风险也更符合大语言模型的处理习惯。Q2轨迹快照训练为什么有必要直接用普通训练方式不行吗A不行。普通训练会把整条轨迹作为一个连续序列让AI学习时能看到所有历史推理细节。但SWE-AGILE在实际运行时窗口外的推理细节已经被摘要替换掉了。用普通方式训练出来的AI学到的是一种训练时能看到、运行时看不到的条件下的行为会造成训练和推理之间的根本错位轨迹快照训练正是为了消除这个错位。Q3反填数据合成为什么要提供正确操作给推理合成模型A这是事后反填Hindsight Backfill的核心思路。知道答案之后再补写推理过程能确保合成的推理必然指向正确结论质量更高、格式更可控。如果不提供答案推理模型只能从当前状态自由生成可能得出错误结论甚至和实际执行的操作相互矛盾这样的数据反而会误导训练。