📌 项目地址alexzhang13/rlm | ⭐ 4,855 颗星 | 🔧 Python | 📜 未标注

超长上下文的老问题与新解法

当前大语言模型(LLM)在上下文长度上有硬性天花板——无论是4K、128K还是1M token,总有一个不可逾越的边界。传统应对方案无非是截断、RAG检索、滑动窗口或对中间层做压缩,但都存在信息丢失或复杂度剧增的问题。

RLM(Recursive Language Models)抛弃了“一次性喂入整个上下文”的思路,转而让模型自己程序式地检查、分解、递归地调用自己。核心变化只有一行代码:把 llm.completion(prompt, model) 换成 rlm.completion(prompt, model)。这背后是一个 REPL 环境(代码沙箱),LLM 可以把上下文作为变量存放在其中,并随时发起子 LLM 调用来处理局部内容。

这一设计基于一个判断:未来所有语言模型都应该拥有一个代码环境(即 CodeAct 风格的 harness)。RLM 将子调用视为代码中的函数,将上下文视为代码中的对象,而不是用 JSON 格式的工具调用来和外部交互。这种递归语义赋予了模型处理接近无限长序列的能力。

快速上手:安装与基本用法

RLM 的推理库已发布到 PyPi,需要 Python 3.11 或更高版本

pip install rlms

默认的 RLM 客户端使用宿主进程的 Python exec 作为 REPL 沙箱,也就是说它的运行环境与你的当前 Python 虚拟环境一致(共享已安装的依赖包,但全局模块有部分限制)。下面的代码片段展示了如何创建 RLM 实例并调用 completion(以 OpenAI 的 GPT-5-nano 为例,模型名是 README 中给出的):

from rlm import RLM

rlm = RLM(
    backend="openai",
    backend_kwargs={"model_name": "gpt-5-nano"},
    verbose=True,  # 设置为 True 会打印详细过程,默认关闭
)

# 调用 completion,示例 prompt 被截断,完整用法请参考官方文档
print(rlm.completion("Print me the first 100 power"))

注意:上述代码中的 completion 参数在 README 中被截断,完整调用方式以 官方文档 为准。

RLM 支持多个沙箱环境(sandbox),包括本地 Python 进程、Docker 容器等,可通过 sandbox 参数配置。后端除了 OpenAI 兼容接口,也支持本地部署的模型(如通过 vLLM 或 llama.cpp 运行的模型)。

与现有工具调用(Tool Calling)的根本区别

主流 LLM 的 tool use 通常是 JSON 格式的函数调用:模型输出一个 JSON 对象,系统解析后调用外部 API。RLM 不是这样——它直接让模型在代码环境里编写 exec() 或子 rlm.completion() 调用。这意味着模型可以:

  • 动态生成 Python 代码来循环处理数组、递归搜索文件、并行调度多个子任务;
  • 将中间结果直接赋值给变量,而不是塞回上下文;
  • 利用语言本身的控制流(if/for/while)而不依赖有限的状态机。

这种模式更适合需要多步推理、长文档分析、代码生成的场景。例如让 RLMs 分析一本小说,它会先分段摘要,再对摘要做进一步处理——每一步都通过递归调用完成,中间结果存在变量里,而不会撑爆上下文。

训练自己的 RLM

项目不仅提供推理引擎,还包含训练环境。training/ 文件夹基于 Prime Intellect 的 prime-rlverifiers 库,允许你训练专门适配递归调用的模型。训练好的模型可以直接接入推理引擎使用。(训练具体命令请参考 training/ 下的说明和官方文档。)

需要注意的事

  1. 安全风险:默认的沙箱使用 exec 执行模型生成的代码,这意味着如果模型生成恶意代码,它会在你的环境中运行。生产部署时务必使用 Docker 或虚拟机隔离(项目支持 sandbox 参数切换)。
  2. 模型要求:不需要特殊训练即可使用,但效果受基础模型能力影响较大。如果模型本身无法正确生成递归调用逻辑,RLM 的优势就难以发挥。论文中实验使用了 GPT-4o 等强模型。
  3. Python 版本:必须 >=3.11,因为依赖了某些新语法特性(如 exec 的改进)。
  4. 依赖管理:安装在宿主环境中的依赖包在 REPL 中可用,但全局模块列表有限制,详见文档。
  5. 许可证:README 未明确写明许可证,但声明为 MIT OASYS 实验室维护,开源可贡献,具体以仓库 LICENSE 文件为准。

RLM 目前处于早期阶段,但思路新颖——它把语言模型的推理从“单次预测”拓展为“图灵完备的递归过程”。如果你正在为长上下文问题寻找新的解决思路,或者想探索 CodeAct 风格的模型交互,这个项目值得关注。

这篇文章对你有帮助吗?

发表回复