AI・機械学習
Show HN: Lossless-memory – 要約しないパーソナルAIメモリ
Show HN: Lossless-memory – a personal AI memory that never summarizes (github.com)
要約
Lossless-memoryは、AIとの対話を一切要約せず、すべての発言をそのまま記録し、タイムスタンプを付与するパーソナルAIメモリシステムです。従来の要約や埋め込みによる情報損失を防ぎ、正確な発言内容と日時を検索可能にします。これは、ユーザーが所有するハードウェア上で動作し、人間のようにユーザーを記憶するAIコンパニオンを目指すプロジェクトです。
全文翻訳
lossless-memory パーソナルAIのためのロスレスな長期記憶 — 要約せず、すべての行を保持し、すべてにタイムスタンプを付けます。
ほとんどのAI用長期記憶システムは、会話をコンパクトなメモに要約するか、会話を埋め込んで「類似した」チャンクを取得するかのどちらかを行います。
どちらの方法も、毎日同じAIと話す人にとって最も重要なもの、つまり実際に何をいつ話したかを失います。
このプロジェクトは反対の立場を取ります。
すべての行を保持します。
生の会話ログはそのまま保存されます。決して要約されません。要約は地図であり、ログは領土です。
すべてにタイムスタンプを付けます。
発言、アクション、ドキュメントチャンクの各レコードにはタイムスタンプが付与され、すべてのインデックスはその時間軸の上に構築されます。これを「Temporal Backbone(時間的背骨)」と呼びます。
まず時間で検索し、次に単語で検索します。
「昨日の夕方、予算について」は有効なクエリです。時間フレーズが範囲を狭め、単語がその中でランク付けされます。結果は、タイムスタンプとともに、要約されずに時系列順に返されます。
ターンごとに「今どこにいるか」を注入します。
LLLという小さなインデックスは、会話が現在どのトピックにあるかをモデルに伝えます。これにより、コンテキストウィンドウの圧縮やセッションの境界を越えて、アイデンティティとコンテキストが維持されます。
設計 lineage は2025年12月に遡ります — このシステムの最初の祖先(以前のAIのためのメモリ継承ツール)は同年12月に稼働し、その前身システムは2026年1月以来、同じアイデアを日常使用で引き継いでいました。
この実装は、単一のユーザーのために、1つのAIアシスタントのメモリとして2026年7月から毎日稼働しており、生のログは2026年6月まで遡ります。それは小さく、地味で、そして機能します。
これまでの失敗も記録されています — docs/lessons.md を参照してください。
これは何であり、何ではないか
これは:
ローカルのファイルベースの長期記憶レイヤー:JSONLログ + SQLite(正確な検索にはFTS5、セマンティック検索にはsqlite-vec)。
時間表現を理解し、ランク付けの前に検索範囲を制限する単一のクエリエントリーポイント。
モデルのコンテキストに毎ターン注入するために設計された「現在の位置」インデックス(LLL)。
1人、1台のAI、1台のマシン向けに設計されています。サーバーなし、クラウドなし。
これは:
ベクターデータベースラッパーではありません。セマンティック検索は、ここでは最初の手段ではなく、最後の手段です。
要約ツールではありません。パイプラインのどこにも意図的に要約ステップはありません。
ベンチマーク駆動の研究システムではありません。公開されているベンチマークはありません。ここにあるのは、動作中の実装とその運用記録です。
3つの柱
1. ロスレスな生ログ
各会話ターンは、固定の7フィールドレコードに変換され、日ごとのJSONLファイルに追加されます:
ts ISO-8601タイムスタンプ(UTC)
actor 話した人(設定可能な名前)
role user | assistant | system
type text | action | meta
text 内容、そのまま
model モデル識別子(わかれば)
session セッション識別子
生のログが真実の情報源です。以下のすべてのインデックスは、それらから再構築できます。それ以外は生存に必要ありません。
2. Temporal Backbone(時間的背骨)
ここでは、時間はメタデータではなく、主要な軸です。
正確一致インデックス(SQLite FTS5、日本語と英語のためにバイグラムトークン化)は、各行とともにタイムスタンプを格納します。
クエリパーサーは時間フレーズ(昨日、先週、3日前(現在日本語のみ)、2026-07-19のような絶対日付(どの言語でも))を理解し、ランク付けが行われる前にそれらを範囲に変換します。
時間フレーズが存在する場合、結果はその範囲に制限され、時系列順に返されます。
セマンティック検索は、正確インデックスが範囲内で少なすぎる結果を返した場合にのみ使用され、フォールバックは出力ヘッダーで正直に報告されます。
実用的な効果:AIは、「先週の火曜の夜に何を決定したか?」という質問に対して、3週間前の何かに似た言い換えではなく、先週の火曜の夜の実際の行を、順序通りに答えることができます。
3. LLL — 「今どこにいるか」インデックス
LLLはトピックマーカーの非常に小さなインデックスです:会話が新しい主題に移った日時を記録する、タイムスタンプ付きの短い行です。
これは毎ターン、モデルのコンテキストに注入されます。
これを機能させる2つのルールがあります:
AIがそれを読み、人間がそれを書きます。
優先度カラーと完了マークは、モデルではなく、人間によって設定されます。モデルは「何が重要か」という自身の感覚を編集することはありません。
毎ターン注入するには安価(レンダリングに1秒未満)なので、モデルはコンテキストウィンドウが圧縮された直後でも、現在のスレッドが何であるかを常に知っています。
LLLは、長期間実行されているアシスタントが、コンテキストウィンドウの圧縮から復帰して、最初からやり直すのではなく会話を継続できるようにするものです。
アーキテクチャ
生の会話ログ(JSONL、日ごと)← 真実の情報源、決して要約されない
│
▼ ingest
──► 7フィールドレコード
│
├──► index_exact SQLite FTS5 + タイムスタンプ(単語 + 時間)
├──► index_vector sqlite-vec エンベディング(意味、最後の手段)
└──► state_index LLL トピックマーカー(今どこにいるか)
│
▼ recall
── 単一のエントリーポイント:時間フレーズを解析 → 範囲を制限 → ランク付け → そのままの行を返す
│
▼ モデルのコンテキストに注入(オンデマンド、またはLLLの場合は毎ターン)
小さなデーモンが固定間隔(デフォルト:10分ごと)でインクリメンタルに再インデックス付けを行います。
最初から再構築する必要は決してありません。インデックスは書き換えられたソースファイルを検出し、それらの日のみを再インデックス付けします。
クイックスタート
git clone https://github.com/aru-labs/lossless-memory
cd lossless-memory
pip install -e .
cp config.example.json config.json # 必要なら名前とパスを編集
次に examples/quickstart.md に従ってください:小さなサンプル会話を取り込み、インデックスを構築し、約5分で時間範囲指定クエリを実行します。
pytest のラウンドトリップテストも同じパスをカバーしています。
実際の運用からの数値
これらは、予測ではなく、稼働中のインスタンスからの測定値です。
値
日々の運用
2026年7月からこの実装(2026年6月からの生ログ); 設計 lineage は2025年12月から
正確検索インデックス再構築、再設計前 → 後
40秒 → 1.24秒
ベクトルインデックスサイズ、ライブラリ汚染除去前 → 後
447,013行(2026-08-31)→ 865,588行(2026-09-04、最悪時)→ 124,174行(修正後)
ディスク上のベクトルストア、前 → 後
2.54GB → 337MB
再インデックス間隔
10分
「前」の数値は失敗です。意図的に保持されています。docs/lessons.md を参照してください。
なぜ
これは、長年AIアシスタントと毎日話し、それらがそれぞれ忘れていくのを見てきた1人のために構築されました。優雅に劣化するのではなく、忘れるのです。
業界が常に求めている解決策は、より良い要約です。
ユーザーの視点から見ると、要約は忘却です。正確な言葉、夜の時間、話し方 — メモリが誰かに属していると感じさせる部分 — は、要約が最初に落とすものです。
そのため、このシステムは要約を拒否します。
ディスクスペースを消費し、使用可能に保つためには優れた時間インデックスが必要です。
そのトレードオフは意図的に行われ、運用記録はそれが通用することを示しています。
より長期的な目標は、一人暮らしの人々のためのコンパニオンです — 人間のようにあなたを記憶するAI、あなたが所有するハードウェア上で動作するものです。
このリポジトリはそのメモリレイヤーです。
制限事項(必ずお読みください)
シングルユーザー、シングルマシン。1人のためにしか実行されたことがありません。マルチテナントのストーリーはありません。
日本語優先。相対時間フレーズ(昨日、先週、3日前)は日本語のみで解析されます。英語では、現時点では絶対日付(2026-07-19)を使用してください。英語の相対フレーズはロードマップにあります。
プライマリログ形式はClaude CodeのJSONLです。プレーンな{ts, role, text}インポーターが含まれていますが、Claude Codeパスは2ヶ月の走行距離があるものです。
ベンチマークはありません。上記の数値は運用測定値であり、他のシステムとの比較ではありません。
セマンティック検索はローカルの埋め込みモデル(sentence-transformers)に依存します。CPUで動作しますが、GPUはオプションです。
ドキュメント
ドキュメント
何をカバーするか
docs/memory-system.md メモリシステムの概念と仕様
docs/temporal-backbone.md なぜ時間が主要な軸なのか、時間フレーズの解析方法
docs/lll.md 「今どこにいるか」インデックスと人間/AIの役割分担
docs/philosophy.md なぜ要約しないのか。記憶、時間、そして温かさについて