fudan-generative-vision/Remory
Remory: Learning Residual Memory for Context Compaction
什么是 Remory?
Remory 是一个插件,为大型语言模型(LLM)添加学习到的“残差记忆”,使其能够压缩长对话历史而不丢失重要信息。当代理(例如名为 Codex 的编码助手)需要截断其上下文时,Remory 首先创建正常摘要,然后将剩余的隐藏状态编码为一小组“软令牌”。这些令牌与摘要一起存储,并在下一步生成时自动重新插入,使冻结的基础模型能够像仍拥有完整上下文一样继续运行。
关键思想
- 上下文压缩 – 大型代理很快达到其令牌限制(Qwen 3.8-27B 为 256K)。Remory 保留简洁摘要以及捕获摘要遗漏内容的学习残差。
- 冻结基础模型 – 底层 LLM(Qwen 或 GLM)从不进行微调;仅训练轻量级记忆网络,使该方法对新模型的适配成本低廉。
- 在线训练 – 命令行工具(
/remory train)可以在与实时 Qwen 会话交互时持续改进记忆网络。 - 零代码集成 – Remory 附带 SGLang 钩子和一个小型客户端库;您只需启动服务器并将现有代理(或提供的 r-codex UI)指向它即可。
快速开始(Qwen 3.8-27B)
# 1️⃣ 克隆并安装
git clone https://github.com/1ring2rta/Remory.git && cd Remory
python deploy/install.py # 创建包含 SGLang、CUDA 工具的 .remory/venv
source .remory/venv/bin/activate
# 2️⃣ 启动模型 + 记忆服务器(需要 2 × 80 GB GPU)
CUDA_VISIBLE_DEVICES=0,1 python -m remory.launch_server \
--model-path Qwen/Qwen3.8-27B \
--remory-checkpoint mocoV3/Qwen3.8-27B-REMORY-1.9B \
--tp 2 \
--host 127.0.0.1 --port 8421
# 3️⃣ 打开与服务器通信的 Codex UI
source .remory/venv/bin/activate
r-codex -C /path/to/your/project # 使用 /compact 触发压缩
UI 允许您运行正常聊天,然后调用 /compact。系统将:
- 生成已删除消息的摘要。
- 将残差隐藏状态编码为软令牌。
- 存储检查点(保存在
.remory/memory.sqlite中)。 - 从该检查点继续对话。
如何以编程方式使用
from remory.adapters import Harness
from remory.client import Client
with Client("http://127.0.0.1:8421", session_id="demo") as client:
agent = Harness(client, codec) # codec = 您的聊天模板
checkpoint = agent.compact(
prefix_messages=system_and_tools, # 保留的提示
removed_messages=history, # 要丢弃的消息
summary_prompt=summary_prompt,
summary_schema=summary_schema,
)
# 使用保存的残差记忆生成新答案
answer = agent.generate(
checkpoint=checkpoint,
prefix_messages=system_and_tools,
messages=new_user_messages,
)
Harness.compact 方法执行三步过程(摘要 → 残差 → 检查点),并返回可传递给 generate 的检查点。
训练自己的记忆网络
Remory 附带用于 Qwen 和 GLM 检查点的两阶段训练脚本:
- 阶段 I – 重建 – 学习从短前缀重建隐藏状态。
- 阶段 II – 摘要条件残差 – 训练残差记忆,使其在基于摘要的条件下有用。
两个阶段都保持基础 LLM 冻结;仅更新记忆网络(约 1-2B 参数)。
training/文件夹包含:
- 4-GPU 运行的启动脚本
- 示例 JSONL 数据格式(历史、摘要、续写)
- 恢复 / 检查点处理
基准与结果
作者在两个长时程代理套件上评估了 Remory:
- BrowseComp(网络搜索任务)和 Terminal-Bench 2.1(shell 交互)。
- 添加残差记忆提高了成功率并减少了工具输出重复。
- 在 SummHay 基准上,Remory 在使用仅 5.2% 的原始令牌预算时达到了接近全上下文的性能。
性能数据可视化于 assets/benchmarks.png,并在随附论文(arXiv 2610.11287)中有详细说明。
在哪里获取模型
| 基础模型 | Remory 检查点 | 如何运行 |
|---|---|---|
| Qwen-3.8-27B | mocoV3/Qwen3.8-27B-REMORY-1.9B |
SGLang 或 🤗 Transformers |
| GLM-5.3-Flash | mocoV3/GLM-5.3-Flash-REMORY-1.24B |
SGLang |
两个检查点均托管在 Hugging Face 上,并可通过 --remory-checkpoint 标志加载。
许可证与致谢
- MIT 许可证(见
LICENSE)。 - 基于 DFlash 和 SpecForge 的记忆思想构建,并使用 SGLang 进行高吞吐量推理。
- 研究论文引用如下:
@misc{xia2026remory,
title = {Remory: Learning Residual Memory for Context Compaction},
author = {Xia, Hanchen and Chen, Baoyou and Ge, Yutang and Deng, Naihao and
Yang, Senqiao and Dong, Zilong and Yuan, Weihao and Zhu, Siyu},
year = {2026},
eprint = {2610.11287},
archivePrefix = {arXiv},
primaryClass = {cs.CL}
}
TL;DR
Remory 允许您通过添加一个位于正常摘要之后的小型学习记忆,让冻结的 LLM(如 Qwen 3.8-27B)在长期运行的代理上继续工作。使用提供的脚本安装,通过 SGLang 启动,然后使用 r-codex UI 或 Python Harness 类来压缩和继续对话。训练是可选的,但支持自定义领域。
相关
- 项目
- 项目
- 项目
- 项目