mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-06-02 18:17:11 +08:00
- Unified flush + context injection into a single async LLM call (flush_from_messages accepts context_summary_callback) - Fixed response parsing bug: handle generator returns and Claude-format dicts from bot.call_with_tools, which previously caused all LLM summaries to silently fail (falling back to rule-based extraction) - Removed standalone context summary prompts and methods; reuse the existing [DAILY]/[MEMORY] summarization pipeline - Updated docs (zh/en/ja) to reflect the new injection behavior
82 lines
4.8 KiB
Plaintext
82 lines
4.8 KiB
Plaintext
---
|
||
title: 短期記憶
|
||
description: 会話コンテキスト — メッセージ管理、圧縮戦略、コンテキスト操作
|
||
---
|
||
|
||
会話コンテキストは 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 によって要約され、**日次記憶ファイルに書き込まれます**
|
||
- LLM 要約が完了すると、保持されたコンテキストの最初のユーザーメッセージの先頭に要約が**注入**され、モデルが会話の文脈を維持できるようにします
|
||
- 要約注入はバックグラウンドで非同期に実行され、次のターンから有効になります
|
||
|
||
### 3. トークン予算のトリミング
|
||
|
||
ターンのトリミング後、トークン数がまだ予算を超えている場合:
|
||
|
||
- **5 ターン未満の場合**:すべてのターンで**テキスト圧縮**を実行 — 各ターンは最初のユーザーテキストと最後の Agent 返信のみを保持し、中間のツール呼び出しチェーンを削除
|
||
- **5 ターン以上の場合**:**前半のターン**を再度トリミングし、破棄されたコンテンツも記憶に書き込まれ、コンテキスト要約も注入されます
|
||
|
||
### 4. オーバーフロー緊急処理
|
||
|
||
モデル API がコンテキストオーバーフローエラーを返した場合:
|
||
|
||
1. 現在のすべてのメッセージを要約して記憶に書き込み
|
||
2. 積極的なトリミングを適用(ツール結果は 10K 文字に制限、ユーザーテキストは 10K、最大 5 ターン)
|
||
3. それでもオーバーフローする場合は、会話コンテキスト全体をクリア
|
||
|
||
## セッションの永続化
|
||
|
||
会話メッセージはローカルデータベースに永続化され、サービス再起動後に自動的に復元されます。復元戦略:
|
||
|
||
- 最近の **`max(3, max_context_turns / 6)`** ターンを復元
|
||
- 各ターンの**ユーザーテキストと Agent の最終返信のみ**を保持し、中間のツール呼び出しチェーンは復元しません
|
||
- **30 日** を超える過去のセッションは自動的にクリーンアップされます
|
||
|
||
## 操作コマンド
|
||
|
||
チャットで以下のコマンドを使用してコンテキストを管理できます:
|
||
|
||
| コマンド | 説明 |
|
||
| --- | --- |
|
||
| `/context` | 現在のコンテキスト統計を表示(メッセージ数、ロール分布、合計文字数) |
|
||
| `/context clear` | 現在のセッションコンテキストをクリア |
|
||
| `/config agent_max_context_tokens 80000` | コンテキストトークン予算を調整 |
|
||
| `/config agent_max_context_turns 30` | コンテキストターン上限を調整 |
|
||
|
||
<Tip>
|
||
コンテキストをクリアすると、Agent は以前の会話内容を「忘れます」。すでに長期記憶に書き込まれたコンテンツは、記憶検索を通じて引き続き取得できます。
|
||
</Tip>
|