# OpenAI Agent SDKの便利だけど知られていない機能
🌍 ツールの結果をそのまま最終出力にしたいのに、モデルが余計な要約を挟んでいませんか?
`tool_use_behavior` を設定すれば、ツール出力をそのまま最終結果にしたり、特定のツールで停止させるなど、出力の制御を細かくカスタマイズできます。
📌 タイトル:tool_use_behavior
🔗 URL:
🧩 概要
`tool_use_behavior` はエージェントがツールを呼び出した後の挙動を制御するオプションです。`"stop_on_first_tool"` を指定すると、最初のツール出力がそのまま最終出力になります。`StopAtTools(stop_at_tool_names=[...])` で特定ツールのみ停止対象にできます。さらにカスタム関数を渡せば、`ToolsToFinalOutputResult(is_final_output=True, final_output=...)` を返すことで、出力を加工してから最終結果にすることも可能です。
🛠 使い方
```python
from agents import Agent, StopAtTools, ToolsToFinalOutputResult
# 最初のツール出力をそのまま最終結果に
agent_direct = Agent(
name="direct",
tools=[search_tool],
tool_use_behavior="stop_on_first_tool",
)
# 特定ツールでのみ停止
agent_selective = Agent(
name="selective",
tools=[search_tool, format_tool, send_tool],
tool_use_behavior=StopAtTools(
stop_at_tool_names=["format_tool"]
),
)
# カスタム関数で出力を制御
def custom_behavior(context, tool_results):
result = tool_results[0]
if result.tool_name == "get_answer":
return ToolsToFinalOutputResult(
is_final_output=True,
final_output=f"回答: {result.output}",
)
return ToolsToFinalOutputResult(is_final_output=False)
agent_custom = Agent(
name="custom",
tools=[get_answer, search_tool],
tool_use_behavior=custom_behavior,
)
```
🏗 本番システムへの組み込み方
・API呼び出し結果をそのまま返すプロキシ型エージェントに `"stop_on_first_tool"` を活用する
・パイプライン内の特定ステップで出力を確定させ、無駄なLLM呼び出しを削減する
・カスタム関数で出力フォーマットを統一し、下流システムとのインテグレーションを安定させる
・構造化データ(JSON等)をモデルに要約させず、そのまま後続処理に渡す
💡 ユースケース
🔌 API結果をそのまま返すプロキシエージェント
📊 データベースクエリ結果の直接出力
🔄 パイプラインの中間ステップでの出力確定
🎯 特定ツールの結果だけを最終出力にする選択的制御
⚠️ 注意点
`"stop_on_first_tool"` を使うと、モデルによる結果の解釈や補足が行われなくなります。ユーザー向けの分かりやすい出力が必要な場合はカスタム関数で調整してください。複数ツールが並列呼び出しされた場合の挙動も事前に確認しましょう。
✨ `tool_use_behavior` で、エージェントの出力を「モデル任せ」から「設計通り」に制御しましょう。
#
OpenAIAgentSDK# #
AIAgent#