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トークンの追加コスト。

📖 まとめ


📝 練習問題

  1. 基礎(難易度:⭐): 異なるcontext_window値のAgentを作成し、マルチターン会話で「忘れる」タイミングを観察してください。
  2. 中級(難易度:⭐⭐): remove_oldestとsummarizeの切り詰め戦略を比較してください。
  3. 上級(難易度:⭐⭐⭐): 履歴クリアと要約のタイミングを自動検出する「スマートコンテキストマネージャー」を実装してください。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%