
让AI从新人变成长期的同事 —— 硬核拆解Alloomi 的三层技术路线「记得住、学得会、做得成」
先说一个我自己遇到过很多次的场景。
周二我花了二十分钟给 AI 讲清楚了一个项目:谁负责哪一块、上个版本为什么砍了一部分、哪个方案已经被否了。AI帮我接得很好,我还把这轮对话总结成了一个 md。
周四开新会话,它一无所知。我把 md 贴进去,它又懂了。
周五我本想继续接着聊,但是这个会话的上下文已经太长了,只能再开一个新的会话,它当然又忘了。
md 是个有效的补丁,但每次都得我手动打,而且打完一次就作废。荒谬的地方在这儿:真人同事干三年,判断是长在身上的;AI 同事干三年,第一万零一次和第一次一模一样。它不是记性差,是根本没有「上班时间」这个概念——每次对话都是入职第一天。
这篇文章聊的就是怎么来解决这个问题。最近我把 Alloomi 那两篇技术报告研究了一番,顺手看了下他们开源的一部分。搞清楚了他们现在的技术路线分三层,按照「记得住 → 学得会 → 做得成」的顺序讲,把我研究的内容分享出来。
先一张图来看看全貌
https://alloomi.ai/reports/hc.pdf第一层:记得住
最直觉的解法是把上下文窗口做大。装得下就不会忘,对吧。
有个叫 BEAM 的基准专门测这个思路的天花板。它构造了 100 段连贯的多领域对话,拉到 128K、500K、1M、10M 四个量级,然后专挑那些答案散落在整段对话各个角落的问题来问——你没法靠"翻到最后一段"蒙对。
结果确实不太给面子。在 Hindsight 团队的复评管线上,纯 RAG 到 10M 尺度只剩 24.9%,认知启发式的 LIGHT 框架 26.6%。哪怕模型本身有 1M 的窗口,配上检索,照样掉。
原因其实不难理解:窗口上下文本质上是缓存,不是记忆。 塞进去的 token 越多噪声越大,我在文章开头也尝试过了,模型分不清哪句是三个月前作废的方案、哪句是昨天刚拍板的结论——因为它们在窗口里长得一模一样,都是文本。
Alloomi 那篇《Holistic Context》报告的出发点就是这句话:上下文不该被当成"当前窗口里的那串 token",而应该被当成一份跨时间、跨平台持续维护的状态——每条信息有归属、有时效、能回溯、能审计。
具体怎么做的?三件事,我用带人的比喻讲:
第一件,每条信息进来先贴标签。
不是直接丢进向量库,而是先打上一个五元组:这条信息属于哪个任务、哪次会话、从哪个渠道来、关于谁、什么时间段内有效。然后做实体链接——用完整属性画像而不是名字字符串去匹配,把散在不同会话里的碎片合并到同一个人/项目/决策上,排成一条时间线。
同一件事在系统里存着两条对不上的记录,这是常态。比如三月的会议纪要写着「A 方案已经砍了」,六月的邮件里又冒出来「A 方案继续推进」。
常规做法是后写的覆盖掉之前写的。但"后写的"不等于"对的"——那封邮件可能只是转发了一段旧内容。
这里的做法是给每条记录算一个可信度分,三个问题的答案相乘:
- 有几条证据支持它? 支持的记录越多越可信,但会封顶。不会因为某句话被反复提过二十次,就永远压住一条新的关键信息。
- 多久没被提起了? 越是近期还在被确认的,越可信。
- 来源靠不靠谱? 你亲口说的,权重高于系统自己从上下文里推断出来的。
相乘的意思是:任何一项接近零,整条就基本出局。证据再多,来源不可靠也不行。
分高的那条留在「当前有效」里;分低的不删,降级成「已被取代」存档,出处链还挂着,随时能翻出来。
最有意思的是分数咬得很近的时候(分本身在 0 到 1 之间,差距小于 0.15 就算咬住了)。这时系统不会替你挑一个,而是把这件事标成「有争议」,你一查,两条记录连同各自的出处一起摆到你面前。
这一条我觉得是整篇最实用的设计。人做事最怕的不是信息缺失,是系统自信地给你一个已经过期的答案。
第二件,旧信息不是删掉,是"截止到某天为止有效"。
每条记录都带一个生效时间段,写法像这样:「2026-03-01 起,截止未定」。只要它还是当前有效的,截止时间就一直空着。等哪天有新证据把它顶掉了,系统不是把它删了改写,而是给它补上一个截止日期——同一天,新记录的生效日期开始。
差别看着小,实际上差了很多。覆盖式的写法只留得下"现在认为什么"。
而这种写法留得下"什么时候开始这么认为的、之前认为的是什么、因为哪条证据改的口径"。好处是可以查历史快照。你问它「上个月 15 号那会儿,你手上的情况是什么」,它会把所有生效段覆盖那一天的记录挑出来,就是当时那份认知的原样——不是现在的结论倒推回去,是当时确实那么想。做过合规或者复盘的应该知道这个能力值多少钱。
记录还会随着时间往下沉。刚进来的在短期层,放一周;一周内被反复用到、够重要的,沉到中期层,放约三个月;三个月后还站得住的,才进长期层,成为这套系统的长期认知。
沉不下去的那些也不删。它们变成一段压缩摘要留在原地,原始出处的链接还挂着——就像把一叠旧文件从桌面收进档案柜,柜子还在,编号还在,要的时候翻得出来。
第三件,常一起用到的东西之间,路会越走越宽。
这一条最好懂:老在一起被想到的两件事,之间的路会越走越熟。
系统每次检索,如果两条记录在五分钟内被一起取了出来,就在它们之间记一笔——这条连接又强了一点。长期没有一起出现过的,连接慢慢淡掉,跟人忘事的曲线是一回事。
连接还分四种关系,不是笼统的"有关":支持(互相佐证)、竞争(两条对不上,前面讲的争议就走这条)、相关(凑一起出现过,但还没攒够分量)、取代(旧的被新的顶掉,指向它的继任者)。
连接的强弱是有门槛的。一条新连接刚出现时是很弱的,如果每天都被一起用到,大概一周左右会跨过"活跃"这条线,之后就会稳定在一个比较高的位置;反过来,一对很少同时出现的记录,几天不碰就掉回线下,不再参与检索。
这条线的意义就在最后一步:检索需要多跳的时候,系统只沿着活跃的连接走。
举个例子。你问「上次那个客户改需求的事,影响到谁了」——纯向量检索会去找字面上和"改需求"最像的一堆片段;而沿着活跃连接走,是从这个客户跳到那次需求变更、再跳到当时被牵连的两个项目负责人。走的是这套系统过去真正跑通过的路,不是文字长得像的路。
这部分是开源的,可以自己跑
上面这套东西的 OpenContext 已开源,仓库在 github.com/melandlabs/opencontext。它自己的定位是"跑在 agent 应用底下的上下文运行时",不是 UI 也不是模型提供方。
它也带 MCP server,能直接挂进 Codex、Claude Code 等 Agent 当中使用。
其中还有个细节我挺喜欢:它的调度器(Loop Engine)是先醒过来判断有没有真活要干,确认有了才去调 AI。README 里那句话写得很直白——LLM 调用不是地基,是最后一步。见过太多把 while(true) 套在模型调用外面就叫 agent 的项目,这个取舍是有分寸的。
第二层:学得会
好,现在假设记忆问题解决了。够了吗?
不够。记住和学会是两件事。
一个处理了一万张发票的 agent,你给它接上向量库,它能想起之前的发票长什么样。但这跟懂了还差得远:检索出来的内容要跟任务指令抢注意力预算;检索延迟卡在推理的关键路径上;最要命的就是,这些内容压根不在微调时的梯度流里,所以策略上根本学不会去依赖它们。
打个比方,这像是给新人配了一个特别好用的文件柜。文件柜再好,新人还是新人。
另一篇《Self-Evolving Agent》处理的就是这个落差。它的核心动作是:把每一次真实交付变成一条能进入权重的监督信号。
流程是这样的:
前面讲的是记忆,这一步要做的事不一样:要把干过的活,变成模型身上的能力。
每完成一次任务,系统留下三样东西:当时的情况、它做的决定、事后的结果好坏。这就是一条经验。
第一关:不是每条经验都值得学。
每条经验进池子前要过三道坎,一道不过就丢掉:
- 它当时自己有把握吗?——模型自己都在蒙的那次,学了只会把蒙的习惯学进去
- 结果好坏说清楚了吗?——反馈含糊的没法当教材
- 池子里已经有很像的了吗?——满了以后,新来的好样本会挤掉跟它最像的那条,免得池子里全是同一类活
池子最多装五万条,满了就按上面第三条换血。
第二关:怎么学。
攒够一批就转一次飞轮,三件事一起做:
- 微调——只动模型 0.4% 的参数,主体权重全程不碰。这是为什么它敢反复训:改动面小,出事也好收拾。
- 复习旧的——新任务的例子和旧任务的例子各出一半,混在一起训。不这么干就会"学了新的忘了旧的",这是持续学习最经典的翻车方式。
- 跟老师学——从一个更强的外部模型(例如 Qwen3.7-Max)那儿学决策思路,把能力上限往上顶。
8 张 A100,转一轮大约两个半小时。
这里有个细节值得单拎出来:复习的时候,回放的是老师的答案,不是它自己昨天的答案。
这个差别很大。拿自己的旧输出当教材,等于复印件再去复印——每印一次糊一点,模型越熟练,自己的输出越单调,最后是在自我强化一个越来越窄的习惯。这里做了对照实验:把老师的答案换成模型自己的旧输出,直接掉 6.1 个点。
经验存在哪:一个叫 Engram X 的设计
常规做法是把经验放进外挂的数据库,用的时候检索出来塞进 prompt。这套东西不这么干——它把经验写进模型自己身上,五万个互不相干的"小抽屉",每次推理只打开其中 8 个。
三个好处:抽屉之间不打架,写错一个不会污染其他;因为在模型内部,用的时候不需要检索、不占 prompt 的位置;写一条经验的成本,比"为每条经验单独训一遍"便宜三到四个数量级。
把它拿掉,CL-bench 掉 3.9 个点——整套东西就退回成一个"带检索的微调流程"。
最后是安全阀,我觉得这是全篇最该看的一块。
自我进化最怕的不是学得慢,是越学越歪,而且没人拦得住。
所以每次更新前先存档,更新后过一道三人裁判:任务做得对不对、它对自己的把握准不准(说八成把握的时候是不是真对了八成)、它的推理过程跟老师对不对得上。
关键是三个裁判同时说不行,才回滚——用"与"不用"或"。因为单个指标本身有噪声,只要一个说不行就退回,好的更新会被误杀一大半。
报告在这里没有写"安全可靠"四个字,而是把底细摊开:20 轮预热里这道门拦了 4 次,其中 1 次拦对了,3 次是误伤;该拦没拦的情况,观察到 0 次。
但紧接着自己泼了盆冷水:0 次是在 20 轮里数出来的,样本太小,这个"0"跟"真实漏拦率其实高达 14%"在统计上并不矛盾。所以他们只把这道门称作"经验上有用的启发式",明确拒绝声称它有形式化的保证。
成绩:
跑这套的 backbone 是 Qwen3.6-35B-A3B——35B 总参数、3B 激活的 MoE,对面榜上那些是参数量大它好几倍的前沿模型。
第三层:做得成
记住了,也学会了,最后还得能把活交出来。前两层做得再漂亮,交付物拿不出手,也只是分数好看。
这一层的三个基准,考的是完全不同的三种活:
SWE-Bench-CL:80.6%
273 个任务,8 个真实开源仓库(django、matplotlib、scikit-learn 这些)。它的设计很巧:把这些项目历史上的真实 bug 按时间顺序排好,让 AI 一个接一个地修——考的不只是会不会修,而是修到第 200 个的时候,前 199 个学到的东西还在不在。
对照是 OpenCode + Kimi-K3 + FAISS 的 73.3%。这一行是三个里最干净的:它既有外部对照,也有同一套环境下的受控比较。
JobBench:57.5%
130 个任务、35 个职业,由各行的专家挑出来的"最想甩给别人干的活"。打的是端到端交付物的分——不是"思路对不对",是"东西能不能直接用"。
对照是 OpenCode on Kimi-K3 的 54.7%,只领先 2.8 个点。
GDPval:74.2%
测的是有经济价值的职业任务,对照是榜单第一的 Claude Opus 5,67.3%。
最后:三层是一个闭环,不是三个功能
最后把线索捋一下。这三层不是三个卖点并排摆着,是一个转起来的环:
真实任务轨迹 → 质量筛选 → 专家锚定 → 后训练 → 评测准入 → 版本回滚
六步全都能点到具体东西:
1、干活留下的是那三样记录
2、挑出来靠的是三道筛
3、对着高手校是跟老师学
4、训进去是那个飞轮
5、验收是三个裁判那道门
6、退回上一版是带版本号的存档——而且模型的主体权重从头到尾冻着,飞轮怎么转都碰不到它。
最后一步是这个环成立的前提:它是可以往回走的。
一套会自己进化的系统,最怕的不是学得慢,是学歪了还一路加速。这个环之所以敢转,是因为最后一步随时能把它拽回来——上一版一直存着,验收不过就退回去,主体权重也从来没被动过。
一句话讲完这条路线:让 AI 每完成一次交付,就长一点。
回到开头那个场景。想让 AI 不再是新人,第一步确实是让它记得住。但记得住只是三分之一——而且是最容易被测出来的那三分之一。刷高一个记忆基准的分数不难,难的是记住之后真的变强,变强之后真的能把活交出来。
我们离那个状态还有距离。但至少现在,路线是画出来了,每一段都有具体的工程件和可以被质疑的数字,而不只是一句AI 会越用越懂你。
更多技术进展,可关注 @AlloomiAI
👉🏻 Holistic Context 技术报告
👉🏻 Self-Evolving Agent 技术报告