跳到主要内容

编码代理切来切去,聚焦任务完成率掉了 11.5 个百分点

abanana
abanana

· 阅读约 6 分钟

前几天翻 arXiv 计算与语言方向的新条目,看到这个月 1 号挂上去的一篇预印本,做的正好是我每天都在干的事:让编码代理在同一个仓库里几个都没做完的任务之间来回切。作者做了个叫 Switch-SWE 的基准,测的是切走之后再切回来,代理还能不能把原来那个聚焦任务收掉。7 个代理平均掉 11.5 个百分点,单个代理之间的差距在 6.0 到 15.0。

这条我先记下来了。我自己的用法基本就是反面教材:一个仓库里同时开着三四个半截活,一个测试红了就切过去看,看完顺手又去改另一个文件,回头再切回来,往往得先把前面十分钟干的事重新捋一遍。这个成本我一直当成自己的问题,觉得是我记性差,没往“这是工具层面的结构性问题”上想,所以看到有人把它做成了可测量的东西,第一反应是把页面存下来。

拆开看看这个基准是怎么设的,这是我认它的原因。它从 19 个 Python 仓库里,依据 issue、PR 和评审历史重建了 200 个聚焦任务,再组织成 400 组配对的会话规格。每个聚焦任务跑两遍:一遍是不间断会话,从头做到尾;一遍是切换会话,中间按顺序插进同仓库其他未完成任务的半截阶段。两种设置用的是同一份任务要求、同一个可执行验证器,打分只打最后那个聚焦任务的补丁。

这个设计干净的地方在于,它把“任务难不难”这个变量控住了。任务一样、验证器一样、评分对象一样,唯一的差别就是中间有没有被打断过 → 那掉下来的分只能归到上下文这一项上,赖不到任务本身变难。仓库级基准以前大多只测一问一补丁的单回合,没人把“切走再切回”单独拎出来量,这一步补得挺实在。

轨迹分析点出来的两种恢复行为,也是我最眼熟的两条:跨任务需求混淆,和任务状态丢失。前者是切回来之后把上一个任务的要求带进来了,后者是连做到哪一步、什么已经验证过、什么还没试都记不清了。这两条我不用看论文都能对上号,只是以前从来没人帮我数过它们一共让我亏了多少。

到这里为止都是“果然如此”。真正让我把这篇存下来的是它后面那个东西:作者做了个可插拔的上下文管理模块,做两件事——筛出跟当前任务相关的历史、维护一份简短的任务状态摘要。在 OpenCode 上,受测模型的完成率在这个场景里提升了 5.5 到 15.5 个百分点。

这个思路一点都不新,但它是今天就能用上的。我自己其实一直在手工做类似的事,只是没给它起名字,也没定规矩:切走之前,在仓库根目录留一个 TASK_STATE.md,只写三行。

## 当前任务
把导出逻辑从 xlsx 换成 csv,改到一半

## 已验证
csv writer 的空值处理跑通了(test_export_empty.py 绿)

## 下一步 / 待验证
分页导出还没测;怀疑 reader 那边也硬编码了 xlsx

写这个东西的成本大概二十秒,收益全在切回来那一下:不用重新推一遍上下文,第一眼就知道自己停在哪。我猜那个模块做的也是类似的事,只不过它是自动筛历史、自动生成摘要,我是手写。

验证方式很土,但比不验证强。同一个半截任务,我试过两次不写摘要直接切走,两次写了再切走,记录回来之后第一次有效操作之前花了多久——“让我看看”这种不算。样本小得可笑,n=2,压根不能当结论,但四次里写了摘要的那两次都明显短一截。这条只能算自测,等哪天代码放出来,用 Switch-SWE 那套配对会话跑一遍才算数。

手写有个坑,我绕了两次才躲开:我最容易写进去的是“结论”,最容易漏的是“下一步要验证什么”和“已经排除掉的方向”。前一条漏了,回来得重新想;后一条漏了更亏,会把昨天已经证明走不通的路再走一遍。所以现在我给自己定的规矩是,「下一步」那一栏没填就不许切走,宁可写一句“还没想好,但 xlsx 那条路先别回去”。

💡 小技巧:摘要里写“文件路径 + 函数名”,别写“那个导出的地方”。三天之后的你,和另一个人记性差不多。

说到这儿得说这篇让我卡住的地方。摘要写代码已公开,我点进页面,只有一个占位链接。也就是说 400 组会话规格具体怎么切、每次插入多长的半截阶段、验证器长什么样,我现在只能从摘要里猜。切换会话插入的那段“部分阶段”到底插了几段、每段多长,这个量级直接决定了 11.5 个百分点是怎么来的——插三段和插十段显然不是一回事。这一段我翻了半天没找到,只能先记一笔,等代码真放出来再跑一遍。

顺便把这条当个通用判据用:一篇论文、一篇教程,点开第一件事看它给的东西能不能真跑起来。跑不了,写得再漂亮也只能当观点读,不能当方法用。这跟我判断中文教程好坏的标准是同一把尺子。

还有个没完全想明白的地方,先老实写在这儿。提升幅度是 5.5 到 15.5 个百分点,跨度不小,说明这个模块对不同模型的效果差得挺多;但摘要没说清这是在几个模型上测的、基线是哪个版本,我也没看到它跟“让人自己手写摘要”这种做法做过对照。所以我不打算把“加个状态文件能提升几个点”当成可预期的数字,只把它当成一个方向:值得做,别指望具体数值。

划重点:第一,切走再切回是有成本的,这个成本能测出来,平均 11.5 个百分点;第二,成本主要出在跨任务需求混淆和任务状态丢失这两件事上,对应的解法就是筛相关历史、留一份短摘要;第三,摘要文件今天就写好,三行就够,但「下一步待验证」那一栏必须填,这是最容易漏、也最值钱的一栏;第四,看到“代码已公开”先点一下链接,占位链接这种事比想象中常见。

这篇就记到这里。你可以挑一个手上正卡着的半截任务,切走之前照着上面那个模板写三行,回来试试还认不认得自己的上下文。如果哪个字段你觉得多余、或者还缺一栏,留言说一声,我补进模板里。

abanana
abanana

把自己踩过的坑整理成一篇能复现的笔记,写给三个月前的自己看。

查看主页 →