Zero-Mem/Zero-mem
Official code for "Zero-Mem: Zero-Token Memory Operations for LLM Agents".
Zero-Mem とは?
Zero-Mem は、AI エージェントにメモリシステムを提供するフレームワークです。過去のやり取りを保存・検索して、それらに関する質問に答えられるようにします。重要なアイデアは、ほとんどのメモリ操作(構築、整理、検索、証拠の確認)が大規模言語モデル(LLM)を呼び出さずに行われることです。最終ステップである実際の回答生成のみが LLM を使用します。これにより、メモリ操作が安価で高速になります。
仕組み
元のテキストを保存。 システムは生の対話トレース(会話やドキュメント)をそのまま保持します。エンティティ(人、場所、物)を抽出し、テキストをベクトルにエンコードしますが、要約やセマンティックトリプルは作成しません。
2 つの補完的な構造を構築:
- エンティティ間の関係を示すエンティティ・コンテキストグラフ。
- ローカルコンテキストと時間順序を保持する時間階層。
クエリをプロファイリング。 質問が来ると、システムは主題、回答タイプ、時間参照、ソース境界などの手がかりを識別して検索をガイドします。
証拠を検索。 グラフと階層の両方から候補を取得し、境界付きのサポートコンテキスト(関係的またはローカル)を追加します。
キャリブレーションと回答。 証拠をフィルタリングし、リーダー 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 が必要です。
データ形式
2 つのレイアウトがサポートされています:
- LoCoMo 会話 — リポジトリルートにある会話/QA データの単一 JSON 配列(
locomo10.json)。 - 準備済みの質問・コーパスペア — データセットディレクトリ内の 2 つの 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 トークンのコンテキストを作成しません。ベンチマークプロトコルに一致するようにコーパスと境界を準備する必要があります。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト