# OpenAI Agent SDKの便利だけど知られていない機能
🌍 ツールの出力が巨大すぎて、コンテキストウィンドウを圧迫していませんか?
ToolOutputTrimmerを使えば、古いツール出力を自動的にトリミングし、コンテキストを効率的に管理できます。
📌 タイトル:Tool output trimmer 拡張
🔗 URL:
🧩 概要
`ToolOutputTrimmer` は `CallModelInputFilter` として動作し、会話履歴内のツール出力をスライディングウィンドウ方式でトリミングします。直近のターン(デフォルト2ターン)はそのまま保持し、古いターンの出力が `max_output_chars`(デフォルト500文字)を超える場合、先頭 `preview_chars`(デフォルト200文字)だけを残して切り詰めます。元のメッセージは変更せず、浅いコピーで非破壊的に処理されます。
🛠 使い方
```python
from agents import RunConfig
from agents.extensions.tool_output_trimmer import ToolOutputTrimmer
# デフォルト設定で使用
trimmer = ToolOutputTrimmer()
# カスタム設定
trimmer = ToolOutputTrimmer(
recent_turns=3, # 直近3ターンは保持
max_output_chars=1000, # 1000文字超でトリミング
preview_chars=300, # 先頭300文字を残す
trimmable_tools=["search", "fetch_page"], # 特定ツールのみ対象
)
# RunConfigに設定
config = RunConfig(call_model_input_filter=trimmer)
result = await "質問", run_config=config)
```
🏗 本番システムへの組み込み方
・大量のテキストを返すツール(検索、Web取得など)には積極的に適用する
・`trimmable_tools` で対象ツールを限定し、重要なツール出力は保持する
・`recent_turns` はエージェントの推論に必要な直近のコンテキスト量に合わせて調整する
・非破壊的なので、デバッグ時に元のメッセージを確認できる
💡 ユースケース
🔍 大量の検索結果を返すRAGパイプラインのコンテキスト最適化
📄 長文Webページの取得結果を効率的に管理
🔄 マルチターン会話でのトークン消費量削減
💰 コンテキストウィンドウの有効活用によるAPIコスト最適化
⚠️ 注意点
トリミングにより古いターンの詳細情報が失われるため、エージェントが過去のツール出力を参照する必要がある場合は `recent_turns` を十分に大きく設定してください。また、`trimmable_tools` を指定しない場合は全ツールが対象になります。
✨ ToolOutputTrimmerで、長い会話でもコンテキストを賢く管理しましょう。
#
OpenAIAgentSDK# #
AIAgent#