会話コンテキストは Agent の短期記憶であり、現在のセッション内のすべてのメッセージ(ユーザー入力、Agent の返信、ツール呼び出しと結果)を含みます。適切なコンテキスト管理は、Agent の推論品質とコスト制御にとって重要です。
コンテキストの構造
各会話ターンは以下で構成されます:
ユーザーメッセージ → Agent の思考 → ツール呼び出し → ツール結果 → ... → Agent の最終返信
1 つのターンには複数のツール呼び出しが含まれる場合があります(agent_max_steps で制御)。すべてのツール呼び出しと結果は、圧縮またはトリミングされるまでコンテキストに保持されます。
主要な設定
| パラメータ | 説明 | デフォルト値 |
|---|
agent_max_context_tokens | コンテキストの最大トークン予算 | 50000 |
agent_max_context_turns | コンテキストの最大会話ターン数 | 20 |
agent_max_steps | ターンあたりの最大判断ステップ数(ツール呼び出し回数) | 15 |
config.json またはチャットの /config コマンドで設定できます。
圧縮戦略
コンテキストが制限を超えた場合、システムは自動的に圧縮を実行してスペースを解放します。このプロセスには複数の段階があります:
1. ツール結果の切り詰め
各判断ループの開始前に、過去のターンのツール呼び出し結果を確認します。20,000 文字 を超えるツール結果は切り詰められ、先頭と末尾のみが保持されます。現在のターンの結果は影響を受けません。
2. ターンのトリミング
会話ターン数が agent_max_context_turns を超えた場合:
- 最も古い半分 の完全なターンがトリミングされます(ツール呼び出しチェーンの完全性を保証)
- トリミングされたメッセージは LLM によって要約され、日次記憶ファイルに書き込まれます
- 残りのターンはそのまま保持されます
3. トークン予算のトリミング
ターンのトリミング後、トークン数がまだ予算を超えている場合:
- 5 ターン未満の場合:すべてのターンでテキスト圧縮を実行 — 各ターンは最初のユーザーテキストと最後の Agent 返信のみを保持し、中間のツール呼び出しチェーンを削除
- 5 ターン以上の場合:前半のターンを再度トリミングし、破棄されたコンテンツも記憶に書き込まれます
4. オーバーフロー緊急処理
モデル API がコンテキストオーバーフローエラーを返した場合:
- 現在のすべてのメッセージを要約して記憶に書き込み
- 積極的なトリミングを適用(ツール結果は 10K 文字に制限、ユーザーテキストは 10K、最大 5 ターン)
- それでもオーバーフローする場合は、会話コンテキスト全体をクリア
セッションの永続化
会話メッセージはローカルデータベースに永続化され、サービス再起動後に自動的に復元されます。復元戦略:
- 最近の
max(3, max_context_turns / 6) ターンを復元
- 各ターンのユーザーテキストと Agent の最終返信のみを保持し、中間のツール呼び出しチェーンは復元しません
- 30 日 を超える過去のセッションは自動的にクリーンアップされます
操作コマンド
チャットで以下のコマンドを使用してコンテキストを管理できます:
| コマンド | 説明 |
|---|
/context | 現在のコンテキスト統計を表示(メッセージ数、ロール分布、合計文字数) |
/context clear | 現在のセッションコンテキストをクリア |
/config agent_max_context_tokens 80000 | コンテキストトークン予算を調整 |
/config agent_max_context_turns 30 | コンテキストターン上限を調整 |
コンテキストをクリアすると、Agent は以前の会話内容を「忘れます」。すでに長期記憶に書き込まれたコンテンツは、記憶検索を通じて引き続き取得できます。