Pi Agent: Context Management
最終更新:2026-08-31
--- title: "コンテキスト管理" description: "Pi Agentのコンテキストメカニズムについて詳しく解説。コンテキストウィンドウ、切り詰め戦略、注入方法、最適化テクニックを理解します。" order: 7 lang: ja
コンテキストはAgentの「短期記憶」——うまく管理しないと、Agentは「何を話していたか忘れてしまう」。
1. コンテキストとは
コンテキストはセッション中に蓄積されるすべての情報です:
- システムプロンプト
- チャット履歴
- ツール呼び出し記録
- 注入された追加情報
TEXT
📖 参照専用
コンテキスト構造
├── System Prompt -> 固定指示(ロール定義、行動制約)
├── Chat History -> 動的蓄積(ユーザーメッセージ + Agentレスポンス)
├── Tool Calls -> ツール呼び出しプロセスと結果
└── Injected Context -> 追加注入(ファイル内容、APIデータ等)
2. コンテキストウィンドウ
コンテキストウィンドウはAgentが一度に「記憶」できる量を決定します:
(1) ウィンドウサイズの設定
PYTHON
from pi_agent import Agent
agent = Agent(name="quick", context_window=2048) # 小:トークン節約
agent = Agent(name="long", context_window=16384) # 大:より多く記憶
agent = Agent(name="full", context_window=65536) # 最大:モデルの完全な能力
(2) ウィンドウサイズとコスト
| ウィンドウサイズ | 最適な用途 | トークンコスト |
|---|---|---|
| 2K | Q&A、単純な指示 | 低 |
| 8K | マルチターン会話、コードレビュー | 中 |
| 32K | 長文ドキュメント分析 | 高 |
| 64K | 大規模プロジェクト分析 | 非常に高い |
3. 切り詰め戦略
会話がウィンドウを超えると、Pi Agentは複数の戦略を提供します:
PYTHON
from pi_agent import Agent
agent = Agent(truncation_strategy="remove_oldest") # 最も古いメッセージを削除
agent = Agent(truncation_strategy="summarize") # AIが古いメッセージを要約
agent = Agent(truncation_strategy="sliding_window", keep_recent=10) # 最新Nターンを保持
| 戦略 | メリット | デメリット |
|---|---|---|
| remove_oldest | シンプルで効率的 | 初期情報が失われる |
| summarize | 要点を保持 | 追加トークンコスト |
| sliding_window | 制御可能 | 重要なコンテキストを見逃す可能性 |
4. コンテキスト注入
(1) 手動注入
PYTHON
from pi_agent import Agent
agent = Agent(name="coder")
with open("main.py") as f:
agent.inject_context("current_file", f.read())
agent.inject_context("project_info", {
"name": "my_app",
"framework": "FastAPI",
"python_version": "3.11"
})
response = agent.chat("Help me add a health check endpoint")
# AgentはプロジェクトがFastAPIを使用していることを知っており、FastAPIスタイルのコードを生成
(2) 自動注入
PYTHON
agent = Agent(name="auto", auto_context=True)
# 作業ディレクトリ構造、git情報等を自動注入
5. 最適化テクニック
(1) 簡潔なシステムプロンプト
PYTHON
# 冗長
agent = Agent(system_prompt="You are a very excellent programming assistant, skilled in Python, respond in detail...")
# 簡潔
agent = Agent(system_prompt="Python expert. Be concise.")
(2) 不要な履歴のクリア
PYTHON
agent.clear_history() # トピック切り替え時に全クリア
agent.keep_recent(5) # 最新5ターンのみ保持
(3) 自動要約
PYTHON
agent.summarize_context() # 手動トリガー
agent = Agent(auto_summarize_threshold=3000) # 閾値で自動実行
❓ よくある質問
Q コンテキストウィンドウとモデルのコンテキスト長の違いは?
A ウィンドウはAgentレベルの制限で、モデルの最大値を超えることはできません。例えばdeepseek-chatは64Kをサポートしますが、100Kに設定しても無効です。
Q inject_contextとメッセージに書くことの違いは?
A inject_contextの内容は永続的(切り詰めで削除されない)ですが、メッセージ内容は切り詰められる可能性があります。重要なプロジェクト情報に最適。
Q 自動要約に追加トークンはどれくらいかかる?
A 要約内容の約10〜20%です。例えば4000トークンを要約する場合、約400〜800トークンの追加コスト。
📖 まとめ
- コンテキスト = システムプロンプト + チャット履歴 + ツール呼び出し + 注入内容
- コンテキストウィンドウが記憶限界を決定;大きいほど強力だがコストも高い
- 3つの切り詰め戦略:remove_oldest、summarize、sliding_window
- inject_contextで切り詰めされない永続情報を設定
- 3つの最適化テクニック:簡潔なプロンプト、履歴クリア、自動要約
📝 練習問題
- 基礎(難易度:⭐): 異なるcontext_window値のAgentを作成し、マルチターン会話で「忘れる」タイミングを観察してください。
- 中級(難易度:⭐⭐): remove_oldestとsummarizeの切り詰め戦略を比較してください。
- 上級(難易度:⭐⭐⭐): 履歴クリアと要約のタイミングを自動検出する「スマートコンテキストマネージャー」を実装してください。