RSI Boot
简体中文 | English
Agent 的工程记忆,不是对话记忆:约定和禁止项落在仓库里,换一个宿主读到的还是这一份。
Cursor 在 2.1 删掉了 Memories,新会话对你的项目一无所知;Claude Code 的记忆锁在本机、不跟 git,换一个同事就对不上;云记忆要 Key、要服务,记忆还跟账号走。同一个人换着 Cursor、Claude Code、Codex、DeepSeek Harness 写同一个仓库,或者团队里各用各的工具,写法、禁止项和修 bug 的经验也各记各的。
RSI Boot 把约定、禁止项、修复经验和 harness 槽位落在仓库的 .rsi/,跟仓库走:装一次,Cursor / Claude Code / Codex / Qoder / DeepSeek Harness 通用。主链路零 API Key,不调用模型。
环是固定的:召回 → 干活 → 蒸馏成待审条目 → 人批准后才留下 → 下一轮召回读到留下的条目。 负反馈另外进失败桶,只改可写槽位(提示词 / 技能 / 召回策略 / 意图规则 / 知识)。提案过静态门禁和人工确认才晋升,观察 7 天,采纳率掉就回滚。这是软件自己的写法。公开结果还没有和别人的答题分放在同一列。召回主榜的表在 benchmark/results/recall-20261028/SUMMARY.md。
和「又一个记忆插件」差在哪
rsi-harness(Harness-RSI)
负反馈进失败桶,只改可写槽位(提示词 / 技能 / 召回策略 / 意图规则 / 知识)。提案过静态门禁和人工确认才晋升,观察 7 天,采纳率掉就回滚。留下的是槽位版本。这条环已经在软件里;公开基准还没有量过「下一轮是否更好」。
跟随项目迁移
记忆按仓库隔离,不跟账号、不跟 IDE。仓库拷走、换机器、换目录,.rsi/ 一起走;打开另一个仓库就是另一份,不会串。Harness 基因组可导出 bundle,跨项目备份或迁槽位。
跨 AI 工具、多人共用一份项目记忆
同一套 MCP(rsi serve)接 Cursor、Qoder、Codex 和 DeepSeek Harness;状态栏同时吃 Claude Code 与 Cursor CLI。要共用的是这个仓库的项目记忆:函数名怎么写、支付日志里不能打卡号、上次空指针是怎么修的。聊天记录不在这里面。
核准后的约定写进仓库根的 AGENTS.md 托管块,也写进 .cursor/rules。Cursor、Claude Code、Codex、Qoder、DeepSeek Harness 打开同一份仓库,都会读到这段托管块。接上 MCP 之后,召回读的是同一份 .rsi/:上午在 Cursor 里记下的禁止项,晚上换 DeepSeek Harness、或者同事换 Codex 打开这个仓库,读到的是同一条。
同事要拿到召回用的全文,仓库里得有同一份 .rsi/。学习默认把 .rsi/ 写进 .gitignore,日志和缓存留在本机。交给同事时,把核准过的 .rsi/memory 纳入版本库;Git 一旦忽略了整个 .rsi/ 目录,里面的文件需要改忽略规则才能再提交。AGENTS.md 在仓库根,提交后大家拉下来就能读到托管块。
公开基准
主榜是召回。冷启动默认 5 条。分母是有标准证据的题数。MRR 是第一条命中的名次倒数(0 到 1)。token 记 null。协议和分项在 benchmark/results/recall-20261104/SUMMARY.md。
这次的分
这是检索命中,不是模型答题分。LoCoMo 类别标签以官方评测代码为准(1=多跳、2=时间、3=开放域、4=单跳),与论文 §4.1 的叙述顺序不一致(上游 issue #29 / EACL 2026 附录 A 已确认)。
同口径基线对比
同一批题、同一指标,三个系统同机跑。vanilla-rag 是 512 字符切块 + 向量:LoCoMo/EngMem 用本地 bge-large-en-v1.5(fastembed/ONNX,无需 Key),LME 因 512 字符切 11.5 万 token 会话会产生约 56 万向量、离线不可行而退为 hashing 词袋下界;full-context 是「全量塞上下文」参照,不参与胜负判定。完整表在 benchmark/results/baselines-emb-20261104/SUMMARY.md。
工程记忆 EngMem-Bench
自建基准:21 个真实开源仓库(钉死 commit),315 道人工编写题锚定仓库真实文档节,分规范 / 禁令 / 历史修复三类。标注质量经三模型核验团审计(Kimi K3 / Claude Haiku / GLM 5.2 独立核验 87 题分层样本,Fleiss' κ=0.738,作者仲裁后修复 5 处锚点/版本缺陷)。方法学见 benchmark/engmem/README.md,完整表(含按题型、按难度)在 benchmark/results/engmem-emb-20261105/SUMMARY.md。
和公开检索分对照
公开列来自论文里的检索数字,这次列就是上面的主榜。差值 = 这次 − 公开,单位是百分点。LoCoMo 论文的口径是对话 recall accuracy,这次 k=5 用 Hit@5、k=10 用 Hit@10。论文总平均含对抗题,这次的总平均是 1536 道可答题。ECHO 写明 LoCoMo 的 Hit@10 是开发测量,查询扩展可能沾了题面。
差值
[LongMemEval 同一档,LoCoMo 总平均高于论文。右边高于公开检索数字,左边低于。]
治理环与安全
省 token
两项测量,口径不同,不要混列:
- 宿主实测(2026-10-29,Cursor CLI
2026.10.22,ask 模式,模型 Auto):同一套关于本仓库的问题各答一遍,用它报出的 token 相减。token 是输入、输出、缓存读、缓存写四项之和。六组合计:关记忆 1637977,开记忆 423973,省 1214004,74.1%。协议和分项在 benchmark/results/token-20261029/SUMMARY.md。
- 受控上下文测量(2026-11-04,2036 题,LoCoMo 全量 + LongMemEval-S 50 样本):同一 tokenizer 配对比较「送入模型的上下文 token 数」,RSI 召回 top-5 对全量对话的中位压缩比 0.9%(即减少 99.1%),配对 Wilcoxon p<0.001、效应量 r=0.866。见 benchmark/results/token-20261104/SUMMARY.md。
- 真实 API 计费实测(2026-11-05,双厂商复现):LoCoMo 分层抽样 80 题 × 两臂 × 2 轮,逐次记录服务端 usage。Kimi K3:prompt 中位 50,307→610(−98.8%),延迟中位 −38.1%;Claude Haiku(同批题同协议复现):75,540→2,688(−96.4%,中转网关注入约 1.9k 固定客户端开销,为保守下界),延迟 −56.9%。两轮各 160/160 对全部改善,Wilcoxon p=5.3e-28、r=0.867。见 benchmark/results/token-llm-20261105/SUMMARY.md 与 benchmark/results/token-llm-claude-20261105/SUMMARY.md。
跨宿主一致性
同一份 .rsi 种子,RSI 两次自读、Cursor CLI、Claude Code CLI 各自通过自己的 MCP 链路读同一组查询:六组宿主对平均 Jaccard@5 = 1.000、首位一致率 100%——召回是确定性的,换宿主不掉链子。见 benchmark/results/cross-host/SUMMARY.md。
答题准确率(LLM 双判)
检索命中不等于答对,所以补了漏斗末端:LoCoMo 同批 80 题三臂(full / rsi / rag)× 两台生成器(Kimi K3、Claude Haiku),每份答案由两家模型交叉互判(一致率 87.5%,双判全对才算对)。结果:词面 rsi 与向量基线答题无显著差异(McNemar p=0.70 / 1.00),全量上下文仍最强(这是 98.8% 上下文削减的代价,如实报告),不可答题拒答词面 rsi 最可靠(64% vs full 50% vs rag 39%)。见 benchmark/results/answer-acc-20261105/SUMMARY.md。
混合检索消融(向量通道 + 多跳级联)
两个实验开关(默认关,RSI_ENABLE=vector|multihop 或 rsi-boot.yaml enable: 打开):本地 fastembed/ONNX 向量通道(bge-large,与 vanilla-rag 臂同模型)在门禁后与词面幸存者 RRF(k=60) 融合;首跳桥接词二跳级联。LoCoMo 全量四臂对照:向量通道 Hit@5 62.0%→68.2%(配对 McNemar 98 对 3,p=1.4e-25),multi-hop 分项 39.4%→48.9%,与向量版 vanilla-rag(68.6%)达到统计平价;多跳级联为中性(如实记录为负结果)。答题准确率复测(rsi 臂换混合检索重生成,其余两臂原样复用):Claude 生成 52.5%→56.2%、Kimi 生成 46.3%→47.5%,multi-hop 答题 5%→23%;代价是不可答题拒答 64%→50%,如实披露。见 benchmark/results/ablation-hybrid-20261105/SUMMARY.md 与 benchmark/results/answer-acc-vec-20261105/SUMMARY.md。
安装
需要 Python 3.10+:
要改源码则克隆本仓库,按开发一节用可编辑安装。
rsi init 只写用户配置 ~/.rsi/config.yaml。项目记忆在各仓库的 .rsi/,第一次启动 MCP 或 bootstrap 时创建。
接到 Cursor
在要用记忆的那个项目的 .cursor/mcp.json 加:
然后 Settings → MCP 确认 rsi-boot 已启用。
不要把这段配进用户级 mcp.json。那里的 ${workspaceFolder} 经常不展开,记忆会串到别的仓库。要记哪个项目,就写在那个项目里。
接到其他宿主
Claude Code
插件市场方式(推荐,可随仓库更新):
或一条命令直接装 MCP:
在要记的那个仓库目录里打开 Claude Code。状态栏是可选项,见下文。
Qoder
或在项目根 .mcp.json 加与 Cursor 相同的 mcpServers 片段。同样要写在这个项目里,不要写进用户级配置。
Codex
一行命令接入(推荐):
或手写 TOML 配置:用户级 ~/.codex/config.toml,或项目级 .codex/config.toml(需目录已被信任):
从项目根目录启动 codex。要钉死目录,在上面的表里加一行:env = { RSI_PROJECT_ROOT = "/绝对/路径" }。
DeepSeek Harness
在要记的那个仓库目录里打开桌面端。插件页安装 dsh-rsi-boot,或在已经能用 dsh 的终端里执行:
本机需要 Python 3.10+,并且终端里能运行 rsi serve。装完重启一次。工具名多一层前缀,例如 mcp__rsi-boot__rsi_recall。不要从用户主目录启动,否则 .rsi/ 可能写进主目录。
状态栏(可选)
rsi statusline 给宿主 CLI 渲染底部状态栏:模型、上下文余量、token 统计(in/out/cache)、花费、RSI 今日召回与采纳率,外加一条定期轮换的随机文案。Claude Code 与 Cursor CLI 通用(两家的 statusLine 都会把会话 JSON 从 stdin 喂进来,本命令解析后单行输出,带 ANSI 颜色与 emoji)。
Claude Code(~/.claude/settings.json):
Cursor CLI(~/.cursor/cli-config.json):
效果示例:
选文案风格
三种配法并列,按场景任选(优先级:--style > 环境变量 > 项目级 > 用户级):
六档预设:mixed 混搭(默认)、buddy 陪伴、serious 严肃、healing 治愈、geek 极客、lucky 好运。改完下一次刷新就生效。
风格写在 statusLine 的命令里,或写在 config.yaml 的 statusline_style。不要写进 mcp.json,那是记忆服务的配置。语言同样:命令加 --lang zh,或在项目 .rsi/config.yaml 写 lang: zh。想换一批文案,对代理说「生成状态栏文案」,写完跑 rsi statusline --validate-quips。
记忆大屏
不用改 rsi serve 的启动参数。对当前项目窗口里的代理说「打开记忆大屏」。说「关掉记忆大屏」后,下面这个地址立刻访问不到。
默认地址(端口被占用时,以代理回报的地址为准):
页面读的是当前仓库 .rsi/,不需要 API Key。
[RSI 记忆大屏]
在对话里用
接好之后,对当前项目窗口里的代理说。不用自己开终端跑 rsi。
重新学习会删掉该项目 .rsi 里的记忆、日志和缓存,保留 identity.json。文件被占着,就先在 Settings → MCP 关掉 rsi-boot。学完看 .rsi/bootstrap_report.md:待审清空并且批准过,召回才可用。代理如果报必须指定 --host-judge,让它加上这个参数再跑。
工具
接上之后,这些工具出现在当前项目的代理里。DeepSeek Harness 上的名字多一层前缀,例如 mcp__rsi-boot__rsi_recall。
字段和调用参数见 SKILL.md。
配置
配置链:包内 default.yaml → ~/.rsi/config.yaml → 项目根 rsi-boot.yaml → 请求参数。
RSI_HOME 只覆盖用户配置目录(默认 ~/.rsi)。项目记忆在工作目录 .rsi/,打开另一个仓库就是另一份。主链路不用配;向量检索、模型提取这类增强要自己的 Key,示例在 ~/.rsi/config.yaml。
项目里的 rsi-boot.yaml 不能写明文密钥,发现了就拒绝启动。
开发
改过本仓库代码后,在 Settings → MCP 重载 rsi-boot。
不经对话、直接调命令时,写盘要带 --host-judge 或 --local-judge(--dry-run 不用)。旧的 .rsi/rsi.db 用 rsi memory migrate 迁到文件库。