用λ演算驯服LLM的递归:8B小模型干到70B的表现

💡 论文标题:The Y-Combinator for LLMs: Solving Long-Context Rot with λ-Calculus

📅 发表时间:2026年3月20日

👤 作者:Amartya Roy, Rasul Tutunov, Xiaotong Ji, Matthieu Zimmer, Haitham Bou-Ammar

📎 论文链接:https://arxiv.org/abs/2603.20105

💻 代码:github.com/lambda-calculus-LLM/lambda-RLM


🎯 核心摘要

当你让LLM处理一本书、一个大型代码仓库这样的超长输入时,模型质量会随着文本变长而"腐烂"(Long-Context Rot)——准确率指数级下降。最近MIT提出的递归语言模型(RLM)方案是让LLM自己写Python代码来递归地分解和处理长文本,但问题是:LLM写的递归代码经常写死循环、运行成本不可控、延迟方差极大。

这篇论文的核心思路很硬核:既然LLM写的自由代码不靠谱,那就别让它写了——用λ演算的类型化组合子(typed combinators)替代自由代码生成。就像把一辆没有限速器的赛车装上了赛道护栏:LLM只负责语义理解(它擅长的事),程序控制流由数学上可证明终止、成本可预算的符号运算来执行。

结果:在4类任务、9个模型的36个对比中赢了29个,弱模型(8B)+λ-RLM的准确率直接追平强模型(70B)+普通RLM,延迟降低4.1倍。

定位:这是一篇将程序语言理论与LLM推理结合的工作,核心创新在于用形式化的符号控制流替代LLM的自由代码生成,属于"给LLM加护栏"这条技术路线的一个高质量实现。


📖 问题动机:Long-Context Rot 与 RLM 的困境

长上下文推理的衰减问题

LLM处理长文本时,准确率随长度指数级下降。论文给出了形式化描述:直接推理的准确率 \(\mathcal{A}_{\text{direct}}(n) = \Theta(\rho^{n/K})\),其中 \(\rho \lt 1\)——输入长度 \(n\) 每翻倍,准确率就打一个折扣。

这不是某个模型的个别问题,而是注意力机制的结构性限制。即使窗口拉到128K,当信息分散在超长文本中时,模型的检索和推理能力都会严重退化。

RLM:一个好主意,但执行有风险

2025年底,Zhang等人提出了递归语言模型(RLM):让LLM把长文本切分成块,对每块递归调用自己,最后汇总结果。RLM把问题从"处理超长文本"变成了"处理若干短文本"。

但RLM有个致命问题:它让LLM自己写递归代码。LLM写的Python代码存在三个隐患:

问题 表现 后果
非终止风险 递归没有正确的base case 死循环,API调用无限增长
成本不可控 分支因子、递归深度随意 无法提前预算计算开销
延迟方差大 不同输入的代码差异巨大 生产环境SLA无法保证

论文给了一个真实数据:普通RLM的延迟最大/最小比值达到8.9×,而λ-RLM只有4.3×。


🏗️ λ-RLM 框架设计

核心理念:关注点分离

λ-RLM把计算分成三层,每层做自己擅长的事:

┌─────────────────────────────────┐
│  Layer 3: 符号控制层(确定性)   │  ← Split, Map, Filter, Reduce...
│  决定"怎么拆、怎么合"           │     数学保证终止、成本可算
├─────────────────────────────────┤
│  Layer 2: 规划优化层             │  ← 选择最优分块大小 k*
│  决定"拆多大块"                 │     基于成本公式求最优解
├─────────────────────────────────┤
│  Layer 1: 神经叶子求解器         │  ← LLM (ℳ)
│  处理短文本的语义理解            │     擅长的事
└─────────────────────────────────┘

关键洞察是:LLM擅长语义理解(给一段短文本回答问题),但不擅长程序控制(写递归、管理状态)。λ-RLM把后者交给符号系统,前者留给LLM。

组合子库

论文定义了一组核心组合子(combinators),每个都有精确的类型签名:

组合子 类型 功能
Split \(\Sigma^* \times \mathbb{N} \to [\Sigma^*]\) 将长文本切成k个连续块
Peek \(\Sigma^* \times \mathbb{N}^2 \to \Sigma^*\) 按位置提取子串
Map \((\alpha \to \beta) \times [\alpha] \to [\beta]\) 对每个块执行操作
Filter \((\alpha \to \mathbb{B}) \times [\alpha] \to [\alpha]\) 过滤满足条件的块
Reduce \((\beta \times \beta \to \beta) \times [\beta] \to \beta\) 将列表归约为单个值
Cross \([\alpha] \times [\beta] \to [(\alpha,\beta)]\) 笛卡尔积(处理成对比较)
\(\Sigma^* \to \Sigma^*\) 神经预言机:调用LLM处理子问题

