内容
# RLM MCP 服务器
[](https://github.com/ahmedm224/rlm-mcp)
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/MIT)
[](https://arxiv.org/abs/2512.24601)
**使用 Claude Code 分析超过 10GB 的文件** — 无需 API 密钥。
一个 MCP 服务器,实现 [MIT 的递归语言模型](https://arxiv.org/abs/2512.24601),允许 Claude Code 分析超过其上下文窗口大小的文件。
```
┌─────────────────────────────────────────────────────────────┐
│ "在此 5GB 日志文件中查找所有错误" │
│ │
│ Claude → 编写 Python → RLM 执行 → 返回结果 │
│ │
│ 结果:78% 更少的令牌,相同的准确率 │
└─────────────────────────────────────────────────────────────┘
```
---
## 快速开始
**1. 安装:**
```bash
pip install rlm-mcp
```
**2. 配置 Claude Code** (`~/.claude/settings.json`):
```json
{
"mcpServers": {
"rlm": {
"command": "rlm-mcp"
}
}
}
```
**3. 使用它:**
```
加载 /var/log/syslog 并查找所有内核错误
```
就这样。Claude 会自动为大型文件分析使用 RLM。
---
## 为什么使用 RLM?
| 问题 | 传统方法 | RLM 解决方案 |
|---------|-------------|--------------|
| 10GB 日志文件 | ❌ 不适合上下文 | ✅ 外部加载,通过 Python 查询 |
| 令牌使用 | 📈 ~12,500 令牌 | 📉 ~2,700 令牌(减少 78%) |
| 复杂分析 | ❌ 仅限 grep 模式 | ✅ 全功能 Python(正则表达式,统计,聚合) |
### 真实基准测试
在 300KB 系统日志上使用 Claude Code Opus 4.5 进行测试:
```
┌───────────┬──────────────┬───────────────┬─────────┐
│ 方法 │ 输入令牌 │ 输出令牌 │ 总计 │
├───────────┼──────────────┼───────────────┼─────────┤
│ Grep/Read │ ~10,000 │ ~2,500 │ ~12,500 │
│ RLM │ ~1,500 │ ~1,200 │ ~2,700 │
└───────────┴──────────────┴───────────────┴─────────┘
两种方法发现了相同的結果。
RLM 使用的令牌减少了 78%。
```
---
## 科学原理
基于 **[递归语言模型](https://arxiv.org/abs/2512.24601)** 来自 MIT CSAIL:
> *"我们提出将长上下文视为一个 '外部环境',通过 Python REPL 进行交互..."*
> — Alex L. Zhang, Tim Kraska, Omar Khattab (MIT), 2025
### 论文结果
| 基准测试 | 传统方法 | RLM |
|-----------|-------------|-----|
| S-NIAH (8M 令牌) | 39.3% | **96.0%** |
| OOLONG QA | 36.2% | **56.7%** |
---
## 工作原理
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Claude Code │────▶│ RLM 服务器 │────▶│ Python REPL │
│ (大脑) │◀────│ (MCP) │◀────│ (执行) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
1. 您询问:”在此巨大的日志文件中查找错误”
2. Claude 通过 rlm_load_file() 加载文件
3. Claude 编写 Python:re.findall(r'ERROR.*', context)
4. RLM 在整个文件上执行(在 Claude 的上下文之外)
5. 只有结果返回给 Claude
6. Claude 用发现的结果回答
```
**关键见解:** Claude 是大脑,RLM 是执行者。无需 API 密钥 — 使用您的 Claude Code 订阅。
---
## 可用工具
| 工具 | 描述 |
|------|-------------|
| `rlm_load_file` | 加载一个大文件 |
| `rlm_load_multiple_files` | 加载多个文件为字典 |
| `rlm_execute_code` | 在加载的内容上运行 Python |
| `rlm_get_variable` | 获取变量的值 |
| `rlm_session_info` | 检查会话状态 |
| `rlm_reset_session` | 清除会话内存 |
---
## 使用场景
```
┌─────────────────────────────┬────────────────────┐
│ 使用场景 │ 推荐使用 │
├─────────────────────────────┼────────────────────┤
│ 小文件(<50KB) │ 直接读取 │
│ 单个模式搜索 │ Grep │
│ 大文件(>200KB) │ ✅ RLM │
│ 复杂分析/统计 │ ✅ RLM │
│ 多模式关联 │ ✅ RLM │
│ 聚合/计数 │ ✅ RLM │
│ 跨文件分析 │ ✅ RLM │
└─────────────────────────────┴────────────────────┘
```
---
## 示例会话
```python
# 加载一个大日志
>>> rlm_load_file("/var/log/app.log")
文件加载:2,847,392 字符
# 搜索错误
>>> rlm_execute_code("""
import re
errors = re.findall(r'ERROR.*', context)
print(f"发现 {len(errors)} 个错误")
""")
发现 156 个错误
# 分析模式
>>> rlm_execute_code("""
from collections import Counter
types = re.findall(r'ERROR.*?\] (\w+)', context)
print(Counter(types).most_common(5))
""")
[('连接', 67), ('数据库', 43), ('超时', 28)]
```
---
## 安全
- **30 秒超时** — 运行的代码自动终止
- **进程隔离** — 使用多进程
- **输出截断** — 防止内存问题
---
## 要求
- Python 3.10+
- 支持 MCP 的 Claude Code
- 无需 API 密钥
---
## 链接
- **GitHub:** https://github.com/ahmedm224/rlm-mcp
- **论文:** https://arxiv.org/abs/2512.24601
- **问题:** https://github.com/ahmedm224/rlm-mcp/issues
---
## 引用
```bibtex
@article{zhang2025recursive,
title={递归语言模型},
author={Zhang, Alex L. and Kraska, Tim and Khattab, Omar},
journal={arXiv preprint arXiv:2512.24601},
year={2025}
}
```
---
## 许可证
MIT © Ahmed Ali