递归语言模型RLM颠覆智能体:RLM代码递归破解长上下文


别让模型背书了!RLM直接教它写程序,传统Agent被掀桌!RLM让模型写程序代替背文本,通过代码沙箱递归调用解决长上下文难题。predict-rlm工程化落地,小模型靠此法反超大模型。

RLM全称Recursive Language Models,翻译成人能秒懂的话就是:我们把大模型这个“脑子”直接塞进一个能跑代码的电脑环境里。模型一边写代码,一边喊自己来帮忙,通过递归和REPL循环把“我一步一步想问题”的过程变成“直接能点运行的软件”。这套操作直接解决了传统AI做复杂任务时脑子不够用、上下文太长记不住、性能越跑越慢的三大死穴。

传统Agent干活的方式像什么?像你让一个记忆力超强的同学背下一整本百科全书,然后问他第352页第7行写了什么。他背到第200页就开始忘前面,背到第300页整个人就糊了。RLM完全不一样,它不背书,它直接写程序去查。你问它问题,它先写一行代码:“打开文件,跳到第352页,读第7行”。这个过程靠代码组织计算,不是靠脑袋硬记信息。

predict-rlm这个项目把论文里看起来很牛但没人会用的玩法,直接打包成一个能装进你电脑、马上就能跑起来的工程工具。你不用读那些烧脑的论文,不用自己搭实验环境,装好就能开干。这个项目让RLM从“学术界玩具”变成了“工程师能用的武器”。

从“模型写字”到“模型写程序”,范式彻底变了

传统大模型干活的方式说白了就是文本补全。你给它一段开头,它拼命猜下一个字是什么。这个方法写个几百字的朋友圈没问题,一旦任务变复杂,比如让你同时分析十份合同、对比两百张发票、再从一万条聊天记录里找证据,模型就会进入一个经典死局:上下文越长,智商越低。业内人士给这个现象起了个名字叫context rot,就是上下文烂掉了。

关键转折点在于,RLM把“推理过程”从模型脑子里搬出来,放进了代码环境里执行。模型不再靠一次性生成长文本,而是在REPL环境里一步步运行。REPL是什么?就是你写一行代码,电脑立刻执行,给你结果,你再写下一行。模型每一步都可以做四件事:第一,读取硬盘上的文件。第二,调用另一个小模型帮自己干活。第三,把中间结果写下来下次再用。第四,根据刚才的结果决定下一步做什么。

你可以把模型想象成一个学生,传统方式是老师逼他一次写五千字作文,写到后半段他自己都不知道前面写了啥。RLM方式是这个学生打开电脑,写一行代码运行一下,看一眼结果,再写下一行代码。他从“写作文的学生”变成了“边写边跑代码的程序员”。这不是优化,这是物种进化。从背答案到写程序,这个差距比你从骑自行车换成开飞机还要大。

Sandbox才是灵魂,不是附属组件

很多人第一次接触RLM的时候,眼睛死死盯着“递归调用模型”这五个字,觉得好高级好厉害。但真正关键的东西根本不是递归,而是sandbox,也就是沙箱环境。沙箱就是一个完全隔离、绝对安全、可以随便折腾的电脑环境。模型在里面干什么都行,拆系统、删文件、跑死循环,都不会影响你真实电脑上的东西。

这个沙箱里装的东西比你想象的丰富得多。它不是只给你一把锤子或者一个计算器,而是给你一个完整的运行环境。里面包括:输入数据(你丢给模型的所有文件)、工具接口(模型可以调用外部能力的管道)、prompt本身作为变量存在(模型可以读到自己被问的问题)、还有一个真实的文件系统(模型可以创建文件夹、写文件、删文件)。这意味着模型的思考空间被结构化了,不再是脑子里一团乱麻。

