
2026/08/29 8:27
LLM メモリを誤ってプログラム解析にしてしまった
RSS: https://news.ycombinator.com/rss
要約▶
日本語翻訳:
本テキストは、脆弱性情報研究のような複雑なタスクにおいて、大規模言語モデル(LLM)エージェントが信頼性のある知識状態を維持することを保証するシステム Lemmalog を紹介している。その核心的な革新点は、LLM が担当する曖昧なデータ抽出と、Datalog によって管理される決定論的な推論との分離にある。Datalog は累積的評価、撤回、およびプロベナンス追跡を用いて、「現在真であるものは何か」に答えるものである。このアーキテクチャは、標準的なメモリーシステムが曖昧な類似性に基づいて幻覚的な接続を生み出すか、死んだ仮説を復活させるという業界の主要な課題を解決する。
Lemmalog は規則と時間的有効性区間(例:
viable(primitive_a) [10:14, 12:37))を通じて状態の不変点を維持することで、観測が変化すると自動的に結論を無効化する。ベンチマーク結果では大幅な効率性の向上が見られる。LongMemEval の結果では、クエリあたりのコンテキスト使用量は約 104,000 トークンから 2,700 トークンに減少し、F1 スコアは 0.463 を達成した。特に、Knowledge Update(F1 0.579)および Adversarial False-Premise Questions(F1 0.707)においてトップを占め、幻覚を起こしやすいフルコンテキストベースラインを上回っている。より大きな LoCoMo ベンチマークでは、Lemmalog の F1 スコアは 0.533 で、PropMem(0.605)と OpenClaw(0.557)に次いでメモリーシステムにおいて 3 位を記録した。このアプローチは「コンパイラー」として機能し、LLM が確率的なフロントエンドパーサーとして、Datalog が決定論的な分析エンジンとして働き、セッションが長引くにつれてトークンコストを大幅に削減する。今後の作業では、この状態維持のアプローチを適用し、履歴データの変化や複雑かつ長期化する調査の際にエージェントがミスを犯することを防ぐことを目指している。本文
LLM エージェントのためのメモリシステム「Lemmalog」:脆弱性調査における実用性と評価結果
過去数ヶ月間、脆弱性調査を目的とした LLM エージェントの実験を行いました。LLM はコードベースの探索や攻撃面の特定において優れた能力を発揮しますが、長時間にわたる調査ではハルシネーション(妄言)や記憶の不一致といった課題が顕在化しました。
これに対し、LLM に「現在何が真実か」を維持させるために開発されたのが Lemmalog です。本記事ではその仕組みと、LongMemEval・LoCoMo などのベンチマークによる評価結果について解説します。
📌 課題:ハルシネーションと記憶の不一致
LLM の現状の限界
- 調査時間が進むほど、モデルは確立された事実を忘れる傾向があります。
- 既に排除したアプローチを提案したり、誤った前提に基づいて論じる現象が見られます。
- 「間違っている」と指摘しても、直前の出力を無効化せず、その関連する記述も含めて信じてしまうリスクがあります。
従来のメモリシステムの欠点
既存の解決策(ベクトル埋め込みを用いた検索系)は、「過去の話」を保存・検索するものですが、「現在の真実」を動的に更新する仕組みが不足しています。
【事例:矛盾する情報の蓄積】 脆弱性調査中の状況変化に対応できない場合、メモリには以下のような矛盾が混在します:
がobject_a
を指している(以前)object_b- 攻撃者が
を制御できるobject_b - しかし実際には
はobject_a
を指していない(直近の事実)object_b
問題点: LLM に「現在の真実」を判断させるために膨大な過去の情報をすべて再提示させ、ハルシネーションを防ごうとするアプローチは非効率です。
解決策:プログラム解析との類似性
脆弱性調査の本質はプログラム解析であり、その手法として Datalog の考え方が適用可能です。
- 事実 (Facts):
がfoo
を呼び出す (bar
) など。calls(foo, bar) - ルール (Rules): 「関数 A が B を呼び出し、B が C を呼び出すならば、A は C に到達可能」など。
これらを組み合わせることで、入力事実が変化しても**影響を受ける結論だけを自動的に更新(再計算)**することが可能です。これにより、LLM には膨大な履歴を記憶させる必要がなくなります。
🚀 Lemmalog の仕組み
Lemmalog は、LLM と論理データベース(Datalog)の役割分担を明確化したハイブリッドシステムです。
1. アーキテクチャの分割
LLM が全てを決めなければならないのではなく、タスクを 2 つに分割します:
| コンポーネント | 担当領域 | 処理内容 |
|---|---|---|
| LLM (Frontend) | 曖昧な部分 | 自然言語の理解、ソースコード解析、デバッガー出力の解釈。 例: 「解放されたオブジェクトが再利用されている」という記述を構造化事実に変換。 |
| Lemmalog (Backend) | 決定論的な部分 | 構造化された事実とルールの管理、状態の維持、矛盾の検出。 例: → → の自動演算。 |
2. 機能の詳細
- インクリメンタル評価: 入力事実に変化が起これば、影響を受ける導出事実だけを自動的に更新・無効化します。
- 起源情報 (Provenance) の追跡: 「なぜその結論に至ったか」を理由のグラフで保持できます。
- 例:
が真である理由は、candidate_3_is_exploitable
とobservation_41
などの特定の観測事実への依存関係として可視化されます。observation_57 - 一部の前提(例:
)が誤りであることを発見すると、依存する結論を自動的に無効化できます。observation_41
- 例:
- 時間的サポート: 事実に「有効性区間(validity intervals)」を設定します。
viable(primitive_a) [10:14, 12:37)not_viable(primitive_a) [12:37, ...)- これにより、「現在有効か」だけでなく、「以前なぜ有効だと判断したか」という履歴も維持・照会できます。
3. ベクトルデータベースとの違い
ベクトル検索は「関連性の高い過去的情報を検索する(Retrieval)」のに適していますが、**「真偽の更新」**には向きません。
- メモリ: 過去の事実を検索して再利用すること。
- Lemmalog: 現在の状態として何が真実か、論理的に推導すること。
📊 ベンチマーク評価結果
開発された Lemmalog を標準化されたベンチマークで評価しました。
1. LongMemEval(長期記憶評価)
LLM が長い対話履歴から情報を抽出する能力をテスト。
主要スコア (F1 スコア):
- Lemmalog:
(精度:0.463 +/- 0.010
)0.575 - PropMem: 0.550
- SimpleMem: 0.480
- OpenClaw: 0.244
- Full Context (GPT-4.1): 0.197 (※コンテキスト全体を提示した場合)
重要な発見: Lemmalog は、完全コンテキスト(すべての履歴を提示)よりもはるかに少ないトークン数(約 38 倍削減)で、Full Context の 2.5 倍の性能を発揮しました。
- LongMemEval 質問あたり: Full Context ~104,000 トークン vs Lemmalog ~2,700 トークン
カテゴリ別比較 (Top3)
| カテゴリ | PropMem | SimpleMem | Lemmalog | OpenClaw | Full Context |
|---|---|---|---|---|---|
| SS-User | 0.851 | 0.752 | 0.790 | 0.401 | 0.265 |
| SS-Asst | 0.767 | 0.566 | 0.672 | 0.432 | 0.415 |
| Preference | 0.147 | 0.126 | 0.128 | 0.127 | 0.177 |
| Multi-Session | 0.582 | 0.382 | 0.211 | 0.082 | 0.062 |
| Temporal | 0.424 | 0.578 | 0.416 | 0.185 | 0.212 |
| K-Update | 0.528 | 0.475 | 0.579 | 0.234 | 0.202 |
- Knowledge Update(知識更新) で PropMem を上回り、設計上の弱点(事実の消去)に強い結果が出ました。
- Multi-Session でのスコアは低めですが、これは情報抽出の不備によるもので、推論能力そのものの欠如ではありませんでした。
開発中のトラブルと改善
評価中に「拒否回答」や「カウントパスの消失」といった不具合が発生し、以下の修正により F1 を 0.463 に回復させました:
- 拒否ロジックの微調整: 事実が欠落している場合のみ拒否するよう指示を最適化。
- 複数形ステマ(語幹抽出)の修正: "owns" と "own" の一致判定エラーを解消。
2. LoCoMo(大規模対話記憶ベンチマーク)
より大規模なデータセット(1,986 問)で評価。
主要スコア (F1 スコア):
- Lemmalog:
0.533 +/- 0.001 - PropMem: 0.605 (1 位)
- OpenClaw: 0.557 (2 位)
- Full Context: 0.542 (4 位相当)
結論: Lemmalog は専門的な LLM メモリシステムの中で3 位(Full Context を考慮すると 4 位)の順位を獲得。このスコアはラン間のばらつきが少なく、信頼性が高い結果です。
カテゴリ別比較
| カテゴリ | Lemmalog | PropMem | Full Context |
|---|---|---|---|
| Factual (事実) | 0.399 | 0.431 | 0.517 |
| Temporal (時間的) | 0.454 | 0.615 | 0.369 |
| Multi-hop (多段階) | 0.545 | 0.599 | 0.674 |
| Inferential (推論) | 0.164 | 0.289 | 0.197 |
| Adversarial (敵対的) | 0.707 | 0.794 | 0.509 |
- 時間的推論と敵対的質問で高いスコアを出しました(特に前者は修正により大幅改善)。
- 全般的に PropMem に劣る「推論」や「マルチホップ」ですが、設計されたタスクでは完全コンテキストを凌駕しています。
💡 結論と今後の展望
メリット
- トークンの削減: 膨大な履歴を保持せず、関連する状態のみを検索・維持するため、コストと遅延が劇的に低下します。
- 矛盾の自動解決: ハルシネーションによる矛盾を検知し、論理的に状態を更新・無効化できます。
- 起源情報の追跡: 「なぜそう判断したか」を明確に説明可能で、信頼性の高いエージェントの実現に寄与します。
改善余地
- 推論能力: 条件付きの知識(「友人といるときは賑やかな場所が好き」といった文脈)をフラットな事実として表現する点で弱いです。これを「条件付きルール」で補強し、エピソード記憶とのハイブリッド化が課題です。
最終的な示唆
LLM に良いメモリを与えようとした結果、「データベースとプログラム解析の手法を適用すべきだ」という結論に至りました。
- LLM は曖昧な情報を理解するフロントエンドとして機能させます。
- Lemmalog のような論理的バックエンドが状態を管理します。
- これにより、数時間〜数日かけても**「過去に排除した仮説」や「無効な前提」に基づいたハルシネーションを防ぎつつ、効果的な調査を進められます。**
Lemmalog は単なる理論上のアイデアではなく、実用性と競争力を両立するアーキテクチャとして示しました。ソースコードは公開されていますので、ご活用ください。