# セッションとメモリ ## セッション ### セッションの仕組み エージェントとのすべての会話は**セッション**内で行われます。セッションはコンテキスト(どのエージェント、どのチャンネル、どのチャット)をエンコードするキーで識別されます。 セッションはすべてのメッセージ、ツール呼び出し、結果の完全なトランスクリプト(追記専用のJSONL)を維持します。このトランスクリプトこそが、エージェントに進行中の会話についてのコンテキストを与えるものです。 ### セッションキー セッションはコンテキストに基づいて自動的にルーティングされます: | パターン | 意味 | |---------|---------| | `agent:main:main` | メインの直接会話 | | `agent:::group:` | 特定のチャンネルでのグループチャット | | `agent:::channel:` | チャンネル/ルームの会話 | | `cron:` | スケジュールされたジョブの実行 | | `hook:` | Webhookトリガーによる実行 | ### セッションのライフサイクル - **毎日のリセット**, セッションは設定可能な時刻(デフォルトは現地時間の午前4時)に自動的にリセットされます。これにより、履歴を保持しながら毎日新鮮な会話コンテキストが作成されます。 - **アイドル期限切れ**, 設定可能な期間アクティブでないセッションは自動リセットが可能です。 - **手動リセット**, `/new`または`/reset`コマンドでいつでも新しい状態から始めることができます。 ### トークン追跡 セッションはコスト監視とコンテキストウィンドウ管理のために累積トークン使用量(入力、出力、キャッシュ読み取り、キャッシュ書き込み)を追跡します。 --- ## コンパクション ### コンパクションとは何ですか? 会話がモデルのコンテキストウィンドウ制限に近づくと、Neotaskはそれを**コンパクト化**します, , 古いメッセージを凝縮された概要にまとめ、その概要と最近のメッセージを持つ新しいセッションを開始します。 ### 仕組み 1. **検出**, コンテキストの使用量を監視(デフォルトトリガー:コンテキストウィンドウの80%) 2. **要約**, 古いメッセージがコンパクションエントリとして要約される 3. **新しいセッション**, 先頭に要約が注入された新しいセッションが開始 4. **保存**, 古いトランスクリプトは履歴のために保存されるが、コンテキストには読み込まれない ### 設定 - **有効/無効**, 自動コンパクションの切り替え - **しきい値**, コンパクションをトリガーするコンテキストウィンドウのパーセンテージ(デフォルト80%) - **最小メッセージ数**, N件未満のメッセージがある場合はコンパクションしない ### 手動コンパクション `/compact`コマンドでいつでも手動でコンパクションをトリガーできます。重要な情報を失わずにコンテキストをリセットしたい場合に便利です。 --- ## メモリ ### エージェントメモリ 各エージェントはセッション間で重要な情報を永続化するためのメモリシステムを持っています: - **MEMORY.md**, エージェントのワークスペース内のmarkdownファイルで、重要な事実、好み、コンテキストが保存される - **メモリディレクトリ**, 構造化された知識のための`memory/`内の追加ファイル ### ベクター検索 Neotaskはエージェントメモリに対するベクター類似検索をサポートします: 1. **インデックス作成**, メモリファイルが埋め込みを使用してインデックス化される 2. **検索**, エージェントが自然言語でメモリを照会(「ユーザーはAPIの好みについて何と言っていましたか?」) 3. **想起**, 関連するメモリが類似度によってランク付けされて返される ### メモリプラグイン(LanceDB) LanceDBメモリプラグインは高度なベクターストレージを提供します: - 永続的なベクターデータベース - 設定可能なチャンクサイズとオーバーラップ - 効率的な類似検索 - メモリファイルが変更されたときの自動再インデックス ### 自動想起 セッション開始時に、関連するメモリを自動的に想起してエージェントのコンテキストに注入できます。これにより、会話履歴全体を読み込まずにセッション間の継続性がエージェントに与えられます。 --- ## セッションの永続化 すべてのセッションデータはローカルに保存されます: - **セッションメタデータ**, `sessions.json`がアクティブなセッション、最終アクティビティ、トークン数、設定を追跡 - **トランスクリプト**, 個別のセッショントランスクリプトが`.jsonl`ファイルとして保存 - **リカバリー**, セッションはデータを失うことなくGatewayの再起動を生き残ります ### クリーンアップ - 設定可能な期間(デフォルト30日)アクセスされていないセッションはクリーンアップの対象になります - UIまたはAPIを通じた手動セッション管理が利用可能です - コンパクトされたトランスクリプトはアーカイブされますが、レビューが可能です