以前的Agent工作方式是什么?模型脑子里一团浆糊,全靠你写的那段prompt硬撑。prompt稍微写偏一点,整个回答就飞到天上去。现在的RLM是模型脑子外面直接接了一个操作系统,思考过程变成执行程序。每个想法都能变成一个文件,每次推理都能变成一行代码。有人做了一个很精准的类比:代码等于推理的代数表达式。你写一行“读取所有PDF文件”,这一行代码背后可能代表模型自己调用了一百万次子任务,但你看上去就一行。这就是符号化推理带来的压缩能力,把海量计算压缩成几行代码。

小模型反杀大模型,背后的逻辑很硬核

论文里有一句特别狠的话:小模型加上REPL环境,战斗力超过大模型没有REPL环境。这句话听起来像玄学,你可能会想,我花大价钱买的最强模型,怎么可能被一个小破模型加个环境就反超了?但这就是工程逻辑,不是玄学。传统大模型有两个致命问题:第一,它每一步都要想清楚再输出,不能边做边改。第二,它不能复用中间结果,做一次任务和做一百次任务一样累。

RLM的优势非常硬核。第一,它可以把一个大问题拆成无数个小问题,递归处理。第二,每一步都是确定性的执行,不像大模型猜下一个字那样随机。第三,它可以缓存、复用、验证中间结果。你让RLM处理一万张发票,它第一张发票写了一个解析函数,后面九千九百九十九张直接复用,不用再动脑子。大模型做第一张发票和做第一万张发票,每次都重新读一遍全部内容。

所以小模型在RLM结构里,相当于一个会写函数的工程师。小模型本身智商可能只有80,但它会写程序,能把问题拆开,让程序帮它干活。大模型在传统模式里,像一个记忆力很强但不会写代码的实习生。他记忆力特别好,你给他什么他都能背下来,但你要他同时处理两百个任务,他直接就崩溃了。这就是为什么RLM能做到成本更低、性能更高、稳定性更强,三件事同时优化,不是拆东墙补西墙。

Bitter Lesson在这里直接落地了

AI行业有一个著名的Bitter Lesson,苦教训,说白了就是一句话:别搞那些花里胡哨的技巧,堆算力和用通用方法才是王道。历史上所有试图用小技巧绕过算力瓶颈的做法,最后都被算力碾压了。RLM完美符合这条路线,它不依赖复杂的prompt engineering,不依赖人工设计workflow,不绑定特定模型能力。你今天用GPT-4,明天换GPT-5,RLM自动变强,不需要你改任何代码。

核心逻辑非常简单粗暴:模型变强,RLM自动变强。模型从GPT-4升级到GPT-5,推理能力提升了,RLM写出来的程序就更聪明。没有“重写Agent框架”这件事,没有“prompt全改一遍”的痛苦。你在传统Agent里优化三个月的工作流,换一个模型就全废了。RLM不用,你今天用GPT-5.1,明天换GPT-6,RLM直接起飞,性能跟着涨。

这在工程上意味着一个极其关键的点:系统不会过时。你做技术最怕什么?最怕你今天熬夜写的代码,三个月后模型一升级就全废了。RLM不会,你的系统架构不变,模型随便换。这就像你造了一台万能插座,不管电压怎么变,插上去就能用。投资回报率极高,一次搭建,长期受益。

为什么它能解决context rot这种老大难问题

传统Agent一旦上下文太长,就会出现失忆加胡说八道的组合症状。模型读到第50页的时候,已经把第1页的内容忘得一干二净。你问它第1页写了什么,它开始瞎编,编得还挺像真的。这就是context rot,上下文烂掉了。RLM的解法非常直接粗暴,根本不跟这个问题正面硬刚。根模型不直接接触完整上下文,而是通过写程序去访问信息。

我给你举个简单的例子。传统方式是:你把一份十万字的合同一次性全部塞给模型,说“帮我找出所有关于赔偿责任的条款”。模型读到第8万字的时候,第1万字写了什么已经忘光了。RLM的方式是:模型先写一行代码,“打开合同文件,定位到‘赔偿责任’这个关键词出现的位置”,然后只读那几段。模型根本不背整本书,它只读需要的那几页。

