llmem について
LLMemは、事実に基づく記憶をSQLiteに保存し、Ollamaによるセマンティック検索にも対応するGo製の構造化メモリシステムです。セッションをまたいで記憶を抽出・検索するAgent利用者向けで、バックグラウンドで記憶を整理・統合します。
主な機能
- 01SQLiteによる構造化メモリ保存
- 02キーワードと意味検索の併用
- 03メモリ種別と関係の管理
- 04バックグラウンドでの減衰と整理
- 05セッション記録抽出アダプター
活用シーン
- 01セッション向けの関連メモリ検索
- 02決定・好み・プロジェクト状態の記録
- 03重複または長期未使用メモリの整理
- 04対応するセッションデータからのメモリ抽出
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ michieldean/ llmem --skill llmemインストール後、Claude Code で/llmemを入力して読み込まれたか確認します。
詳細
LLMem
LLMem は、構造化メモリシステム(Go バイナリ)です。事実に基づくメモリを SQLite に保存し、Ollama(nomic-embed-text)を使った埋め込みベースのセマンティック検索も任意で利用できます。セマンティック検索では sqlite-vec HNSW ANN インデックスを使用して、劣線形時間で検索します。sqlite-vec 拡張機能を利用できない場合は、コサイン類似度の総当たり計算に自動的にフォールバックします。メモリ同士は、型付きの関係(related_to、supersedes、contradicts、depends_on、derived_from)でつなげることができます。バックグラウンドのドリーミング/統合システム(light、deep、REM フェーズ)は systemd タイマーで自動的に実行され、使用されていないメモリを減衰させ、頻繁に使われるメモリを強化し、価値の高いメモリを昇格させ、類似度の高い重複を統合します。
インストール
- CLI:
~/.local/bin/llmem - 設定:
~/.config/llmem/config.yaml - DB:
~/.config/llmem/memory.db - Ollama:
http://localhost:11434(埋め込み生成用のローカルインスタンス)
セッションアダプターの設定
LLMem は、メモリ抽出のために会話のトランスクリプトを読み込むセッションアダプターを使用します。config.yaml で session.adapter を設定してください。
opencode(デフォルト) —~/.local/share/opencode/opencode.dbから読み込みます。データベースが存在する場合に自動選択されます。copilot—~/.copilot/session-state/から読み込みます。Copilot のセッションデータのみが存在する場合に自動選択されます。完全なトランスクリプトを取得するには--shareが必要です。none— アダプターを使用しません。コンテキストの注入は引き続き機能しますが、トランスクリプトの抽出結果はno_transcriptになります。
# For Copilot CLI:
session:
adapter: copilot
copilot:
state_dir: ~/.copilot/session-state
share_dir: .
llmem init は、どのセッション状態ディレクトリが存在するかに基づいて、アダプターの種類を自動検出します。
メモリの種類
| 種類 | 用途 |
|---|---|
| fact | 客観的な事実、定義、世の中の状態 |
| decision | 決定事項とその理由 |
| preference | ユーザーの好み、スタイルの選択 |
| event | ある時点で起きたこと |
| project_state | プロジェクトまたはシステムの現在の状態 |
| procedure | 手順に関する知識、連続する手順 |
| conversation | 注目すべき会話の結果や約束 |
主なコマンド
# Add a memory
llmem add --content "content" --type fact
llmem add --content "prefer dark theme" --type preference --confidence 0.9
# Search memories (hybrid RRF fusion by default)
llmem search "query"
llmem search "query" --type decision --limit 5
llmem search "query" --fts-only # FTS5 keyword search only (no embedder needed)
llmem search "query" --semantic-only # Semantic (embedding) search only (requires embedder)
llmem search "query" --valid-only # Only show valid (non-expired) memories
# List all
llmem list
llmem list --type fact --limit 20
llmem list --all # Include expired memories
# Get specific memory (read-only, does not update access stats)
llmem get <id>
# Update a memory
llmem update <id> --content "new content"
llmem update <id> --confidence 0.95
llmem update <id> --summary "short summary"
llmem update <id> --metadata '{"key": "value"}'
# Invalidate (soft-delete — marks as expired)
llmem invalidate <id> --reason "no longer relevant"
# Delete permanently
llmem delete <id>
# Stats
llmem stats
# Dream — background consolidation (decay, boost, promote, merge)
llmem dream # Preview all phases (dry-run)
llmem dream --apply # Execute all phases
llmem dream --phase light # Run only the light phase
llmem dream --phase deep # Run only the deep phase
llmem dream --phase rem # Run only the REM phase
llmem dream --apply --phase deep # Apply only the deep phase
llmem dream --apply --report /path/to/report.html # Generate HTML dream report
# Export/import
llmem export --output memories.json
llmem import memories.json
# Embedding quality metrics
llmem metrics
# Initialize config and database
llmem init
llmem init --ollama-url http://localhost:11434
関係
メモリは、型付きの関係(supersedes、contradicts、depends_on、related_to、derived_from)でリンクできます。
関係は、ドリームシステムと抽出パイプラインによって内部的に管理されます。Go バックエンドは検索での関係のたどりをサポートしています(Retriever API 経由で公開)が、CLI ではまだ --traverse-relations をフラグとして指定できません。
複数シグナルによる再ランキング
RRF 融合の後、検索結果は RRF スコアと、重み付けされた 4 つのシグナルを組み合わせて自動的に再ランキングされます。
final_score = rrf_score * (1 - blend) + weighted_signal * blend
デフォルトのブレンド係数:0.3(RRF が 70%、シグナルが 30%)。
シグナルと重み:
| シグナル | 重み | 計算式 |
|---|---|---|
| 信頼度 | 0.4 | confidence フィールドを直接使用(0.0~1.0、デフォルトは 0.0) |
| 新しさ | 0.3 | exp(-0.01 * days_since_access)(未アクセスの場合は 0.0) |
| アクセス頻度 | 0.2 | log(1 + access_count / max(age_days, 1))(未アクセスの場合は 0.0) |
| 種類の優先度 | 0.1 | TYPE_PRIORITY 辞書を参照(未知の種類はデフォルトで 1.0) |
種類ごとの優先度の重み:
| 種類 | 優先度 |
|---|---|
| decision | 1.2 |
| preference | 1.1 |
| procedure | 1.1 |
| fact | 1.0 |
| project_state | 1.0 |
| event | 0.9 |
| conversation | 0.7 |
重要な注意事項
- Go バイナリ —
llmemは現在、/usr/local/bin/llmemからシンボリックリンクされた、~/.local/bin/llmemにあるコンパイル済み Go バイナリです。Python の仮想環境は不要です。 - メモリが誤っていた場合を除き、削除ではなく無効化してください。無効化されたメモリは参照用に残りますが、検索結果には返されません。
- 埋め込みには、
nomic-embed-textをプルした状態で Ollama が実行されている必要があります。Ollama が停止している場合、セマンティック検索は FTS5 のみの検索にフォールバックします。 - ANN ベクトルインデックス — セマンティック検索では、ANN による高速な検索に sqlite-vec(
vec0仮想テーブル)を使用します。sqlite-vec が利用できない場合は、自動的にブルートフォース方式のコサイン類似度計算にフォールバックします。 - 信頼度は 0.0〜1.0 です。数値が高いほど確度が高くなります。ユーザーから直接得た事実には 0.9 以上、自動抽出された事実には 0.7 を設定してください。
- コンテキスト生成では、
llmem search <query>を使って、セッションに挿入する関連メモリを検索します。プラグインがセッション開始時にこれを自動的に処理します。 - アクセスの追跡 —
llmem getは読み取り専用で、access_countやaccessed_atを更新しません。検索操作ではアクセスが自動的に追跡され、返された各結果のaccess_countとaccessed_atが更新されます(ベストエフォート)。
Dream — バックグラウンドでの統合
dream システムは、次の 3 つのフェーズを実行する自動メモリメンテナンスパイプラインです。
- Light — コサイン類似度(しきい値は設定可能、デフォルトは 0.92)を使って類似した重複を検出します。Deep フェーズ用の統合候補を生成します。
- Deep — 利用されていないメモリの信頼度を時間の経過とともに下げ、頻繁にアクセスされるメモリの信頼度を上げ、スコアの高いメモリを昇格させ、LLM の支援による統合を行います。LLM による統合ができない場合は、連結にフォールバックします。
- REM — メモリからテーマとクラスターを抽出し、人が読める dream 日記を
~/.config/llmem/dream-diary.mdに書き込みます。タイプ別の件数、単語クラスター、メモリの合計数と有効数を出力します。
デフォルトのモードはドライランです — 実際に変更を行うには --apply を使ってください。指定しない場合、llmem dream は実行内容をプレビューするだけです。HTML 形式の dream レポートを生成するには、--report /path/to/report.html を使ってください。
スケジュール:systemd のユーザータイマー(llmem-dream.timer)が、毎晩午前 3 時に llmem dream --apply を実行します。harness/llmem-dream.service と harness/llmem-dream.timer を参照してください。
Dream の設定は、~/.config/llmem/config.yaml の dream: キーの下にあります。
| キー | デフォルト | 説明 |
|---|---|---|
similarity_threshold | 0.92 | 類似した重複の検出に使うコサイン類似度 |
decay_rate | 0.05 | 1 回の減衰間隔あたりの信頼度の低下量 |
decay_interval_days | 30 | 減衰間隔の日数 |
decay_floor | 0.3 | 減衰後の信頼度の最小値 |
confidence_floor | 0.3 | この値以下のメモリは無効化されます |
boost_threshold | 5 | 信頼度の上昇が発生するアクセス数 |
boost_amount | 0.05 | 信頼度の上昇量 |
diary_path | ~/.config/llmem/dream-diary.md | dream 日記ファイルのパス |
report_path | (なし) | HTML dream レポートの出力先パス |
auto_link_threshold | (なし) | 関連メモリの自動リンクに使うコサイン類似度のしきい値 |