![]()
你有没有遇到过这种情况:手机备忘录越记越长,翻到最后一页的时候,前面记的东西早就忘了在哪,甚至懒得再翻,干脆重新记一遍。
AI智能体现在就在经历这个问题,而且比你严重得多。
当一个大语言模型去执行一个需要很多步骤的任务,比如翻查一本几十万字的小说找一个细节,或者在网上搜索十几次才能拼出答案,它会把每一步的思考、每一次工具调用、每一次返回的结果,全都堆进自己的"工作记忆"里。这个工作记忆专业说法叫上下文窗口,说白了就是模型这一轮能看到的所有文字。问题是,这个窗口不会自动清空,只会越堆越满。等任务做到第十几步,模型面对的可能是几万甚至几十万字的历史记录,里面九成都是早就用不上的废话。
这就是这篇论文要解决的事。研究者们给智能体做了一整套"整理笔记"的工具箱,还专门设计了一套训练方法,教会模型什么时候该记、什么时候该删、什么时候该把陈年旧账打包收进抽屉。这套系统叫ContextPilot,来自腾讯优图实验室和清华大学的团队。
问题到底难在哪
先说清楚,"让模型自己管理上下文"这件事不是这篇论文第一次提出。
早期的做法很简单粗暴:设定一个长度阈值,超过了就自动截断前面的内容,或者自动生成一段摘要压缩进去。这就像有人替你规定,笔记本写满一百页就自动撕掉前五十页。省事是省事,但撕掉的到底是不是没用的东西,谁也说不准。这种方法后来被称为被动式上下文管理,模型全程是个旁观者,规则说砍就砍,它没有发言权。
被动式上下文管理*:由人为预设的固定规则(比如长度超限就截断或摘要)来处理历史记录,模型本身不参与决定砍什么、留什么。
后来出现了更聪明的思路,叫主动式上下文管理,让模型自己拿着工具,自己判断该删哪段、该记哪段。这个转变听起来是进步,但研究者们扒开这些主动管理系统一看,发现三个明显的坑。
第一个坑,工具箱太寒酸。现有系统翻来覆去就是搜索、删除、摘要这三板斧,可长任务需要的能力远不止这些,比如要能建立长期记忆把散落在各处的碎片信息串起来,要能维护清晰的实体和事件关系,还要能提前做全局规划再动手,这些能力现有工具压根没有。
第二个坑,训练时"一视同仁"地探索。这是个挺反直觉的发现:论文团队做了个实验,让Qwen3-8B模型在处理NovelQA长文本问答任务时,从不同的工具调用节点分叉出十条后续路径,然后看这十条路径最终答对答错的波动有多大。结果发现,从readChunk(读取一段具体内容)分叉出去的十条路径,成功率标准差高达2.79,几乎是从finish(结束任务)分叉出去的0.74的近四倍。这说明什么?说明有些操作是"高风险决策点",选错了后面全崩,而有些操作影响不大,走哪条路都差不多。可传统强化学习训练时,是把整条轨迹当成一个整体来采样的,根本不区分这个节点重不重要,等于是在赌场里,明明有些牌桌胜负手一次就定生死,你却对每张桌子分配一样多的筹码。
轨迹级rollout*:强化学习训练中,对整条完整的交互路径(从头到尾)统一采样和评估,不区分中间步骤重要性差异的做法。
第三个坑,也是最微妙的一个:最终答对了,不代表过程管理得好;答错了,也不代表过程管理得差。论文里给了一个真实案例,特别能说明问题。有一道题,模型靠着不断重复搜索、读取,磕磕绊绊地问出了正确答案;另一道题,模型的上下文管理动作行云流水,记笔记、删旧账、更新记忆一气呵成,结果最后答案却错了。如果训练时简单粗暴地把"最终对不对"这个分数,一股脑扣到这条路径上所有的中间操作头上,就会出现一个荒唐结果:那个瞎猫碰上死耗子蒙对的搜索行为被奖励强化了,而那个规规矩矩、思路清晰的整理动作反而被连累着挨了罚。这就好比一个团队做项目,最后项目黄了,就把每个人不管做得好坏全打差评;项目侥幸成了,哪怕有人全程摸鱼也跟着领功。奖励和贡献完全对不上号。
这三个坑,工具不够用、探索不分主次、奖惩不分青红皂白,就是ContextPilot要一起解决的问题。
先把工具箱撑大:新增规划、长期记忆和软性归档
ContextPilot做的第一件事,是在原有的搜索、删除、摘要基础上,往工具箱里塞了三类新东西:规划工具、长期记忆工具、软性上下文归档工具。
规划工具*:让模型在动手之前先梳理一个简要计划的工具,对应函数是plan。
长期记忆*:不是简单存一句话,而是提炼出实体、时间戳、事件之间的关联,构建成带有关联边的结构化记忆网络,之后可以通过readMemory连带相关联的记忆一起取回。
这套长期记忆机制值得多说两句。你可以把它想象成侦探破案时的那面证据墙,上面用红线把不同的照片、便签连起来,标注出谁认识谁、什么时候发生了什么。如果没有这套机制,模型只能把原始文本一股脑存着,翻找的时候还得从头读一遍上下文,效率低不说,读着读着可能又把关键信息挤到窗口外面去了。有了这套结构化记忆,模型可以直接调取某个实体,连带它周围的关联信息一并拉出来,不需要在长文本里大海捞针。
软性上下文归档是另一组新增能力,包括summarizeContext(摘要替换)、compressContext(用轻量模型llmlingua-2压缩)、foldHistory(直接把整段历史打包成关键词索引,需要的时候再用关键词把它捞回来)。
llmlingua-2*:一个专门用来做提示词压缩的轻量模型,能在尽量不损失关键信息的前提下缩短文本长度。
foldHistory这个工具设计得挺巧妙,它不是简单删除,而是把整段历史"折叠"起来,只留一个关键词索引和摘要,就像你把一堆旧文件塞进一个贴了标签的档案盒,不是扔了,需要的时候按标签就能翻出来。如果没有这个折叠机制,模型要么被迫一直背着越来越重的历史包袱,要么只能选择硬删除彻底丢掉信息,两条路都不好走。
论文还专门区分了两类操作:context management actions(上下文管理动作,泛指所有跟整理上下文有关的操作)和context editing actions(上下文编辑动作,特指那些真正改写历史记录内容的操作,比如删除、摘要、写记忆)。后者因为会直接改变模型看到的历史,训练时需要单独处理,这也是后面训练方法设计的一个关键前提。
工具箱撑大之后,问题来了:模型怎么学会用这些新工具?这就要看训练部分了。
训练怎么改:让模型多在"要命的节点"上练习
论文提出的核心训练创新叫context-aware partial rollout,中文大致可以理解为"上下文感知的局部试探采样"。
这个方法的思路是这样的:既然不同的上下文管理动作对结果的影响天差地别,那训练时的探索资源就不该平均分配,得把更多的"试错预算"投给那些真正要命的节点。
具体怎么判断哪个节点要命?论文用了两个信号。第一个是上下文变化量,简单说就是这一步操作前后,上下文的长度变化幅度有多大,变化越剧烈说明这步动作的冲击越大。第二个是熵变化,熵在这里衡量的是模型接下来生成内容的"犹豫程度",如果一个操作之后模型突然变得比一开始更不确定该说什么了,说明这个操作把局面搅得更复杂了,值得重点关注。有意思的是,论文特意选择拿当前熵去跟轨迹刚开始时的初始熵对比,而不是跟上一步比,因为他们想抓的是"相对于最初的问题,这一步造成了多大的认知冲击",而不是两步之间的小打小闹。
熵*:这里指模型生成后续内容时,各个候选词的概率分布有多"分散",分布越平均说明模型越犹豫不决,分布越集中说明模型越有把握。
把这两个信号加权合并,就得到一个敏感度分数,分数高的节点,训练时就多往这里分叉,多采样几条后续路径,看看这个决策点到底能通向什么样的结局。
这个思路其实挺像交通部门在城市里布控探头。一个普通十字路口,一年也出不了几次事故,装不装探头影响不大;但某个历史上事故频发的匝道口,就得重点盯着,多装几个摄像头、多派几个巡警。如果所有路口都平均分配警力,热点路口该出事还是出事,冷门路口的警力却纯属浪费。ContextPilot干的就是这件事,把训练时的采样预算,往那些"事故多发路口"倾斜。
不过实验也给出了一个值得警惕的细节:论文做了消融实验,发现如果只用熵变化这一个信号来挑选分叉点,效果并不稳定,在BrowseComp+这个基准上甚至让准确率从50.96掉到49.64,反而退步了。只有把上下文变化量也加进来一起考虑,效果才稳步提升。这说明单靠"模型自己觉得纠结"这个信号是不够可靠的,还得配合"客观上这一步改动有多大"这个更硬的指标一起判断。
有了更聪明的采样策略,接下来要解决的是前面提到的第三个坑:怎么把奖惩分得更清楚。
奖励怎么分:不再是一根筋地"一荣俱荣,一损俱损"
传统做法是,一条轨迹跑到底,最后答对了给满分,答错了给零分,然后把这个分数原封不动地摊派给这条路上所有的中间步骤。ContextPilot换了个思路。
论文把一条完整轨迹按照上下文编辑操作切成好几段快照,术语叫trajectory snapshot(轨迹快照)。每个快照代表一个相对独立的训练样本。
轨迹快照*:一条完整交互路径被上下文编辑动作切分出来的若干个片段,每个片段被当作一个独立的训练样本,确保每个中间状态都能被纳入学习过程。
对于最后一段快照,也就是真正给出最终答案的那一段,它的奖励由三部分组成:答案对不对(outcome reward)、格式是否规范能否被正确解析(format reward)、有没有犯规行为比如调用一个还没建立的记忆或者超出上下文长度限制(penalty,惩罚项)。
但对于中间那些快照,论文不再直接照搬最终那一条轨迹的成败,而是往前多分叉几条路径,把所有从这个中间快照出发、最终跑完的所有后续轨迹的奖励取平均值,作为这个中间快照的奖励。
这个做法的价值在哪?前面提过那个案例,一次瞎猫碰死耗子蒙对的搜索行为,如果只看这一条轨迹的结果,会被误判为"好操作"而被奖励强化。但如果从这个搜索动作出发,多分叉出好几条独立的后续路径,分别跑到底,取个平均,蒙对的偶然性就被平均掉了,这个动作真实的价值高低就浮现出来。
这就像评价一个投资顾问的建议好不好,不能只看他推荐的某只股票这一次涨没涨,得看如果这个建议被反复执行很多次,长期平均下来是赚是亏。单次结果里运气成分太大,多次重复才能看清真实水平。论文附录里专门用数学证明了这一点:假设每条后续轨迹的奖励是独立同分布的随机变量,那么用多条轨迹取平均得到的奖励估计,方差是单条轨迹估计方差的1/n,n是采样的轨迹条数。方差小意味着这个奖励信号更稳定,训练也就更不容易被噪声带偏。
拿到每个快照的奖励之后,论文用GRPO(一种强化学习优化算法)把同一个问题下所有采样出来的快照分到一个组里,用组内的均值和标准差算出每个快照相对于组内平均水平的优势值,再拿这个优势值去更新模型参数。
GRPO*:一种强化学习优化方法,通过对同一批采样样本计算相对优势(跟组内平均水平比是高是低)来指导模型更新,不需要单独训练一个价值网络。
数据说话:新工具和新训练方法到底有没有用
论文在长文本问答和深度搜索两大类任务上做了大规模验证。长文本问答测试集包括NovelQA(小说问答)、∞Bench(超长文本理解)、LongMemEval-S(长期记忆评测)和BrowseComp+(基于固定语料库的复杂检索问答)。深度搜索测试集包括GAIA、BrowseComp、BrowseComp-ZH(中文版)和xBench-DeepSearch。
先看长文本问答这块的核心结果。在8B参数规模上,经过完整训练的ContextPilot-8B-RL平均分达到69.40,比同规模的对照方法StateLM-8B-RL的65.85高出3.55分。更值得玩味的是,ContextPilot只用了32K的上下文窗口,却打赢了动用256K超大窗口、完全不做任何上下文管理的Qwen3.5-397B-A17B基础模型(后者裸跑得分80.55,加上工具后跳到87.16)。这说明窗口大小从来不是唯一的解法,会不会整理才是。
在14B规模上,ContextPilot-14B-RL平均分达到72.20,是所有参与对比模型里的最高分。在轻量级的Gemma4-E4B-it模型上,效果更夸张:不加任何工具时平均分只有31.01,加了完整的ContextPilot工具箱并训练之后,飙升到60.96,几乎翻倍。这说明这套框架对小模型的提升幅度反而更明显,小模型本身能力有限,一套好的外部整理工具能帮它把有限的算力都花在刀刃上。
再看深度搜索任务。以WebSailor-7B为底座,ContextPilot平均分38.32,超过了同样做了强化学习训练但没有专门优化上下文管理的对照方法SUPO(36.31分)和OpenSeeker(35.78分)。换成WebExplorer-8B底座,ContextPilot平均分50.10,同样是所有方法里最高的。
论文还做了一个特别直观的实验,专门统计模型每一轮对话实际用了多少输入token。结果显示,在BrowseComp这个任务上跑到第15轮时,普通的WebExplorer-8B模型的输入长度几乎是线性往上涨,一路涨到接近30000个token;而用了ContextPilot的模型,输入长度稳定维持在8000到10000个token左右,几乎是持平的一条直线。这就像两个人同时收拾行李箱去旅行,一个人走一路捡一路,箱子越拖越沉,另一个人每到一个城市就把用不上的东西寄回家,箱子始终轻便。轻便不是因为去的地方少,而是因为知道什么该扔。
论文另外还追踪了RL训练过程中模型调用各类工具的比例变化,发现一个挺有意思的现象:训练刚开始时,模型对信息检索类工具的依赖占了将近一半的调用量,几乎是"遇事不决就搜索";随着训练推进,检索工具的占比逐渐下降,规划、长期记忆、上下文归档这几类工具的使用比例反而稳步上升。这说明强化学习不仅仅是让模型把工具用得更准,还在悄悄改变模型解决问题的思路,从简单粗暴的检索堆料,转向更精细的统筹协调。
与此同时,工具调用本身的出错率也在训练过程中持续下降。论文定义了"工具执行失败",比如调用一个还没建立的记忆、传了个不存在的消息编号之类的操作性错误。训练初期,记忆类和归档类工具的失败率明显高于检索类工具,说明监督微调阶段模型虽然学会了这些工具的调用格式,但还没真正吃透使用条件。随着强化学习推进,这些失败率显著回落,同时任务成功率同步爬升,两条曲线几乎是同步变化的,说明模型对工具的熟练程度和最终任务表现是互相促进的。
论文的消融实验也印证了每个设计要素都有各自的贡献。单独看工具箱的增量效果,从最初的基础工具箱起步,逐步加入规划工具、软性归档工具、长期记忆工具,平均分从77.89一路涨到87.16,尤其是BrowseComp+这个任务上,准确率从63.49%跳到80.96%,涨了整整17个百分点,说明这几类新工具确实解决了老工具箱覆盖不到的能力短板。
单独看训练方法的增量效果,在Qwen3-8B上,从纯监督微调的65.78分,加上普通GRPO训练涨到66.84,再加上上下文感知的局部试探采样涨到67.37,最后加上细粒度的奖励分配,涨到69.40。每一步改进都在往上走,说明这套训练方案不是靠某一个单点技巧撑起来的,是几个环节环环相扣的结果。
写在后面
这篇论文最打动我的地方,不是它列出的那些新工具,而是那个关于"答对但管理得差、答错但管理得好"的对照案例。它戳穿了一个我们很容易想当然的假设:好像只要最后结果是对的,中间过程就一定是合理的。可现实里做事往往不是这样,运气和实力经常打包出现,你很难只凭一个最终结果去反推整个过程的质量。这不只是AI训练的问题,任何靠"结果导向"来评价过程的体系,都有可能犯同样的错,比如只看销售业绩不看客户关系维护得怎么样,只看考试分数不看学习方法对不对。
另外一个让我反复琢磨的细节是那张工具敏感度的柱状图。readChunk(读取内容)这种看似最基础、最不起眼的操作,反而是波动最大、影响最深远的动作,标准差高达2.79。这其实挺提醒人的,很多时候真正决定结局的不是那些看起来惊天动地的大决策,而是日常操作里一次不起眼的选择,读了这段还是那段,记了这句话还是漏了那句话。系统设计者往往容易把注意力放在"重大决策点"上,却忽略了那些高频但看似平凡的小动作,可能才是真正的胜负手。
论文的局限性部分自己也承认,这套工具箱依然没能覆盖所有可能的上下文编辑需求,未来还可以探索更丰富的组织、压缩、检索方式。而且目前的验证范围主要集中在长文本问答和深度搜索这两类任务上,能不能扩展到写代码、操作图形界面这些更复杂的智能体场景,还是一个开放的问题。如果一个智能体要一边写代码一边调试,中间要不要建立类似"代码变更记忆"这样的结构?这大概是留给后续研究者的一道题。
Q&A
Q1:ContextPilot是什么?
A:ContextPilot是腾讯优图实验室和清华大学团队提出的一套让AI智能体主动管理自身工作记忆的框架,通过新增规划、长期记忆和软性归档工具,配合专门设计的强化学习训练方法,让模型在处理长文本问答和深度搜索任务时用更少的上下文获得更好的表现。
Q2:ContextPilot和以前的上下文管理方法有什么区别?
A:以前的方法要么用固定规则被动截断或摘要历史记录,要么虽然让模型主动管理但工具箱只有搜索删除摘要三种,训练时也没区分不同操作的重要性。ContextPilot新增了规划、长期记忆和软性归档工具,还提出根据上下文变化和熵变化找出关键决策节点重点采样,并用细粒度奖励分配替代粗糙的整条轨迹打分。
Q3:ContextPilot的效果具体好在哪里?
A:在长文本问答任务上,8B参数的ContextPilot只用32K上下文窗口就打赢了256K窗口的更大模型,平均分比同类方法StateLM高出3.55分;在深度搜索任务上平均分也是最高的;同时每轮实际使用的输入token数量能稳定控制在低位,不会像普通方法那样越用越涨。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.