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。系统将:

  1. 生成已删除消息的摘要。
  2. 将残差隐藏状态编码为软令牌。
  3. 存储检查点(保存在 .remory/memory.sqlite 中)。
  4. 从该检查点继续对话。

如何以编程方式使用

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 检查点的两阶段训练脚本:

  1. 阶段 I – 重建 – 学习从短前缀重建隐藏状态。
  2. 阶段 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 类来压缩和继续对话。训练是可选的,但支持自定义领域。

相关

  • 项目
  • 项目
  • 项目
  • 项目