这就好比两种人:普通人要回答书里的问题,先把整本书背下来。RLM要回答同样的问题,直接用目录加索引随时查。你背一本书要一个月,查一本书只要一秒钟。RLM可以处理超大规模数据,比如整个公司的文档库、几万小时的视频、几千份合同,系统不会崩,不会忘,不会瞎编。这就是工程上的降维打击,不跟问题较劲,换一种方式绕过问题。

可解释性第一次真正工程可用

传统大模型有一个让人抓狂的问题:你不知道它为什么这么回答。你问它“为什么选A不选B”,它给你编一段听起来很合理但完全不是真实原因的解释。这就没法debug,你没法知道哪里出错了,只能瞎调prompt。RLM直接反过来做,每一步调用都有记录,每个子任务都有输出,每次验证都有路径。

你可以完整看到一条轨迹:模型先看了哪段内容,然后调用了哪个子模型,为什么把大问题拆成这几个小问题,在哪一步出错了。这不是“更透明一点”的小修小补,这是直接可debug。你打开日志,就能看到模型每一步干了什么,跟看程序运行日志一样清晰。你甚至能找到具体哪一行代码写错了导致结果不对。

更狠的是,这些轨迹还能喂给优化工具继续进化策略。传统方式调prompt全靠感觉,今天改一下试试,明天改一下试试,跟算命一样。RLM的方式是把“调prompt”升级成“训练推理策略”。你收集一堆成功和失败的轨迹,用数据训练模型怎么更好地分解问题。这是从手工作坊到工业化生产的跨越,可解释性不再是论文里的漂亮话,而是工程上的硬能力。

predict-rlm做了什么工程落地

论文讲完是一回事,能不能用是另一回事。学术界每天发几百篇论文,真正能跑起来的不到百分之一。

predict-rlm解决的就是这个“能用”的问题。它干了几件关键事情,每一件都是工程上的硬骨头。

第一,用DSPy signatures定义输入输出,你不用写prompt了,直接告诉模型输入是什么、输出是什么。

第二,支持sub-LM结构化调用,主模型可以随时喊小模型帮忙。

第三,用Pydantic保证类型安全。你定义一个字段是整数,模型就不会给你传字符串。这在Python里是基本要求,但在AI系统里能做到这一点非常难。

第四,提供文件I/O,直接处理PDF、图片、音频文件,不用你自己写读文件的代码。

第五,在WASM沙箱里支持异步调用,模型可以同时做好几件事,不用等一件事做完再做下一件。第六,可以接入coding agent,调用npx skills这种专业工具。

这意味着你不需要自己搭RLM基础设施。你不用自己写沙箱代码,不用自己实现递归调用逻辑,不用自己处理文件读写。安装好predict-rlm,定义好输入输出,直接开干。这就像你买车不用自己造发动机,坐飞机不用自己设计机翼。工程落地的价值就在这里,把复杂的东西打包成简单的东西。

一段代码看懂RLM到底怎么用


$ uv add predict-rlm

这一步就是安装。没有花活,没有复杂的依赖配置,没有几十页的安装文档。工程师看到这个命令不会皱眉,这就是平时装包的标准操作。uv是Python生态里最快的包管理工具,加一个predict-rlm,回车,等几秒钟,装完了。


class AnalyzeImages(dspy.Signature):
    """Analyze images and answer the query."""
    images: list[File] = dspy.InputField()
    query: str = dspy.InputField()
    answer: str = dspy.OutputField()

这段代码在做一件非常关键的事:定义任务结构,而不是写prompt。你告诉模型,输入是一堆图片和一个问题,输出是一个答案。中间具体怎么做,模型自己决定。传统方式你要写几百字的prompt,告诉模型先做什么再做什么,遇到什么情况怎么办。现在你只定义输入输出的形状,就像画了一个框,模型自己往里填内容。


