メモリ & 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 は知識ネットワークも構築します — 関連するプロファイル事実を型付きエッジ(causes、related_to、contradicts、supports など)で接続します。AI が孤立した項目ではなく、事実間の構造的関係を把握できるようになります。
事実がクローズまたは置き換えられると、関連するエッジは自動的にクリーンアップされます。
メモリクラスタリング
埋め込みを有効にすると、Sleep はオプションでメモリベクトルを KMeans クラスタリングし、各クラスタにテーマラベルを生成できます。AI があなたについて何を知っているかの俯瞰図を提供します。
セマンティック検索
埋め込み(BGE-M3)を有効にすると、キーワードではなく意味で関連する記憶を検索できます。
セッションメモリ
セッションメモリは、3 つのレイヤーで単一会話内のコンテキストを管理します:
- スライディングサマリー — 古いターンは LLM によって要約に圧縮され、トークン制限を超えずに会話履歴を保持
- ベクトルリコール — 埋め込みが有効な場合、現在のメッセージとの意味的類似度で関連する以前のターンを呼び出し
- 最近のターン — 最新のターンはそのまま保持し、即座のコンテキストを提供
この 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 拡張をインストール:
マイグレーションを実行:
ネイティブの vector(1024) カラムと IVFFlat インデックスが作成され、高速な近似最近傍検索が可能になります。アプリケーションは pgvector を自動検出し、利用可能な場合に使用します。設定変更は不要です。
メモリの精度
Info
現在、個人プロファイル抽出に特化して訓練された LLM は存在しないため、抽出結果に誤りが含まれる場合があります。不正確な内容を見つけた場合は、Web ダッシュボードで誤った記憶を拒否するか、古くなった記憶をクローズできます。Riverse は記憶内容の手動編集を意図的にサポートしていません — 誤った記憶は河の中の泥沙のように、水流に洗い流されるべきものであり、人の手で河床を削るべきではありません。会話が蓄積されるにつれ、河流アルゴリズムがマルチターン検証と矛盾検出により継続的に自己修正し、プロファイルはより正確になっていきます。