这些组合子就像乐高积木——每块形状固定,但组合方式灵活。不同任务通过不同的组合方式实现:

任务类型 复杂度 执行计划
S-NIAH(大海捞针) O(1) Split→Map(Peek)→Filter→Map(ℳ)
OOLONG(线性推理) O(n) Split→Map(ℳ)→Merge
OOL-Pairs(成对推理) O(n²) Split→Map(ℳ)→Parse→Filter→Cross
CodeQA(代码理解) Variable Split→Map(ℳ)→Best

Y-Combinator:把递归变成数学对象

这是论文标题中"Y-Combinator"的由来。在λ演算中,Y-组合子是实现递归的标准方式——它把递归编码为一个不动点,而不是依赖运行时的函数调用栈。

具体来说,λ-RLM的递归结构是:如果输入长度 \(n \leq \tau^*\)(LLM的有效窗口),直接调用ℳ处理;否则Split成 \(k^*\) 块,对每块递归调用。因为每一层输入长度缩减为 \(n/k^*\),递归深度被严格限制在 \(d = \lceil \log_{k^*}(n/\tau^*) \rceil\)

形式化保证

这是λ-RLM相比普通RLM的核心优势——可证明的终止和成本边界

终止定理:对任何有限输入 \(|P|=n\),函数 \(\Phi\) 必然终止。总ℳ调用次数 \(N(n) = (k^*)^d + 1\)

成本上界

\[T(n) \leq \frac{nk^*}{\tau^*} \cdot \mathcal{C}(\tau^*) + \mathcal{C}_\oplus(k^*) \cdot \frac{nk^* - \tau^*}{\tau^*(k^* - 1)}\]

准确率缩放(最关键的理论结果): - 直接推理:\(\mathcal{A}_{\text{direct}}(n) = \Theta(\rho^{n/K}) \to 0\)(指数衰减) - λ-RLM最坏情况:\(\mathcal{A}_{\lambda\text{-RLM}}(n) = \Omega(n^{-c})\)(幂律衰减,慢得多) - λ-RLM可分解任务:\(\mathcal{A}_{\lambda\text{-RLM}}(n) \geq \mathcal{A}(\tau^*)\)常数,不随长度衰减!

直觉解释:如果一个任务可以被完美分解(每块独立回答,合并无损),那么无论原始输入多长,λ-RLM的准确率等于LLM处理一小块的准确率——长度不再是瓶颈。

最优分块定理:在标准成本假设下,成本最小的分块大小 \(k^* = 2\)(二分法最优)。


🧪 实验结果

实验设置

  • 9个模型:3个家族(Qwen3、Llama、Mistral)× 3个规模(弱/中/强),从7B到405B
  • 4个任务:S-NIAH(大海捞针)、OOLONG(线性推理)、OOL-Pairs(O(n²)成对推理)、CodeQA(代码理解)
  • 上下文长度:8K到4.2M token
  • 对比方案:Direct(直接推理)、RLM(普通递归)、λ-RLM

主实验结果

图1:λ-RLM在不同模型规模上的准确率和延迟对比

图1:左图为准确率对比,右图为延迟对比。λ-RLM(红色)在弱模型上提升最大(+21.9pp),延迟降低3.3~4.1倍。

按模型规模的平均结果

模型规模 Direct RLM λ-RLM λ-RLM vs RLM
弱(8B/7B) 6.1% 13.8% 35.7% +21.9pp
中(32B+) 18.1% 31.3% 49.9% +18.6pp
强(235B+) 22.3% 50.1% 58.9% +8.8pp

一个亮眼的发现:Qwen3-8B + λ-RLM(35.7%)几乎追平 Llama-70B + RLM(36.1%),而延迟快3.1倍。换句话说,λ-RLM让8B小模型在长上下文推理上达到了70B模型的水平。

胜率统计

模型层级 λ-RLM胜出 RLM胜出 胜率
弱(8B/7B) 12/12 0/12 100%
中(32B+) 11/12 1/12 92%
强(235B+) 6/12 6/12 50%

规律很清晰:模型越弱,λ-RLM的优势越大。对于强模型(405B、235B),普通RLM的自由代码生成能力足够强,λ-RLM的结构化约束反而限制了发挥——特别是在CodeQA这类需要灵活代码导航的任务上。

延迟分析

任务 RLM平均延迟 λ-RLM平均延迟 加速比
S-NIAH ~140s ~40s 3.6×
OOLONG ~200s ~55s 4.2×
OOL-Pairs ~270s ~43s 6.2×
CodeQA ~170s ~61s 3.1×

