本文へスキップ
メニュー

プロダクト

ソリューション

連携

開発者

言語

プロダクト

記憶はどう古くなるか

プロジェクトには何か月もセッションページがたまり、その大半は役に立たなくなります。ai-memoryは各ページにスコアを付け、今も読まれているものを残し、残りは縮めるかマージできます。デフォルトの経路はLLMを呼ばず、ページを書き換える機能は、有効にするまですべてオフです。

古くなるもの、残るもの

記憶の4つの階層のうち、減衰するのは1つだけです。ピン留めページはどの階層でも対象外です。

  • 作業記憶

    進行中のセッションのためのメモです。セッションとともに終わります。

  • エピソード記憶

    セッションごとに1ページ。古くなるのはこの階層です。誰も読まないページは数か月でコールドになります。

  • 意味記憶

    決定事項、概念、落とし穴。減衰しません。

  • 手続き記憶

    ルール、手順、ランブック。減衰しません。

LLMを使わない経路

定期実行のスイープが、ピン留めされていないエピソード記憶のページすべてにスコアを付けます。スコアは時間とともに下がり、ページが読まれるたびに上がります。

図:ページを読むと保持スコアが強化されます。忘却スイープはページがコールドかどうかを確認します。コールドページはデフォルトでは追い出され、有効にしていればコンパクションされるか、ほぼ重複するページとマージされて1ページだけが残ります。コンパクションやマージをされたページはgitの履歴から復元できます。
実線はデフォルトの動作、破線は有効にできる動作です。コンパクションやマージをされたページはrestore-pageで元に戻せます。追い出されたページは戻せません。

保持スコア

  • デフォルト設定では、ページのスコアは約35日ごとに半分になります。0.20を下回るとコールド扱いです。
  • 読まれるたびにスコアが加算されます。古い読み取りの効果も薄れていきます。
  • StaleまたはWrongのフィードバックを受けたページは、重要度が最低になります。
  • スコアが決めるのはスイープの動作です。検索のランキングは一切変えません。
サーバー設定
# 3つとも任意です。指定しなければ、コールドページは共通の1本の曲線で追い出されます。
[decay]
compact_cold_episodic = true
dedup_cold_clusters = true

[decay.half_life_days]
working = 7
episodic = 365
  1. 常にオン

    読まれるページは生き残る

    検索でのヒット、ページを開くこと、リンク経由でたどり着くこと、memory_exploreは、すべて読み取りとして数えます。読み取りはスコアを上げるだけです。

  2. デフォルトはオフ

    階層ごとの半減期

    [decay.half_life_days]で、階層ごとの減衰の速さを決めます。たとえば一時的なメモは短く、セッション履歴は長くできます。指定しなければ、スコアはこれまでとまったく同じです。

  3. デフォルトはオフ

    コールドページのコンパクション

    compact_cold_episodicを有効にすると、コールドページは概要、最初の段落の要約、残す価値のあるトークン(ファイルパス、URL、コード片、エラーコード、識別子)を残し、地の文を捨てます。無効なら、ページは追い出されます。

  4. デフォルトはオフ

    ほぼ重複するページのマージ

    dedup_cold_clustersを有効にすると、ほぼ同じ内容のコールドページを埋め込みでクラスタにまとめます。スコアが最も高いページが残り、ほかのページの保持トークンを取り込みます。ほかのページは置き換え済みになり、残ったページを指します。

  5. デフォルトはオフ

    空のセッションを飛ばす

    エントロピーフィルターが、ほぼ空のセッションページや繰り返しの多いセッションページを経験抽出パスから外します。LLMのプロンプトを組み立てる前の段階です。

  6. memory_lintで実行

    矛盾の疑いを知らせる

    memory_lintは、重複ではないのに同じ話題を扱っている知識ページの組を報告し、どちらが新しいかを示します。報告は参考情報で、ページは編集しません。

  7. 常にオン

    ページごとの信頼度スコア

    各ページに0から0.95の信頼度が付きます。裏付けとなる別々のセッションの数、最後のセッションの新しさ、矛盾するページの数から計算します。explainの出力で確認できます。ランキングに影響するのは、belief_authority_weightを0より大きくした場合だけです。

夢見パス

重複排除はクラスタの事実を残します。夢見パスは同じクラスタをあなたのLLMに渡し、LLMがそれを筋の通った1ページに書き直します。離席中に動き、戻ってくると止まります。

