AI・機械学習
上級
マルチステップツール呼び出し(マルチステップツールよびだし)
LLMが複数のツール呼び出しを連鎖的に実行するパターン。前の呼び出し結果を次の入力として使用し、複雑なタスクをステップ分割して解決する。
0 回閲覧
0 いいね
2026/6/6 更新
関連タグ
tool-use
multi-step
llm-agent
react-framework
agentic-ai
マルチステップツール呼び出しとは
マルチステップツール呼び出しは、LLMが1つのユーザー要求に対して複数ツールを連鎖的に実行するパターン。各ツール実行の結果が次のツールへの入力になり、複雑なタスクを自律的に解決するエージェント動作を実現する。
実行パターンの分類
逐次実行(Sequential)
前のツール結果に依存する順次実行:
Step 1: search_web("最新のPython 3.13リリースノート")
→ URLリスト取得
Step 2: fetch_page(url="https://...")
→ HTMLコンテンツ取得
Step 3: extract_text(html="...")
→ 本文テキスト抽出
Step 4: summarize(text="...")
→ 要約生成
並列実行(Parallel)
独立したツールを同時実行:
同時実行:
- get_weather("東京")
- get_stock_price("NVDA")
- get_news("AI")
全結果取得後に統合レスポンス生成
条件分岐実行
前のステップ結果に応じたツール選択:
if search_result.confidence > 0.8:
use direct_answer()
else:
use web_search() → verify_source() → answer()
ReActフレームワークとの関係
マルチステップ呼び出しの理論的基盤となるReAct(Reason + Act):
- Thought: 次に何をすべきか推論
- Action: ツールを選択・実行
- Observation: 実行結果を観察
- [繰り返し]: 目標達成まで反復
実装例(OpenAI API)
max_iterations = 10
messages = [{"role": "user", "content": task}]
for _ in range(max_iterations):
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools
)
if response.choices[0].finish_reason == "stop":
break # タスク完了
# ツール呼び出しを実行
tool_calls = response.choices[0].message.tool_calls
for tc in tool_calls:
result = execute_tool(tc.function.name, tc.function.arguments)
messages.append({"role": "tool", "content": result, "tool_call_id": tc.id})
課題と対策
トークンコスト累積
- 問題: ステップが増えるほど会話履歴が膨張
- 対策: 中間結果を要約・圧縮して渡す
無限ループリスク
- 問題: ツール結果不良でループ継続
- 対策: max_iterationsと終了条件の明示的設定
ツール呼び出し失敗の伝播
- 問題: 中間ステップ失敗でタスク全体が崩壊
- 対策: エラーハンドリングとリトライロジックの実装
主要フレームワーク
- LangGraph: ステートマシンベースのマルチステップ実行グラフ
- Anthropic Claude:
tool_useコンテンツブロックの連鎖 - OpenAI Assistants API: Runsオブジェクトで自動マルチステップ管理
- LlamaIndex: AgentRunnerによる自律的ツール選択・実行