Zero-Mem/Zero-mem

Official code for "Zero-Mem: Zero-Token Memory Operations for LLM Agents".

Zero-Mem とは?

Zero-Mem は、AI エージェントにメモリシステムを提供するフレームワークです。過去のやり取りを保存・検索して、それらに関する質問に答えられるようにします。重要なアイデアは、ほとんどのメモリ操作(構築、整理、検索、証拠の確認)が大規模言語モデル(LLM)を呼び出さずに行われることです。最終ステップである実際の回答生成のみが LLM を使用します。これにより、メモリ操作が安価で高速になります。

仕組み

  1. 元のテキストを保存。 システムは生の対話トレース(会話やドキュメント)をそのまま保持します。エンティティ(人、場所、物)を抽出し、テキストをベクトルにエンコードしますが、要約やセマンティックトリプルは作成しません。

  2. 2 つの補完的な構造を構築:

    • エンティティ間の関係を示すエンティティ・コンテキストグラフ。
    • ローカルコンテキストと時間順序を保持する時間階層。
  3. クエリをプロファイリング。 質問が来ると、システムは主題、回答タイプ、時間参照、ソース境界などの手がかりを識別して検索をガイドします。

  4. 証拠を検索。 グラフと階層の両方から候補を取得し、境界付きのサポートコンテキスト(関係的またはローカル)を追加します。

  5. キャリブレーションと回答。 証拠をフィルタリングし、リーダー 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 つのレイアウトがサポートされています:

  1. LoCoMo 会話 — リポジトリルートにある会話/QA データの単一 JSON 配列(locomo10.json)。
  2. 準備済みの質問・コーパスペア — データセットディレクトリ内の 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 トークンのコンテキストを作成しません。ベンチマークプロトコルに一致するようにコーパスと境界を準備する必要があります。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト