RLM(Recursive Language Model)中文示例与介绍。基于 alexzhang13/rlm 与论文 Recursive Language Models。
RLM 让大模型通过「写代码 + 递归调用子模型」在 REPL 里处理超长上下文,而不必把百万级 token 直接塞进模型。本仓库提供:
- 中文介绍:RLM 是什么、能解决什么问题
- 可运行测试:按论文 §2.1「processing costs 随输入长度怎么增长」分为三档,方便用户实际跑一跑
- 与 Skill / Claude 的尝试:将 RLM 思路做成可复用能力的一些尝试
按论文 §2.1,处理成本随输入长度的增长可分为三档,本仓库会提供对应示例,让用户真正跑通并对比 RLM 与普通长上下文方案。
| 复杂度 | 说明 | 本仓库示例 |
|---|---|---|
| O(1) 常数 | 需要参与推理的「证据量」不随输入变长而变多 | S-NIAH、BrowseComp-Plus、CodeQA |
| O(N) 线性 | 几乎每一行/每条都要参与语义变换或汇总 | OOLONG (TREC) |
| O(N²) 二次 | 几乎每条与每条都要成对参与(pairs) | OOLONG-Pairs |
- S-NIAH(Single Needle in a Haystack):在大量无关文本里找一个短语/数字;needle 数量固定,处理量近似常数。
- BrowseComp-Plus(1K documents):输入是 1000 篇文档,但回答问题时真正需要的证据文档数量是常数级;多跳检索 + 固定证据量。
- LongBench-v2 CodeQA:每题需要推理的文件数是固定的(fixed number of files),从「随输入规模增长的复杂度」看也是 O(1)。
- OOLONG(TREC coarse split):对数据集中几乎所有条目做语义变换并汇总,处理成本随输入长度线性增长。
- OOLONG-Pairs:需要聚合**几乎所有条目对(pairs)**来构造答案,处理成本随输入规模二次增长;论文里普通 LLM 在此类任务上接近失效,RLM 能显著拉开差距。
rlm-cn-sample/
├── README.md
├── docs/ # 中文介绍、文章
├── examples/
│ ├── o1-constant/ # O(1):S-NIAH、BrowseComp-Plus、CodeQA
│ ├── oN-linear/ # O(N):OOLONG (TREC)
│ └── oN2-quadratic/ # O(N²):OOLONG-Pairs
└── ...
每个示例目录内会有:任务说明、数据/生成方式、运行命令(基于本仓库 rlm/,API 见仓库根 .env)。
在仓库根目录创建 .env 文件,设置 API Key:
# 使用 Moonshot (Kimi)
MOONSHOT_API_KEY=你的key
# 或使用 OpenAI
OPENAI_API_KEY=你的key注意:.env 已在 .gitignore 中,不会被提交到仓库。
进入任意示例目录执行:
cd examples/o1-constant/s-niah
python main.py各示例的详细说明见 examples/ 下对应目录的 README。
示例与文档仅供学习参考;使用官方代码请遵循其仓库的 License。