Zero-Mem/Zero-mem
Official code for "Zero-Mem: Zero-Token Memory Operations for LLM Agents".
Zero-Mem이란?
Zero-Mem은 AI 에이전트에게 메모리 시스템을 제공하는 프레임워크입니다. 과거 상호작용을 저장하고 검색하여 관련 질문에 답할 수 있게 합니다. 핵심 아이디어는 대부분의 메모리 작업(구축, 구성, 검색, 증거 확인)이 대규모 언어 모델(LLM)을 호출하지 않고 수행된다는 것입니다. 최종 단계인 실제 답변 생성만 LLM을 사용합니다. 이로 인해 메모리 작업이 저렴하고 빠릅니다.
작동 방식
원본 텍스트 저장. 시스템은 원시 상호작용 트레이스(대화 또는 문서)를 그대로 유지합니다. 엔티티(사람, 장소, 사물)를 추출하고 텍스트를 벡터로 인코딩하지만, 요약이나 의미 트리플은 생성하지 않습니다.
두 가지 보완 구조 구축:
- 엔티티 간의 관계를 보여주는 엔티티-컨텍스트 그래프.
- 로컬 컨텍스트와 시간 순서를 보존하는 시간 계층.
쿼리 프로파일링. 질문이 도착하면 시스템은 주제, 답변 유형, 시간 참조, 소스 경계와 같은 단서를 식별하여 검색을 안내합니다.
증거 검색. 그래프와 계층 모두에서 후보를 가져온 다음, 경계가 있는 지원 컨텍스트(관계적 또는 로컬)를 추가합니다.
보정 및 답변. 증거를 필터링하고 리더 LLM(예: GPT-4o-mini)에 보낸 다음, 증거 지원, 답변 유형 및 형식에 대해 결정적 검사를 적용합니다.
"제로 토큰"의 의미
메모리 구축, 구성, 라우팅, 검색, 증거 폐쇄 및 보정은 LLM 호출이나 LLM 입력/출력 토큰을 사용하지 않습니다. 그러나 인코더(BGE-M3), 개체명 인식(spaCy), 저장소 및 최종 질문-응답 추론에는 비용이 발생합니다.
구성 요소
run.py— 답변 생성을 위한 진입점.ZeroMem— 검색과 리더를 결합합니다.ZeroMemConfig— 런타임 설정을 보유합니다.ZeroMemReaderClient— 최종 QA 요청 및 진단을 관리합니다.- 인덱싱, 임베딩, NER, 쿼리 프로파일링, 검색, 증거, 리더, 보정 및 데이터 I/O를 위한 지원 모듈.
설정
- 종속성 설치:
pip install -r requirements.txt및 spaCy 모델en_core_web_trf다운로드. - 기본 모델: BGE-M3(고밀도 인코딩용), gpt-4o-mini(최종 리더, 환경 변수로 구성 가능).
- 리더는 OpenAI 호환 Chat Completions 엔드포인트를 사용합니다. API 키는 셸에서 비공개로 설정합니다.
- GPU 지원에는 호환되는 PyTorch 빌드와 spaCy용 CuPy가 필요합니다.
데이터 형식
두 가지 레이아웃이 지원됩니다:
- LoCoMo 대화 — 저장소 루트에 있는 대화/QA 데이터의 단일 JSON 배열(
locomo10.json). - 준비된 질문-코퍼스 쌍 — 데이터셋 디렉토리 아래의 두 JSON 배열(
questions.json및chunks.json). 예:dataset/hotpotqa56K/또는dataset/hotpotqa224K/.
보고된 결과(원고 기준)
| 최종 QA 리더 | LoCoMo F1 | LoCoMo BLEU-1 | HotpotQA 56K F1 | HotpotQA 224K F1 | HotpotQA 448K F1 |
|---|---|---|---|---|---|
| GPT-4o-mini | 59.15 | 52.96 | 72.07 | 66.43 | 65.04 |
| Qwen2.5-14B-Instruct | 57.57 | 51.41 | 68.58 | 65.47 | 61.02 |
이것은 원고에서 보고된 수치이며, 이 릴리스의 새로운 측정값이 아닙니다. 원고는 또한 최종 QA 외부에서 측정된 가장 빠른 비교 기준선(LightMem)보다 메모리 작업 시간이 57.6% 낮다고 보고합니다.
출력
퓨전 모드의 경우 각 실행은 예측 파일(컴팩트 및 원시), 실행 구성, 성능 통계, 실패 진단(있는 경우) 및 로그를 생성합니다. 그래프 및 계층 모드도 유사한 이름의 파일을 생성합니다. 진입점은 답변만 생성합니다. 벤치마크 점수는 별도로 수행됩니다.
실행 재개
중단된 실행을 재개하려면 원래 출력 디렉토리(.jsonl 및 run_config.json 파일 포함)를 유지하고, OUT을 정확한 경로로 설정하고, 동일한 설정으로 --resume 플래그를 사용하여 Python 생성 명령만 다시 실행하십시오.
참고 사항
- 리더 프롬프트의 토큰 예산은 증거 구성 중에 근사 공백 단어 수를 사용합니다. 실제 토큰 사용량은 공급자가 반환할 때 별도로 보고됩니다.
- 데이터셋과 Qwen 서빙 환경은 번들로 제공되지 않습니다. 직접 제공해야 합니다.
- 디렉토리 이름
hotpotqa224K는 자동으로 224K 토큰 컨텍스트를 생성하지 않습니다. 벤치마크 프로토콜에 맞게 코퍼스와 경계를 준비해야 합니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트