rlm = PredictRLM(AnalyzeImages, lm="openai/gpt-5.4", sub_lm="openai/gpt-5.1")
result = rlm(images=[File(path="page.png")], query="Extract all visible text.")

这里才是真正的精髓。主模型用GPT-5.4负责策略,子模型用GPT-5.1负责执行。整个过程自动调度,你没有写任何循环,没有写任何工具调用逻辑,没有写任何错误处理代码。但当你调用rlm的时候,背后发生的事情是:主模型先理解任务,决定怎么拆解,然后调用子模型去执行具体的图片文字提取,子模型返回结果,主模型检查结果对不对,不对就再调整策略,对就继续下一步。

你没有写这些逻辑,但全部自动发生了。这就是RLM和传统Agent的本质区别。你从写流程变成了定义接口,从指挥模型变成了让模型自己写程序。这个差别大到会改变整个AI工程的范式,就像从手工打铁变成了数控机床。

和Agent的本质差异:控制权到底在谁手里

传统Agent的干活方式是:你这个人先写一个详细流程,第一步做什么,第二步做什么,遇到什么情况走哪条分支。然后模型在每一步填一些内容,工具调用是硬编码写死的。比如你写死了“如果用户问天气,就调用天气API”。模型没有选择权,只能按你写的流程走。这就像你写了一个剧本,模型是演员,台词都定好了。

RLM的方式完全反过来:你这个人只定义接口,输入是什么,输出是什么。模型自己决定整个流程,工具调用是模型自己写代码生成的。模型可以说“我先调用文件读取工具,然后调用子模型分析,如果结果置信度太低,我就再读另一个文件”。控制权从你手里交到了模型手里,模型从演员变成了导演加编剧加主演。

一句话总结:Agent是人指挥模型干活,RLM是模型自己写程序干活。这差别非常大。前者你换个任务就要重写整个流程,后者你换个任务只换输入输出定义,中间流程模型自己重新生成。前者你的系统复杂度线性增长,每加一个功能就要加一堆代码。后者系统复杂度基本不变,加功能就是加一个类定义。这不是量变,这是质变,会改变整个AI工程的组织方式。

能落地的应用场景到底有多广

这套东西不是demo玩具,不是只能在论文数据集上刷分的东西。它真正强的地方在于处理复杂加长链路任务,就是那种传统Agent一做就崩的场景。

第一个场景是PDF合同解析与比对。你要从一百份合同里找出所有赔偿条款,对比哪些合同有上限哪些没有。传统方式要把一百份合同全部塞进上下文,模型直接爆掉。RLM写一个程序,逐个文件读,逐个条款提取,最后汇总对比。

第二个场景是发票批量结构化处理。每个月收两千张发票,要提取金额、日期、公司名称、税号。传统方式每张发票都要写一遍prompt,成本高速度慢。RLM写一个解析函数,第一张发票花十秒钟调试好,后面一千九百九十九张每张三秒钟跑完。

第三个场景是视频音频内容分析。一个两小时的会议录音,要提取所有决策点和待办事项。传统方式要把整个录音转文字再塞给模型,文本量大到模型读不完。RLM分段处理,每十分钟一段,提取关键信息,最后汇总。

第四个场景是大规模知识库检索与推理。公司有十万份技术文档,你问一个跨文档的问题,比如“哪些产品的某个模块用了某个技术”。传统方式没法做,因为十万份文档不可能全部塞进去。RLM写一个检索程序,先根据关键词找到相关文档,再逐个分析,最后汇总答案。第五个场景是深度研究型任务,比如“分析过去五年AI芯片行业的所有重要论文,总结技术路线演进”。

这些场景都有一个共同点:上下文巨大,推理链条很长,不能一次性做完。传统Agent在这些场景下基本都会崩,RLM正好卡位,这就是它的主场。