@draht/rlm (英语)
递归语言模型 (RLM)——张作霖的推论-时间脚手架,,,
克拉斯卡、克塔布(2026年), 递归语言模型 (arXiv:2512.24601) (中文(简体) )
root-LLM-出品-代码-REPL-执行-截取-出品-历史-附录-
最后检查。 让根模型解答关于输入量的问题远远大于
通过写 Python 来检查、块和搜索它自己的上下文窗口
从沙盒中的 REPL 内容,可选择重现为
次级llm_query 电话,而不是呼叫者 永远装入原始内容
进入一个提示.
何时选择 RLM 而不是普通代理
当输入真的不符合模型的背景时, 联系 RLM 窗口,或仅通过切换可能很重要的内容来适应:
- 日志文件,数据集堆放,或输出为 10 个或 数百兆字节——从任何模型的窗口过后的数量级.
- 源文件的目录/ glob 太大, 无法完整读取而不驱逐 之前的对话背景 .
- 任何你不得不猜测哪个前缀/后缀/样本的情况 要切入的输入,错误的猜测意味着缺少答案.
当输入在模型中已经舒适地匹配时,不要到达 RLM 上下文窗口 — 普通读取速度快, 费用更低, 并且更容易调试 。 RLM 语言 将一个直接读作若干次额外的模拟往返(见下文) 贸易只有在替代品为短线引起的信息时才有回报 损失,不只是"这个文件有点长"
费用封套
一个正常的读取是一通呼叫:整个输入进入了即时,模型 答过一次 RLM为 没有 普罗万象比那便宜.. 不同贸易:
- 根模型每个REPL步骤发出一个呼叫(一小到几十个)
每个步骤的 Python 本身可能叫做
llm_query(...),这是 第二届 型号调用(一般改为较小) “rlm-sub”角色——见router-session.ts是因为RlmRole费用,包括 钱. - RLM的总成本是
sum(root-step costs) + sum(sub-call costs)对 一个基线的单调。 RLM在基线单调时获胜 否则要求要么彻底失败(投入根本不适合),要么 支付大得多的上下文窗口/ 重新读取输入复数 为了补偿短篇小说——而不是在 一般情况. - 别猜了 量度.
src/cost-comparison.ts是因为compareCost()计算一个轨迹的两个数字:rlmCostUsd从轨道上 自己登录的费用条目(readCostLog编号 :getSessionCosts从@draht/router过滤trajectoryId),以及baselineCostUsd作为 估计费用@draht/router是因为estimateCost只有一个呼叫 将相同的内容切入目标模型的上下文窗口 (第一——N——特征——那——适合——一个简单,命名的策略,而不是声称 这是最聪明的短跑。 对照真实的轨道ID运行 假设 RLM 是您更便宜(或更昂贵)的选择 具体投入/模式配对;.draht/rlm/cost-comparison-report.json实值 比较时写报告.
可观察性:轨迹日志和重放
每个 createRouterBackedSession 运行写入新线限制的 JSON
轨迹日志到 .draht/rlm/<trajectoryId>.jsonl (单位:千美元)src/trajectory.ts(b) ——
一个 TrajectoryStepEntry 每个 REPL 步骤( 其代码、 已截断的 stdout, 错误, 如果
{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}加一个航站楼 {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}那台台阶的自负
TrajectoryFinalEntry 一旦会议决定. trajectoryId 一样
ID 已经用于标记会话的 @draht/router 成本记录条目,所以
轨迹日志及其成本核算总是与同一键相关.
因为整个运行都在磁盘上,所以可以用 零 LLM 电话数字 :
draht rlm replay <trajectory-id>
读取 JSONL 日志通过 readTrajectory() 并打印最后答案(添加a)
动词旗表示完整的分步跟踪)——没有路由器,没有模型,没有
在那个代码路径上的网络访问。 用于审计什么会话
实际上,调试一个没有达到的跑步 FINAL,或审查费用
没有重新运行任何东西.
这个 test/s-niah.test.ts 在 10x 和 100x a 时召回回归套件
模拟根模型的上下文窗口(合成针入海斯塔克 ~4M和
~ 40M 字符, 对脚本模拟器 rootLlm ——没有真正的模型呼叫)作为
脚手架上还找到一个规模的针头.
工作实例
说 deploy.log 是一个40 MB 的部署日志,您需要知道是什么原因
埋在其中某处的断气 太大了 无法粘贴成正常的快感.
同样的问题,有三个方法:
交互式 /rlm 命令 (a内) draht 会议:
/rlm deploy.log What caused the outage around the 03:00 UTC deploy?
draht rlm 国 际 (可说明,一发:
draht rlm --input ./deploy.log --query "What caused the outage around the 03:00 UTC deploy?"
rlm_query 工具 (代理人推迟阅读本身,即会中,取而代之)
将日志装入自身上下文中:
{
"tool": "rlm_query",
"input": {
"input": "deploy.log",
"query": "What caused the outage around the 03:00 UTC deploy?"
}
}
三者同道同道入盖下: parseInputArg编号 :loadInput
页:1 deploy.log 输入内容, createRouterBackedSession 包装为
反应 context 与问题准备为标题,和根
模型将 Python 写入 grep/ chunk/ search context - 重现为
llm_query 视需要对个别块进行子调用——直至呼叫
FINAL(...)编号 :FINAL_VAR(...) 带着答案. --input编号 :input 还接受
缩略语( o)"src/**/*.ts"页:1 http(s):// URL,或者说 knowledge:<client-slug>
给一个有名的客户知识库.
为了查查这次跑步是否值得 成本上看
trajectoryId 联 合 国 .draht/rlm/<trajectoryId>.jsonl 日志( 或匹配)
trajectoryId 输入 .draht/cost-log.jsonl并把它输入
compareCost() (见上文费用封套)而不是假设
向上转.
沙盒要求
Linux RLM 会话需要 unshare 或者说 bwrap,一个64位 x86 或 ARM Python
解释器, seccomp 过滤, 和一个启用的 Landlock ABI 3 或更新 。 这个
python 模块路径的读取权限,系统库
目录( 包括 Nix 商店, 当存在时), 驱动程序, 以及运行时间
支持文件。 常规文件写作仅限于会话工作目录;
/dev/null 也可以写。 进程执行、联网和文件系统
拒绝元数据更改。 名称和大小等文件元数据不是
藏起来.
如果这些内核限制无法安装,驱动程序不会运行.
macOS 继续使用 sandbox-exec。两个平台运行一个沙盒启动
在接受模型生成的 Python 之前检查.
喜欢的 unshare 路径将 Python 保存在 PID 内存监控
用途。 与 bwrap 倒计时,RSS的民调目前观察包装
进程;会话的RSS上限在该路径上并不可靠.
发展
npm install # from repo root, resolves this workspace package
cd packages/rlm
npx tsc --noEmit # typecheck
npm test # vitest
软件包布局
src/session.ts—— 说RlmSession根循环(步/跑,FINAL编号 :FINAL_VAR哨兵,恒大历史.src/router-session.ts—— 说createRouterBackedSession,生产@draht/router- 辅助工厂(即时选择、成本记录、, 轨迹记录).src/trajectory.ts——轨迹 JSONL 附加/读取(此阶段).src/cost-comparison.ts- RLM-vs-基线成本控制(这一阶段).src/loaders.ts—— 说--input编号 :/rlm <input>源装入器(文件, glob, URL( URL) , (英语),knowledge:<slug>) (中文(简体) ).src/prompts.ts——分级系统即时模板,由根选择 模型的上下文窗口.python/repl_driver.py——沙箱Python RePL驱动.packages/coding-agent/src/rlm-cli.ts—— 说draht rlmCLI 子命令 .packages/rlm-agent/—— 说/rlm命令 +rlm_query工具扩展名 正常代理会话.
一般事务人员(其他职等)
RLM是一种交叉编码代理能力,不是任何单一的属性
生成项目堆栈——无 packages/templates/src/*.md是因为
每层模板(Astro、Go/gRPC、SST TypeScript)是用于一个
"何时使用 RLM" 注释,和这个 repo 自己的根 AGENTS.md 是一个
贡献- 工作流程 doc, 不是特征引用 。 这个读取器是
rLM 的主要文档表面; 没有修改模板 .