📌 项目地址: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-rl 和 verifiers 库,允许你训练专门适配递归调用的模型。训练好的模型可以直接接入推理引擎使用。(训练具体命令请参考 training/ 下的说明和官方文档。)
需要注意的事
- 安全风险:默认的沙箱使用
exec执行模型生成的代码,这意味着如果模型生成恶意代码,它会在你的环境中运行。生产部署时务必使用 Docker 或虚拟机隔离(项目支持 sandbox 参数切换)。 - 模型要求:不需要特殊训练即可使用,但效果受基础模型能力影响较大。如果模型本身无法正确生成递归调用逻辑,RLM 的优势就难以发挥。论文中实验使用了 GPT-4o 等强模型。
- Python 版本:必须 >=3.11,因为依赖了某些新语法特性(如
exec的改进)。 - 依赖管理:安装在宿主环境中的依赖包在 REPL 中可用,但全局模块列表有限制,详见文档。
- 许可证:README 未明确写明许可证,但声明为 MIT OASYS 实验室维护,开源可贡献,具体以仓库 LICENSE 文件为准。
RLM 目前处于早期阶段,但思路新颖——它把语言模型的推理从“单次预测”拓展为“图灵完备的递归过程”。如果你正在为长上下文问题寻找新的解决思路,或者想探索 CodeAct 风格的模型交互,这个项目值得关注。