JordyZomer/lemmalog

A Datalog engine for LLM agent memory: stratified rules, provenance-tracked facts, incremental derivation, and an MCP server that lets your harness use it as a shared brain.

Lemmalog – LLMエージェント向けのDatalogベースのメモリエンジン

何であるか – LemmalogはRustライブラリ(CLIおよびオプションのMCPサーバー付き)であり、LLM駆動エージェントが観測を単なるベクトルストアではなく、帰納的データベースに格納できるようにします。事実は三項式(主語 --rel[信頼度]→ 目的語)として宣言され、Datalogエンジンが追加の事実、時間的ビュー、集計、および標準化されたエンティティ名を導出します。エンジンはクエリに応答でき、事実が成立する理由を説明でき、実際のストアを変更せずに「もし~なら」のシミュレーションを実行できます。

なぜDatalogか? – 著者らは、エージェントの記憶は検証可能かつ段階的更新可能であるべきだと主張しています。記憶を分層Datalogプログラムとして扱うことで、Lemmalogは以下のことが可能になります:

  • 証拠情報(どのエピソードが各事実を生成したか)を保持し、
  • 信頼度スコアを伝搬し、
  • 新しい事実が到着した際に実際に変更された部分のみを再計算します。

主な機能(すべてREADMEに✅として記載)

  • 分層、否定の欠如、サイクル検出を備えた完全なDatalogインタプリタ。
  • デルタ維持付きの半ナチュラル固定点評価による高速な段階的更新。
  • 双時空間事実(valid_from, valid_to, asserted_at)とnow()組み込み関数。
  • 信頼度注釈(積t-ノルム)と再導出時にマージされる証拠セット。
  • サイクル保護付きの証明木生成(why())。
  • 規則ヘッドでの算術(例:D = Dm + 1)を線形に解決。
  • マジックセットによる効率的なポイントクエリ評価(ask_deep)。
  • インデックスとWAMスタイルのバックトラッキングにより、数百万の事実に対してマイクロ秒単位の検索が可能。
  • LLMクエリ向けハイブリッド検索:レンダリングされた事実に対するBM25 + エンティティブースト + バジェット意識型位置アセンブリ。
  • モック抽出器とLLMバックエンド抽出器を備えた抽出レイヤー(Extractorトレイト)。
  • スター型エイリアスエッジ、標準ビュー投影、および競合検出によるエンティティ解決。
  • スナップショット保存/ロードによる永続化;段階的ストリーミング変更フィード(Added, Retracted, Cleared)。
  • 以前のバイト同一状態に復元可能な「もし~なら」シミュレーション。
  • JSON-RPCによるMCPサーバー(Claude CodeやKimi CLIがLemmalogをツールとして呼び出せる)。
  • 交互にルール編集、クエリ、デバッグが可能なREPL。
  • LongMemEvalベンチマークと比較して精度、トークン使用量、レイテンシを測定する評価ハーネス(scenario::run_eval)。

使い方

  1. 観測 – LLMが会話から三項式を抽出し、lemmalog_observeに送信(ラインプロトコル S --rel[conf]--> O)。
  2. ルールインストール – 領域固有のDatalogルールをインストール(例:reports_to(X,Y) :- current(X,"manager",Y).)。
  3. クエリ – エージェントがゴールを問い合わせ(lemmalog_query)し、バインディングを受け取ります。証明も要求可能(lemmalog_why)。
  4. コンテキスト構築 – ユーザーの質問に答える前に、AgentMemory::context_for_queryがBM25 + エンティティブーストを使用してトークン予算内に最適な事実のみをLLMに供給するコンテキストを構築します。
  5. ツール統合 – MCPサーバーがJSON-RPC経由で同じ操作を公開し、Claude CodeやKimi CLIがLemmalogをネイティブツールとして扱えるようにします。

ベンチマーク – LongMemEvalおよびMemEvalスイートにおいて、Lemmalogは以下の成績を収めています:

  • 102問のMemEvalベンチマークでF1 ≈ 0.49(回答フェーズで約50万トークン、フルコンテキストベースラインよりはるかに少ない)。
  • LoCoMoベンチマークで競争力のあるスコア(F1 ≈ 0.57、PropMemに次ぐ第2位)。
  • 400万事実のストアでミリ秒未満のクエリレイテンシ。

成熟度 – READMEでは、すべての記載機能が実装済み(✅)とマークされていますが、「Leapfrog triejoins(最悪ケース最適結合)」および「DBSPストリーミングデルタ」はまだ計画中です。包括的なテストスイート(450のランダムプログラム vs. ナイーブオラクル、パーサーファズ、差分テスト)が含まれており、手動実験用にREPLも提供されています。

誰が恩恵を受けるか?

  • 説明可能かつ段階的更新可能な記憶を必要とするLLMエージェントの研究者。
  • ベクトルストアをルール駆動型知識ベースに置き換えたいAIアシスタント開発者。
  • 抽出された事実に対して決定論的で証拠情報付きの推論が必要な人(例:監査トレール、マルチエージェント協働)。

導入方法 – リポジトリをクローンし、cargo run --bin lemmalogでREPLを起動、またはcargo build --release --features mcpでMCPサーバーをビルドし、READMEに従ってClaude Code/Kimiに登録します。

関連

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