OOL-Pairs的加速比最大(6.2×),因为O(n²)的成对比较在RLM中需要大量嵌套循环,而λ-RLM用Cross组合子一步搞定。

消融实验(Qwen3-8B × OOLONG)

消融项 准确率 延迟 Δ准确率
完整λ-RLM 48.3% 62.4s
A1: 随机分块k∈[2,100] 31.5% 88.7s −16.8pp
A2: 固定任务类型 41.2% 65.1s −7.1pp
A3: 用LLM做合并(非符号) 43.6% 108.3s −4.7pp
A4: 让LLM自由写代码(=RLM) 24.1% 241.6s −24.2pp
A5: 去掉预过滤 46.8% 74.2s −1.5pp

最关键的消融是A4:把组合子库去掉,让LLM回到自由写代码的状态——准确率暴跌24.2个点,延迟飙升4倍。这证明了组合子库是整个框架的基石。


🔬 深入分析

λ-RLM为什么在弱模型上效果更好?

弱模型(7B/8B)写代码的能力差,经常生成语法错误、逻辑漏洞、死循环的递归代码。λ-RLM完全绕过了代码生成,只让弱模型做语义理解(给一段短文本回答问题)——这恰恰是弱模型"还行"的部分。相当于用结构化框架补偿了弱模型的编程短板。

强模型(405B)的代码能力本身就很强,能写出精巧的自适应分块策略——比如在CodeQA中按函数边界切分、自适应调整批大小——这些灵活性被λ-RLM的固定组合子库截断了。

与原始RLM的本质区别

维度 普通RLM λ-RLM
控制流 LLM生成的Python代码 预定义的类型化组合子
终止保证 无(可能死循环) 有(递归深度 \(\leq \lceil \log_{k^*}(n/\tau^*) \rceil\)
成本预算 不可预知 执行前可计算闭式上界
延迟方差 高(max/min = 8.9×) 低(max/min = 4.3×)
灵活性 高(任意代码) 低(固定组合子库)
对模型能力的依赖 高(需要强代码能力) 低(只需语义理解)

🤔 批判性思考

亮点

  1. 理论功底扎实:4个定理+推论,从终止性到成本界到准确率缩放律,形式化做得很漂亮。特别是"可分解任务准确率不随长度衰减"这个结论很有指导意义
  2. 实验覆盖面广:9个模型 × 4个任务 × 多个长度,36个cell的对比足够撑起结论
  3. 实用价值明确:8B追平70B、延迟降4倍——对于预算有限的部署场景很有吸引力

局限

  1. 组合子库的覆盖面:Split/Map/Filter/Reduce/Cross这些组合子覆盖了"分治"范式的大部分场景,但对需要迭代推理(如多跳推理需要前后文信息传递)或动态控制流的任务,固定组合子可能力不从心

  2. 任务计划的选择:论文中的执行计划(比如S-NIAH用Split→Filter→Map(ℳ))是人工设计的,不是自动发现的。实际部署时谁来写这些组合计划?论文没有展示自动任务分类和计划生成的完整pipeline

  3. CodeQA上的明显短板:在需要灵活代码导航的CodeQA任务上,4个强模型cell中λ-RLM全部输给RLM。这说明在"需要理解代码结构"的场景中,固定粒度的Split切分远不如LLM自适应按函数/类边界切分

  4. 表格数据的可复现性:论文声称开源但我未能验证。9个模型中包括405B这样的大模型,复现成本极高

与同期工作的关系

原始RLM论文(Zhang et al., 2025)是λ-RLM的直接前置工作。QwenLong-L1(Wan et al., 2025)从RL角度做长上下文推理增强,思路不同但目标一致。λ-RLM的独特之处在于它不训练任何东西——纯粹是推理时的结构化框架,即插即用。


💡 工程启示

  1. 弱模型+强框架 > 强模型+弱框架:在长上下文场景下,与其用昂贵的大模型直接推理,不如用廉价的小模型搭配λ-RLM这样的结构化框架。8B+λ-RLM ≈ 70B+RLM,成本差距可能是10倍

  2. 分治是长上下文推理的关键范式:无论是RLM还是λ-RLM,核心思路都是"分而治之"。在工程实践中,遇到超长输入不要直接塞给模型,先想想能不能拆

  3. 成本可预算性在生产环境中至关重要:λ-RLM的闭式成本上界允许在执行前就知道"这个请求最多花多少钱/多长时间"——这对于定价、SLA设置、资源预分配都很有价值

  4. 灵活性和可靠性的取舍:RLM更灵活但不可控,λ-RLM更可控但不灵活。实际部署可以做混合策略:对于可分解的标准化任务用λ-RLM,对于需要灵活导航的任务用RLM


觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注公众号:机器懂语言