コンテンツにスキップ

メモリ & Sleep

永続的な記憶

Riverse はセッションを超えて記憶し、あなたと共に進化するタイムラインベースのプロファイルを構築します。すべての会話が、性格、好み、経験、人間関係の理解を深めます。

これは河流アルゴリズムによって実現されます — 会話は水の流れ、重要な情報は河床の堆積物のように沈殿し、複数ターンの検証を経て「推測」から「確認」へ、さらに「確立」へと昇格します。

Sleep — オフライン記憶統合

Sleep は Riverse が会話を消化し、プロフィールを更新するプロセスです。自動・手動の両方で実行可能:

トリガー 方法
Telegram /new を送信 — セッションをリセットし、バックグラウンドで Sleep を実行
CLI 終了時に自動実行(quit または Ctrl+C)
REST API POST /sleep
cron(推奨) 毎晩の定時ジョブで一日の会話を統合

cron の例

毎日 0 時に Sleep を実行:

# crontab -e
0 0 * * * cd /path/to/JKRiver && /path/to/python -c "from agent.sleep import run; run()"

知識ネットワーク

Sleep は知識ネットワークも構築します — 関連するプロファイル事実を型付きエッジ(causesrelated_tocontradictssupports など)で接続します。AI が孤立した項目ではなく、事実間の構造的関係を把握できるようになります。

事実がクローズまたは置き換えられると、関連するエッジは自動的にクリーンアップされます。

メモリクラスタリング

埋め込みを有効にすると、Sleep はオプションでメモリベクトルを KMeans クラスタリングし、各クラスタにテーマラベルを生成できます。AI があなたについて何を知っているかの俯瞰図を提供します。

embedding:
  clustering:
    enabled: true
    show_themes: true

セマンティック検索

埋め込み(BGE-M3)を有効にすると、キーワードではなく意味で関連する記憶を検索できます。

embedding:
  enabled: true
  model: "bge-m3"
  api_base: "http://localhost:11434"

セッションメモリ

セッションメモリは、3 つのレイヤーで単一会話内のコンテキストを管理します:

  1. スライディングサマリー — 古いターンは LLM によって要約に圧縮され、トークン制限を超えずに会話履歴を保持
  2. ベクトルリコール — 埋め込みが有効な場合、現在のメッセージとの意味的類似度で関連する以前のターンを呼び出し
  3. 最近のターン — 最新のターンはそのまま保持し、即座のコンテキストを提供

この 3 層システムにより、重要なコンテキストを失うことなく会話を無制限に続けられます。settings.yaml で設定:

session_memory:
    char_budget: 3000        # セッションコンテキストの合計文字バジェット
    keep_recent: 5           # そのまま保持する最近のターン数
    summary_ratio: 0.4       # バジェットのうち要約に割り当てる割合
    recall_max: 3            # ベクトル検索による最大リコール数
    recall_min_score: 0.45   # リコールの最小類似度

pgvector アクセラレーション

デフォルトでは、埋め込みは JSONB として保存され、コサイン類似度は Python で計算されます。大規模データセットでのパフォーマンス向上には、pgvector 拡張をインストール:

# macOS
brew install pgvector

# Debian/Ubuntu
apt install postgresql-16-pgvector

マイグレーションを実行:

psql -h localhost -U YOUR_USERNAME -d Riverse -f migrations/001_pgvector.sql

ネイティブの vector(1024) カラムと IVFFlat インデックスが作成され、高速な近似最近傍検索が可能になります。アプリケーションは pgvector を自動検出し、利用可能な場合に使用します。設定変更は不要です。

メモリの精度

Info

現在、個人プロファイル抽出に特化して訓練された LLM は存在しないため、抽出結果に誤りが含まれる場合があります。不正確な内容を見つけた場合は、Web ダッシュボードで誤った記憶を拒否するか、古くなった記憶をクローズできます。Riverse は記憶内容の手動編集を意図的にサポートしていません — 誤った記憶は河の中の泥沙のように、水流に洗い流されるべきものであり、人の手で河床を削るべきではありません。会話が蓄積されるにつれ、河流アルゴリズムがマルチターン検証と矛盾検出により継続的に自己修正し、プロファイルはより正確になっていきます。