Mnemo: LLMのためのローカルファーストAIメモリレイヤー

Mnemoは、クラウドへの依存やPythonランタイムを必要とせずに、LLMセッション間で永続的かつ構造化されたメモリを提供するために設計された、ローカルファーストのAIメモリレイヤーです。会話からエンティティと関係性を抽出してナレッジグラフを構築し、それを将来のプロンプトに適切なスコア付きのコンテキストとして注入するサイドカーサービスとして機能します。

コア機能とワークフロー

Mnemoは、情報の抽出と検索を自動化することで、LLMアプリケーションが異なるセッション間で状態と知識を維持することを可能にします。システムは、主に2つのエンドポイントを持つパイプラインを通じて動作します:

1. インジェクションと抽出

生のテキスト(会話のターンやドキュメントなど)が /ingest エンドポイントに送信されると、Mnemoは設定されたLLMを使用して、名前付きエンティティ(人、ツール、場所、概念)とその間の関係性を特定します。これらのエンティティは名前とタイプによって重複排除され、エイリアスは統合され、結果として得られたデータはSQLiteデータベースに永続化されます。同時に、ナレッジグラフの構造的な関係を維持するために、インメモリの petgraph が更新されます。

2. 検索とコンテキスト注入

クエリが /retrieve エンドポイントに送信されると、Mnemoは6段階の検索パイプラインを実行して context_prompt を組み立てます:

  1. 全文チャンク検索: 関連するテキストセグメントの初期検索。
  2. エンティティ名検索: 特定の既知のエンティティの検索。
  3. グラフ拡張: ナレッジグラフ上で幅優先探索(BFS)を実行して、関連する概念を見つける。
  4. リレーション・フィルター: 定義された関係性に基づいて結果をフィルタリングする。
  5. スコア付けとランク付け: 関連性に基づいて結果をランク付けする。
  6. 組み立て: LLMのシステムプロンプトに注入される最終的なコンテキスト文字列を生成する。

グラフ拡張された結果は、直接的な一致が推論された関係よりも常に高いランクになるよう、0.5倍のスコアが付けられます。

技術アーキテクチャとパフォーマンス

Mnemoは、高いパフォーマンスと小さなフットプリントを実現するために、4つのRustクレートとして実装されています:

  • mnemo-core: エンティティ抽出、グラフ操作、検索エンジン、およびデータベースレイヤーを処理する中心的なライブラリ。
  • mnemo-api: コアロジックの上に薄いハンドラーレイヤーとして機能する、AxumベースのREST API。
  • mnemo-cli: APIとやり取りするためのコマンドラインインターフェース。
  • mnemo-bench: 専用のベンチマークスイート。

パフォーマンス・ベンチマーク

Apple M2、SQLite(WALモード)、およびインメモリの petgraph を使用してテストされた結果、システムはコア操作において低いレイテンシを示しています(デバッグビルドの数値。リリースビルドは3〜5倍高速であると報告されています):

操作 平均レイテンシ スループット
エンティティ挿入 (SQLite) ~0.12 ms ~8,300 ops/s
エンティティIDによる検索 ~0.08 ms ~12,500 ops/s
チャンク挿入 ~0.14 ms ~7,100 ops/s
全文チャンク検索 ~0.28 ms ~3,500 ops/s
グラフ隣接ノード (depth=1) ~0.21 ms ~4,700 ops/s
グラフ隣接ノード (depth=2) ~0.89 ms ~1,100 ops/s
完全な検索パイプライン ~4.2 ms ~238 ops/s

デプロイメントと統合

Mnemoは柔軟性に設計されており、Ollamaのような完全なローカルオプションを含む、あらゆるOpenAI互換のバックエンドをサポートしています。

統合パス

  • Docker: MnemoとOllamaの両方をデプロイするためにDocker Composeを使用する推奨されるパス。
  • Binary: LLMバックエンドを個別に実行しているユーザー向けの、cargo install によるインストール。
  • Python SDK: PythonベースのLLMパイプラインへの統合のために、pip経由で利用可能な mnemo-sdk パッケージ。

設定

設定は環境変数またはTOMLファイルを通じて行われます。主要な変数は MNEMO_LLM_BASE_URL(デフォルトはOllama)、MNEMO_LLM_MODEL、および MNEMO_LLM_PROVIDERollama, openai, anthropic, または custom をサポート)です。

コミュニティの洞察と対論

Mnemoはローカルメモリへの構造化されたアプローチを提供しますが、コミュニティの議論では、開発者にとってのいくつかの考慮事項が強調されています:

  • コンテキストウィンドウの管理: 一部のユーザーは、LLMのコンテキストウィンドウをメモリで埋めすぎると、モデルのパフォーマンスが低下する可能性があると指摘しています。
  • 機能の同等性: 議論では、検索の改善のためにBM25埋め込みの可能性が示唆されています。
  • Project-level メモリ: 一部の開発者は、メモリのニーズが、セッションベースのメモリよりも、異なるモデルやハーネスを横断して共有できるプロジェクトレベルのストレージへと移行していると主張しています。
  • 統合トレンド: 管理されたエージェント・ハーネスが、最終的にこれらの機能をネイティブに組み込む可能性があり、単独のサイドカーサービスとしての必要性が減少する可能性があるという一般的な見解があります。

Sources