我们离放心把工作交给 AI,还有多远?
今天的模型已经能搜索网页、编写代码、调用工具,甚至自主规划并执行一连串任务。但真正把一项复杂工作交给它时,我们往往还是忍不住盯着屏幕。
今年 10 月,中国人民大学副教授林衍凯在 CNCC 端侧大模型论坛上,结合团队多年来的智能体研究,探讨了一个问题: 如何让智能体可靠地完成长程任务?
本文根据现场报告讲稿及相关论文整理,以下为林衍凯的第一人称讲述。
全文约 6200 字,预计阅读 15 分钟
在我看来,要让人放心地把一项工作交给智能体,关键在于它能否在长时间的执行中持续做出正确判断。
今天的模型单看每一步,能力已经不差;但任务一长,误差就可能沿着执行链条不断累积。过去,这些判断大多靠工程师在模型外面写规则。但任务一换,预设的规则就容易失灵。要真正提高长程任务的可靠性,记忆、验证、归因和纠错这些执行过程中的判断,也需要像调用工具一样,成为模型自己学出来的能力。
这一判断来自我们过去几年的研究。最早我们做 WebCPM,是让人演示怎么上网搜索,模型跟着学;后来做 ToolLLM,让它自己读文档去调一万六千多个 API;再到 XAgent,让它自己拆解任务、组合工具。
一路做下来,模型能自己干的活确实越来越多了。它能操作浏览器、能写代码、能调各种软件。但当任务越拉越长,另一个问题开始变得比「会不会用工具」更棘手:把一整项工作交给它之后,我们到底敢不敢放手?
报告里,我举了一个数据竞赛的例子。设想我们把一场比赛交给智能体:它读完赛题、定好计划,开始处理数据,为后面训练模型做准备。检查中间结果时,它发现表格只有 900 行,与计划中的 1000 行对不上,便回头查看数据和赛题要求,再调整处理代码。
我关心的是它为什么会停下来做这次检查。代码运行成功,并不代表数据处理符合要求。少掉的记录是否应该被过滤,需要找到依据才能判断。如果这一步仍然要靠人提醒,我们把工作交出去以后,就还得一直盯着。
很多模型在演示里看着很惊艳,真正用起来却让人不敢离开屏幕,原因就在这里。METR 做过一组评测,用人类专家完成同一项任务的时间,来衡量模型能胜任多长的任务。以 50% 的成功率为标准,当前前沿大模型已能完成相当于人类专家近十小时工作量的任务,可一旦把成功率要求拉高到 80%,它们能稳定完成的任务长度就会大幅缩短。[1]
图 1|报告所用的 METR 历史评测图:80% 成功率要求下的任务时间跨度,按人类专家完成任务的耗时衡量。图源:METR。
偶尔做对一次,和能让人放心地把活交出去,中间差的就是执行途中的几次判断:跑出 900 行的时候,它还记不记得当初计划是 1000 行?看到数字不对,它会不会主动停下来查证?如果最后结果搞砸了,它知不知道是哪一步丢了数据、下一次又该怎么改?
哪些信息该留下来,应该由模型自己决定
要发现那张表格少了 100 行,智能体到检查那一刻还得记得自己最初算出的预期。这在短任务里不算问题,可一旦任务拉长,读过的网页、工具返回的结果、代码报错和每一次尝试的日志就会不断涌进来。等到真正需要核对时,最开始的要求往往早就被挤到了很远的地方,甚至在几次摘要压缩后彻底丢掉了。
现在很多系统的做法,是由人先在外面定好一套记忆流程:隔多少步总结一次,遇到哪类信息就存起来,太长了就用新内容覆盖旧内容。这等于让设计者提前替模型猜测:未来哪句话会有用。
但脱离具体任务去预设规则,很容易顾此失彼。例如,如果每次都用最新状态覆盖旧摘要,模型虽然能准确回答「用户现在的目标是什么」,却可能丢失早期的关键信息,无法再回答「用户最初的目标是什么」。这也意味着,记忆更新并非简单地用新信息替换旧信息,而是需要根据不同的任务需求,判断哪些信息应该更新,哪些值得保留。
既然记什么、删什么会直接决定任务最终能不能做成,那就不妨用任务成败的反馈,让模型自己学会管理记忆。
AtomMem 就是顺着这个思路做的。它把记忆管理拆成创建、检索、更新和删除四个基本操作,给模型配了一个保存全局状态的草稿区和一个按需检索的存储空间。做任务时怎么维护这些记录,全由模型自己决定;训练时也不需要人去逐句标注「这一步该记哪句话」,只看任务最后有没有做好。
在 Qwen3-8B 设置下,AtomMem 在长文档理解和多轮网页任务上的平均准确率达到了 58.8%,明显优于人工设定流程的 MemAgent(56.7%)和 A-Mem(51.4%)。哪怕把测试时的文档规模从训练时的 200 篇直接拉大到 800 篇(约 11 万 tokens),它依然能保持领先。[2]
比总分更有意思的,是模型在训练过程中摸索出来的习惯。训练初期,模型主要依赖检索已有记录,很少主动整理;随着训练推进,创建、更新和删除等操作逐渐增多。模型不再只是被动地查找信息,而是开始主动管理自己积累的记忆。
图 2|训练过程中各类记忆操作的频率变化:检索减少,创建、更新和删除增多。图源:报告材料。
其中,「更新」这个动作尤其关键。如果把它单独拿掉,模型在不同测试上的成绩会下降 4.9 到 7.2 个百分点。而「删除」在这些任务里作用不大,因为它们主要是在不断积累信息;一旦限制记忆能存的条数,删除和更新就变得重要得多。哪种操作最关键取决于任务本身,这正是记忆策略应该学出来、而不是写死的原因。
当然,主动增删记录是一条路,但在另一些场景里,提前压缩哪怕做得再好,也难免漏掉细节。比如机器人操作:物体刚刚被挪到了哪儿、哪个盖子遮住了目标、机械臂已经抓放了几次,全藏在连续的视频画面里。在动作发生的那一刻,很难预先断定哪一帧画面几分钟后会派上用场。
那能不能干脆先把原始历史留下来,等真正要出手的时候再去读?
SimpleMemVLA 先算了一笔容量账:在它的视频编码方式下,60 秒的历史大约占 5.6k tokens,262k 的上下文足以装下约 45 分钟的视频。既然装得下,它就直接保留带时间戳的视频历史,配合流式预填充复用相邻步骤的计算,把单步决策延迟从 1.02 秒压到了 0.68 秒。在 RoboMME 基准上,这套做法的成功率达到 88.3%;而在同一骨干模型、同一训练设置下复现的检索、压缩、循环状态三类记忆方法,最高只有 31.5%。[3]
不过,成功率高还不能完全说明问题 —— 模型到底是真看懂了过去的画面,还是只靠眼前的画面碰巧蒙对了?
为了验证这一点,实验里做了一组干预对照:保持当前画面和其余条件不变,只修改历史视频。在「哪个盖子盖住了红色方块」的任务里,遮住历史里的关键证据,86% 的情况下模型输出会改变;遮住无关片段,输出完全不变。在计数任务里,从历史视频中删掉一次已经完成的抓放,16 次试验中,模型每次都把已完成的次数少算一次。这些修改在训练中从未出现过;模型没有更新参数,却能按历史调整自己的行为。
图 3|只修改历史视频,观察输出是否随关键证据变化。删除一次已完成抓放后,16 次试验中的推断次数均减少一次。图源:报告材料。
不管是像 AtomMem 那样当场动手增删记录,还是像 SimpleMemVLA 那样把原始视频留到出手时再查,核心其实都是把「留什么、用什么」的决定权交还给模型。只有证据还完整地留在模型手上,后面的检查才谈得上有据可查。
怎么检查结果,不是一句提示词就能解决的
就算模型记住了最初的要求,它还得会检查结果。这听起来像是一句提示词就能解决的事 —— 让模型做完之后「自己检查一下」不就行了?
但我们来看一个很简单的任务:给幻灯片的每一页都补上备注。对人来说,要确认全部做完,得从头翻到尾;但要判定「没做完」,只需要翻到其中一页发现备注是空的,当场就可以下结论了。
可在 VeriCUA 的测试里,只靠提示词驱动的验证器会要求逐页核对每条备注是否与原稿完全一致,在幻灯片和文档之间来回翻找,最后也没给出结论。它有翻页的工具,但并不知道什么叫「证据够了,可以停了」。
图 4|验证每页是否都有备注:找到一页缺失,已经足以判定任务未完成。图源:报告材料。
这个问题不会因为模型变大就消失。在桌面端、手机端和网页端三种环境里,只靠提示词让模型主动检查,从 4B 的小模型到 GPT-5.4,判断一致率都在 68% 到 70% 之间;给 GPT-5.4 加几个示例,提升也不到 1 个百分点。[4]
模型不是不会查看环境,而是没学过先查什么、查到哪一步算够。
所以 VeriCUA 把「拿主意」和「动手查」拆了开来:负责操作环境取证的模块(Probe)固定不动,专门去训练那个决定「查哪里、停不停」的裁判(Judge)。训练时不仅看它判得准不准,还会把检查花了多少工夫算进账里:找到一页缺失就果断停下,比翻完十页才下同样结论拿到的奖励高得多。
训练之后,4B 的验证模型跨环境平均一致率达到 74.1%,比加了示例的 GPT-5.4 高 5.4 个百分点;1B 的小版本也超过了所有只靠提示词的验证器;Probe 取证消耗的 token 还少了约一半。
更关键的是,把这个学会查证的裁判放回训练流程,去给干活的智能体打分,智能体自己的任务完成率(Pass@4)也从 43.93% 涨到了 47.14%;就算碰上训练时没见过的跨应用任务,完成率也能从 17.57% 提到 22.97%。验收的尺子准了,模型学做事的效率也会跟着提上来。
VeriCUA 只在桌面环境上训练,直接拿到手机和网页环境上,一致率也是最高的。这背后有一个更一般的规律:评价能力往往比做事能力更容易迁移。
做事的模型要学会每一步具体怎么操作,换个软件界面可能就不会了;但评价模型看的是「当前状态离目标更近了还是更远了」。只要这种眼光能跨任务通用,就不必每换一类工作都重写一套评分规则。
更早的 AgentRM 已经验证了这个想法。我们在单个任务上分别微调执行模型和评价模型:微调执行模型后,换到其他任务,成绩普遍下降;微调评价模型后,多数没见过的任务也跟着提升。基于这一点,我们训练了一个 8B 的评价模型,在推理时帮执行模型从五条候选解法里挑最好的。它帮未微调的 LLaMA-3-8B 在九项任务上的总分从 52.7 提到 61.5,直接拿去配合体量大得多的 LLaMA-3-70B,也能让后者的总分提高 12.6 分。[5]
也就是说,评价不必非得等整件事做完才介入。任务越长,越需要途中就有人帮它看一眼:刚刚这一步迈出去,到底是离目标更近了,还是已经走偏了?
几百步之后任务失败了,到底是哪里发生了错误
不过,看出一件事做错了,还只是第一步。后来做 AgentCPM 系列研究时,我们让模型写长报告、操作手机界面,或者连着跑上百步去搜索信息。任务一长,训练时最让人头疼的问题就暴露出来了:模型吭哧吭哧跑了几百步,最后能拿到的反馈,往往只有一个干巴巴的「成」或「败」。几次尝试的结果完全相同,模型从中学不到任何东西。
这一个结果,根本回答不了到底哪一步做得好、哪一步把事情搞砸了。
就像开头那张少了 100 行的表格。读网页、下数据、写代码、跑训练,几十步里绝大多数动作其实都没毛病。如果那 100 行是在某次合并表格时弄丢的,把整条轨迹一竿子判失败,模型下次依然不知道该改哪里。
FocalRL 分析失败轨迹时发现了一个规律:大多数步骤对成败影响很小;模型对「接下来还能不能做成」的预期(也就是状态价值),往往是在少数几个关键动作附近大幅下跌的。而在失败的轨迹上,前面的错误还会连累后面本来正确的动作,让它们也跟着被判为「不好」。
图 5|失败执行过程中的状态价值下降,集中在少数关键动作附近。图源:报告材料。
既然病灶就在那几步,FocalRL 干脆把采样预算集中花在了刀刃上:先定位出关键错误,退回到出错前的那一刻,在完全相同的上下文里多试几种走法,并且每次只往后推演有限的几步。这就好比发现数据是在合并那一步丢的,就不必每次都从头再读一遍网页,而是直接回到合并前,排除掉前后的干扰,专心对比几种写法。
把训练资源聚焦到关键错误之后,在五个深度研究基准上,FocalRL 比 GRPO 平均高出 8.4 分;在 SWE-bench Verified 和 Lite 上也分别提升了 5.0 和 6.4 个百分点。同样是 4B 的体量,FocalRL-4B 在 BrowseComp 上拿到了 41.3%,比我们此前的 AgentCPM-Explore(24.1%)高出了 17.2 个百分点。[6]
当然,这里有一个很实际的问题:关键错误靠什么来找?总不能每条失败轨迹都靠人去翻。
我们请一个更强的大模型来读失败轨迹、标出出错的步骤,它还可以参考成功的轨迹和标准答案。但更有意思的是,换成和被训练模型同样大小的 9B 模型自己来找错,FocalRL 依然在五个基准上全部超过 GRPO,平均高 4.8 分。原因在于,判断一段过程哪里错了,比从头把它做对要容易得多。这和上一节说的「评价比做事更容易迁移」,是同一个道理。
光认错没用,得看下一次能不能改对
可就算精准找到了哪一步出错,事情也还没完。用过大模型的人大概都见过这种场面:你指出它的答案不对,它立刻诚恳认错,把解释改写得更长、更圆滑,然后转身把同一个错误又犯了一遍。
嘴上说出了问题,不代表下一次真能改对。平时让模型反思,它往往盯着自己刚写出来的错误答案看,越看越容易顺着原来的死胡同往下编。
CURE 在训练模型时,把「解题、批判、按提示重做」绑在了一起,并且在里面加了一个很关键的设计:一旦模型写完批判、提炼出下一步的提示,就把原来的错误答案直接丢掉。重做时,只留那句提示,让它彻底甩开旧答案的牵引,重新推演一遍。
同时,批判写得好不好,只看这句提示到底有没有帮下一轮把题做对。只有下一轮准确率真涨了,前面那句批判才能拿到奖励。换句话说,我们奖励的不是「判断得对」,而是「改进」本身。
在 Qwen2.5-7B-Instruct 的五项数学测试里,经过 CURE 训练的模型单轮作答平均准确率是 42.0%,允许最多八轮自我检查与重做后,涨到了 44.9%;而常规 GRPO 训练出来的模型,哪怕同样给足八轮机会,也只是从 41.0% 挪到了 41.4%,改上两轮就彻底停滞了。[7]
2.9 个百分点的提升看似不算夸张,但对比之下就能看出:多给几次重来的机会,模型到底能不能用起来,完全取决于它有没有学会「丢开错卷子、带着有效提示重新找路」。
图 6|CURE 与 GRPO 训练后的模型,在推理时多轮自我改进的表现。八轮指最多八轮自我检查与重做。图源:报告材料。
到了真实的长程任务里,重做还会碰上更棘手的约束。算错一道数学题可以擦掉重算,写错一段代码可以改完重跑;但如果智能体已经替你把一封写错的邮件发了出去,那就不是「丢掉重来」能解决的了。哪些动作还能撤回,哪些动作已经改变了外部环境、只能顺着现状想办法补救,也是模型接下来必须学会的判断。
拆掉外面的脚手架
现在再回到最开始那张少了 100 行的表格。
预期 1000 行,跑出来 900 行,数字对不上其实只是一个起点。也许那 100 行本来就是该过滤掉的脏数据,也许是合并代码写漏了,又或者最初算 1000 行的计划本身就有问题。把行数硬凑回 1000 行,并不等于把事情做对了。智能体真正需要做的,是调出最初的依据,去查清楚这 100 行到底差在哪儿,再决定是改代码、改计划,还是保留现有的结果。
而平时我们把一项工作交给智能体时,通常只会给一个最终目标,不会附带一份写满「第几步要核对行数、第几步要检查字段」的说明书。如果它仍然需要人在旁边指出来「这里漏了 100 行」、「退回第三步重跑」,那我们就依然不敢离开屏幕。
当然,前面讲到的这几项研究,目前还只是分别在记忆、验证、归因和纠错这四个环节上探路,还没法简单拼在一起就立刻变成一个万无一失的系统。接下来真正硬核的考验,是把这些能力放进同一条长程任务流水线里,看它们能不能在没见过的新任务上稳稳地配合起来。
这几件事指向的方向已经很清楚了。过去我们给模型搭脚手架,用人工规则替它决定记什么、查什么、怎么改;而所谓从「人工设计」走向「自主习得」,就是把这些外面的脚手架一点点拆掉,让模型在和环境的交互中自己长出这些判断。
什么时候换一张表、换一项新工作,它也能在跑出 900 行的那个瞬间自己停下来,往回翻一翻最初的要求——到那时候,我们大概才算真正可以把工作放心地交出去了。
资料来源
[1] Measuring AI Ability to Complete Long Tasks. METR, 2025.
[2] AtomMem: Learnable Dynamic Agentic Memory with Atomic Memory Operation. EMNLP, 2026.
[3] SimpleMemVLA: A Simple but Effective Native-Video Memory for Vision-Language-Action Models. arXiv, 2026.
[4] VeriCUA: Learning Proactive Verification for Reliable GUI Agent Rewards. arXiv, 2026.
[5] AgentRM: Enhancing Agent Generalization with Reward Modeling. ACL, 2025.
[6] FocalRL. Microsoft Research 开源项目, 2026.
[7] CURE: Critique-Driven Unified Reinforcement Learning for Test-Time Self-Improvement. ACL, 2026.