fudan-generative-vision/Remory
Remory: Learning Residual Memory for Context Compaction
Remory란 무엇인가요?
Remory는 대규모 언어 모델(LLM)에 학습된 "잔여 메모리(residual memory)"를 추가하여, 중요한 정보를 잃지 않으면서 긴 대화 기록을 압축할 수 있게 해주는 플러그인입니다. 에이전트(예: Codex라는 코딩 어시스턴트)가 컨텍스트를 잘라내야 할 때, Remory는 먼저 일반적인 요약을 생성한 다음, 남은 은닉 상태(hidden states)를 작은 "소프트 토큰(soft tokens)" 세트로 인코딩합니다. 이 토큰들은 요약과 함께 저장되며 다음 생성 단계에서 자동으로 다시 삽입되어, 고정된 기본 모델이 마치 전체 컨텍스트를 가지고 있는 것처럼 계속 작동하게 합니다.
핵심 아이디어
- 컨텍스트 압축 – 대형 에이전트는 토큰 제한(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 메서드는 3단계 프로세스(요약 → 잔여 정보 → 체크포인트)를 수행하고 generate에 다시 전달할 수 있는 체크포인트를 반환합니다.
나만의 메모리 네트워크 학습하기
Remory는 Qwen 및 GLM 체크포인트를 위한 2단계 학습 스크립트를 제공합니다:
- 1단계 – 재구성(Reconstruction) – 짧은 접두사로부터 은닉 상태를 재구성하는 방법을 학습합니다.
- 2단계 – 요약 조건부 잔여(Summary-conditioned residual) – 요약을 조건으로 할 때 유용하도록 잔여 메모리를 학습합니다.
두 단계 모두 기본 LLM은 고정된 상태로 유지되며, 메모리 네트워크(약 1-2B 파라미터)만 업데이트됩니다.
training/폴더에는 다음이 포함되어 있습니다:
- 4-GPU 실행을 위한 시작 스크립트
- 예제 JSONL 데이터 형식(기록, 요약, 연속)
- 재개 / 체크포인트 처리
벤치마크 및 결과
저자들은 두 가지 장기 호라이즌 에이전트 제품군에서 Remory를 평가했습니다:
- BrowseComp(웹 검색 작업) 및 Terminal-Bench 2.1(쉘 상호 작용).
- 잔여 메모리를 추가함으로써 성공률이 향상되었고 도구 출력 중복이 감소했습니다.
- 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 클래스를 사용하여 대화를 압축하고 이어가세요. 학습은 선택 사항이지만 사용자 지정 도메인에 대해 지원됩니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트