# OpenAI Agent SDKの便利だけど知られていない機能
🌍 ハンドオフ先のエージェントに、不要なツール呼び出し履歴まで渡していませんか?
input_filterとhandoff_filtersを使えば、ハンドオフ時の入力を整理し、受信側エージェントを関連コンテキストに集中させることができます。
📌 タイトル:handoff の input_filter と handoff_filters
🔗 URL:
🧩 概要
`handoff()` の `input_filter` パラメータに関数を指定すると、ハンドオフ時に渡される入力データを変換できます。`HandoffInputData`(`input_history` / `pre_handoff_items` / `new_items` / `input_items` / `run_context`)を受け取り、加工した `HandoffInputData` を返す関数を定義します。SDK組み込みの `handoff_filters.remove_all_tools` を使えば、会話履歴から構造化されたツール項目を全て除去できます。これにより、受信側エージェントが関連するコンテキストだけに集中でき、より的確な応答が可能になります。
🛠 使い方
```python
from agents import Agent, handoff, HandoffInputData
from agents.extensions import handoff_filters
# 組み込みフィルタ:ツール呼び出し履歴を除去
specialist = Agent(name="Specialist", instructions="専門的な回答を行います")
handoff_to_specialist = handoff(
agent=specialist,
input_filter=handoff_filters.remove_all_tools,
)
# カスタムフィルタ:直近N件のメッセージのみ渡す
def keep_recent_messages(data: HandoffInputData) -> HandoffInputData:
recent = data.input_history[-5:] # 直近5件のみ
# clone() なら run_context などの他フィールドを保ったまま差し替えられます
return data.clone(input_history=recent)
handoff_to_specialist = handoff(
agent=specialist,
input_filter=keep_recent_messages,
)
coordinator = Agent(
name="Coordinator",
handoffs=[handoff_to_specialist],
)
```
🏗 本番システムへの組み込み方
・`remove_all_tools` を使って、専門エージェントに不要なツール実行履歴を渡さない
・カスタムフィルタで機密情報を含むメッセージを除外してからハンドオフする
・コンテキスト量を制限することで、受信側エージェントのトークン消費を削減する
・フィルタの組み合わせで、エージェントごとに最適な入力を設計する
💡 ユースケース
🧹 ツール呼び出し履歴のクリーンアップで専門エージェントの精度向上
🔒 機密データを含む会話履歴のフィルタリング
📏 長い会話のコンテキストを要約・圧縮してハンドオフ
🎯 エージェントの専門領域に関連するメッセージだけを選択的に渡す
⚠️ 注意点
フィルタで必要な情報まで除去すると、受信側エージェントが文脈を失い適切に応答できなくなります。特に `remove_all_tools` は、ツールの結果が後続の会話に重要な場合は注意が必要です。なお `remove_all_tools` が取り除くのは構造化されたツール項目だけで、通常のメッセージやネスト履歴の要約にコピー済みの引数・結果は残るため、それらを消すには独自の input_filter が必要です。また、サーバー管理の会話(`conversation_id` / `previous_response_id` など)ではハンドオフの input_filter は利用できません。フィルタの適用結果をログで確認し、必要な情報が保持されているか検証しましょう。
✨ input_filterで、各エージェントに最適なコンテキストだけを渡す洗練されたハンドオフを実現しましょう。
#
OpenAIAgentSDK# #
AIAgent#