廉价模型能超越前沿模型吗?用 Codex 重建递归语言模型
大语言模型现在拥有巨大的上下文窗口。但这并不意味着它们能可靠地利用全部上下文。随着提示词越来越长,模型可能会遗漏细节、丢失关系追踪,或者给出一个貌似合理的摘要,而不是真正完成问题所要求的彻查工作。递归语言模型(Recursive Language Models,简称 RLM)论文提出了一种不同的接口:把大上下文放在模型外部,作为持久化编程环境中的一个变量暴露出来,让模型自己检查、切分,并递归查询较小的片段。我们用一个不寻常的约束重建了这套方法:不用 OPENAI_API_KEY,用 Codex CLI 作为模型后端,gpt-5.4-mini 同时充当 RLM 根模型和每一次子调用,而只把直接调用前沿模型作为独立的基准对照。结果令人鼓舞,也很昂贵,而且比“廉价模型等于前沿模型”这个说法要微妙得多。
RLM 改变了什么
普通模型调用大致是这样:
大提示词 -> 模型 -> 答案
而 RLM 则把关于输入的元数据交给根模型,并提供一个装载了真实上下文的 Python REPL:
问题
|
根模型
|
持有上下文的持久化 REPL
|-- 用代码检查和搜索
|-- 将上下文切分为有用的块
|-- 在这些块上调用较小的语言模型
|-- 验证并汇总结果
-- return the final answer
关键之处在于,根模型不需要把每份文档、记录、工具结果和部分答案都塞进自己的上下文窗口。大型中间值可以留在 REPL 变量里。子调用接收的是聚焦的、局部易于理解的任务。这让 RLM 不再像一个更大的提示词,而更像一个把中间数据放在内存之外处理的数据系统——只是它的语义运算单元恰好是个语言模型。
我们实际测试了什么
我们使用了 RLM 工作中协议描述的一个 OOLONG trec_coarse 验证示例。输入是一个 308,367 字符的上下文,包含 3,182 个常识问题。每个问题隐式地属于六种答案类型之一:数值、实体、人物、地点、缩写、描述和抽象概念。标签并未出现在上下文中。任务是推断出这些标签,并找出最稀少的类别。
我们比较了两种方案:
- 一次直接的 gpt-5.6-sol Codex 调用。
- 一个根调用和所有叶子调用都锁定为 gpt-5.4-mini 的 RLM。
直接的前沿模型调用回答了「缩写」,得分为 0。只用 mini 的 RLM 回答了「数值」,与标准答案一致。
| 方法 | 结果 | 模型调用次数 | 耗时 |
|---|---|---|---|
| 直接前沿模型调用 | 错误 | 1 | 40.1 秒 |
| 仅用 gpt-5.4-mini 的 RLM | 正确 | 至少 238 | 6,120.3 秒 |
RLM 的根调用首先检查了上下文的结构,然后对分块进行分类、重试格式错误的响应、缩小分块大小、使用结构化 JSON 输出重新对所有 3,182 个问题分类、检查覆盖是否完整,最后计算出最少出现的类别。这正是直接模型调用通常会蒙混过去、而递归程序能强迫自己完成的工作。
令人不适但有用的核查
最终答案正确,并不代表每一个中间判断都正确。我们把 mini 模型推断的计数与验证过的标签做对比:
| 标签 | 真实计数 | Mini 推断值 |
|---|---|---|
| 数值 | 398 | 402 |
| 实体 | 521 | 623 |
| 人物 | 544 | 488 |
| 地点 | 571 | 493 |
| 缩写 | 571 | 560 |
| 描述和抽象概念 | 577 | 616 |
模型在行级别的分类上出现了大量错误。
它仍然找出了正确的最小值,因为该数值比次小的真实类别高出了 123 项。这一差别至关重要。本次运行说明,任务分解改变了结果,让一个便宜模型解决了直接调用前沿模型时漏掉的问题。当然,这不能证明便宜模型精确还原了数据,单行结果也不足以说明两个系统总体等价。更严谨的说法是:在合适的长上下文任务上,RLM 内部的便宜模型可以媲美甚至超越直接调用前沿模型。
RLM 研究已经验证了四类有用的任务形态:
-
语义聚合:OOLONG 任务要求对分散在大型输入中的信息进行标注和聚合。实际应用包括:客户反馈分析、支持工单分类、调查汇总、事件与应用日志分析、文本记录的质量控制统计。本次实验就属于这一类。
-
多文档研究:BrowseComp-Plus 要求在一个非常大的离线语料库中跨文档拼接证据。类似应用包括:文献综述、技术文档调研、合同与政策比对、尽职调查资料库、有据可查的竞品研究。
-
代码库级理解:论文包含 LongBench-v2 CodeQA,其中的问题需要跨代码库文件进行推理。可能用途包括:架构映射、迁移影响分析、依赖与许可证审计、安全分诊、定位缺失测试、对照文档检查实现。
-
跨记录与成对推理:OOLONG-Pairs 要求系统在记录组合之间建立关系。应用场景可能包括:实体解析、策略冲突检测、按约束条件匹配候选对象、查找相关事件、识别不兼容配置,以及跨档案的关系发现。
这些任务的计算量可能呈平方级增长,因此需要严格的预算控制和确定性的后处理。
一个实际的新用例:读懂智能体会话档案
在翻看本机 Claude Code 的历史记录时,我们发现单份会话记录就有 242 MB,包含 39,570 条 JSONL 记录。所有项目会话记录合计约占 3.6 GB。这份大体积的会话并非 242 MB 的有用对话:其中约 176 MB 是附件记录,约 29 MB 是助手事件,约 20 MB 是用户和工具结果事件,约 12 MB 是文件历史快照。
这正是典型的 RLM 型问题。第一遍可以用确定性脚本流式读取 JSONL:对重复附件做哈希去重、重建父子事件关系、合并子智能体日志,并抽取消息、命令、文件变更、测试、提交、错误和结果。随后,RLM 可以分析规范化后的事件片段,并递归构建:跨会话的项目时间线、决策记录、尝试过又放弃的方案图谱、反复出现的失败模式、未完成的任务,以及带证据链的“实际交付了什么”摘要。最终报告应引用会话 ID、事件 ID、时间戳、命令和 Git 提交;否则,它不过是又一份“看起来合理”的摘要而已。
其他可能用例
同样的分解模式可以迁移到:从日志、工单和聊天记录中拼出长事件时间线;跨论文和实验记录做科学证据抽取;合规控制点与证据的映射;大型会议、邮件或项目文档归档;按细粒度评分标准给记录排序;图过滤与多跳关系发现;调和多个来源中相互矛盾的说法;从异质文本构建结构化数据集。
这里反复出现的要求并不是单纯的“输入很长”。一个好的 RLM 任务应具备四个属性:上下文可以被程序化地切分或检索;较小的语义子任务对便宜模型仍然可理解;中间结果能以结构化形式保存;最终结果可以被验证或重新计算。
RLM 不适合哪些场景
RLM 在以下默认情况下表现不佳:
- 低延迟聊天
- 一个提示词就能轻松回答的简单问题
- 稀疏检索(grep 或常规搜索就够)
- 需要单一连贯文风的创意写作
- 没有独立验证者的高风险精确决策
- 公开执行不可信的模型生成的 Python 代码
- 延迟预算紧张的高并发同步 API
我们成功的那一轮大概花了 102 分钟。这个时长可以接受用于研究运行或隔夜审计,但没法用在交互式端点上。
可复用包应该是什么形态
有用的抽象不是 OOLONG 运行器,也不是一个万能提示词,而是一种上下文计算运行时,附带一小套可复用的方案:run(
输入为 context、objective、recipe、answer_schema、verifier、budget,输出为 answer、evidence、validation、trajectory、usage。初始的分解方法(recipe)可以包括:aggregate_records(记录聚合)、evidence_synthesis(证据综合)、repository_analysis(代码库分析)、cross_record_join(跨记录连接)、timeline(时间线)、candidate_ranking(候选排序)。
在我们规划的配置中,Codex 后端会把根调用和子调用都锁定在 gpt-5.4-mini 上。前沿模型只会在评估环节出现,绝不进入 RLM 的调用树内部。要用于生产环境,还需要隔离的执行环境、调用次数与 token 上限、结构校验、脱敏处理、提示注入防御、可恢复的运行机制,以及每个重要结论对应的源码级证据。
下一步
这一行结果只证明了机制可行,还谈不上基准测试上的胜利。接下来要回答的研究问题主要有:
- 这种优势能否在全部 50 对 OOLONG 任务上保持?
- 并发能否在质量不变的前提下,把 102 分钟的耗时压下来?
- 哪些分解方法可以在不同领域之间直接迁移?
- 精确的逐行处理需要多强的验证?
- 仅用 mini 模型的 RLM,能不能把数 GB 的智能体历史记录,变成一份可靠、可溯源的开发叙事?