図:夢見パスを有効にすると、5分間のアイドルを待ち、コールドページのクラスタを新規性の高い順に取り上げ、LLMが各クラスタを1つのマージ済みページに書き直します。元のページは置き換え済みになり、何か操作があれば実行は中止され、すべてgitの履歴に残ります。
スケジューラーは1時間に1回、実行するかどうかを判断します。開始には5分間の静かな時間が必要です。1回の実行で扱うクラスタは最大8つです。
  • 必要なものは3つ

    [dream] enabled = true、LLMプロバイダー、埋め込みモデルです。プロバイダーがなければ、LLMを使わない重複排除がこれまでどおり動きます。

  • あなたが離れるのを待つ

    クライアントからの操作が300秒間なければ実行が始まります。戻ってくると、次のクラスタの手前で中止します。

  • 新規性の高いクラスタから

    wikiにすでにある内容から最も遠いクラスタを先に処理します。この順序とアイドルでの起動は、HonchoのDreamerにならっています。

  • 元のページは置き換え済みに

    スコアが最も高いページが書き直されます。マージされた各ページはそのページを指すスタブになり、元の文章はバージョンの連鎖とgitに残ります。

  • マージごとに元ページを記録

    どのページが各マージの材料になったかをエビデンス行に記録するので、でっち上げられた内容があれば追跡できます。出力はスキーマ検証済みのJSONで、実行ごとにレポートが残ります。

サーバー設定
# LLMプロバイダーと埋め込みモデルも必要です。
[dream]
enabled = true
idle_window_secs = 300
max_clusters_per_run = 8

元に戻せるもの、戻せないもの

コンパクション、重複排除、夢見パスはwikiを通して書き換えるので、変更はどれも新しいバージョンとgitのコミットになります。

  • 書き換えは元に戻せる

    ai-memory restore-pageで、wikiのgit履歴からページ全体を復元できます。

  • アップグレードでは何も変わらない

    コンパクション、重複排除、夢見パスはデフォルトでオフです。アップグレードしてもスコアは変わらず、何も追い出されません。サーバーはマイグレーションの前にデータディレクトリをアーカイブします。

  • 残したいものはピン留め

    ピン留めページはスイープの対象になりません。意味記憶と手続き記憶のページは減衰しません。

クエリの方法をさらに

どれも既存のツールの任意の引数です。

  • 引用付きの回答

    memory_queryanswer: trueを付けると、短い回答と、その出どころのページパスが返ります。LLMプロバイダーが必要で、Honchoのdialecticエンドポイントにならっています。回答の品質はまだ評価していないので、引用されたページを開いて確認してください。

  • 推論レベル

    reasoning引数はminimalからmaxまであり、回答とmemory_exploreのトークン予算を決めます。

  • ピン留めページを先頭に

    pin_firstは、最大10件のピン留めページを検索結果の前に置きます。セッションのブリーフィングにもピン留めページが載るようになりました。

  • 関連ページ

    memory_read_pageinclude_relatedを付けると、リンクとバックリンクを3ステップ先までたどります。

  • 必要なら古いバージョンも

    include_supersededは、置き換え済みのバージョンをラベル付きで検索結果に加えます。

  • どのプロジェクトが答えたか

    memory_statusは、解決したワークスペースとプロジェクト、その解決の経緯を報告します。

変更履歴の全文を読む

よくある質問

ai-memoryは古い記憶を削除しますか?

古くなるのはエピソード記憶のセッションページだけです。デフォルトでは、コールドページは追い出され、180日後に完全に削除されます。代わりにコールドページをコンパクションまたはマージする設定にでき、どちらも復元できます。ピン留めページ、意味記憶、手続き記憶のページは残ります。

記憶のエイジングにLLMは必要ですか?

いいえ。スコア付け、階層ごとの半減期、コンパクション、重複排除、矛盾の検出、信頼度スコアはLLMを使いません。重複排除と矛盾の検出は埋め込みを読みますが、これはデフォルトのローカル埋め込みモデルが生成します。LLMを呼ぶのは夢見パスだけで、デフォルトではオフです。

夢見パスとは何ですか?

オプトインのバックグラウンドジョブです。5分間アイドルが続くと、ほぼ重複するコールドページのクラスタを取り上げ、あなたのLLMが各クラスタを1ページに書き直します。元のページは置き換え済みになり、あなたが戻ると実行は止まります。

アップグレードすると、既存の記憶は変わりますか?

いいえ。コンパクション、重複排除、夢見パスはデフォルトでオフなので、アップグレードしてもスコアは変わらず、何も追い出されません。サーバーはマイグレーションの前にデータディレクトリをアーカイブします。

これらの機能で検索スコアは上がりますか?

まだ誰も測定していません。評価ハーネスで改善が示されるまで、プロジェクトはこれらを「リリース済み、オプトイン、効果は未検証」として扱います。

今日からエージェントに記憶を。

MITライセンスの無料オープンソースです。アカウントもAPIキーも要りません。