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):

  1. Thought: 次に何をすべきか推論
  2. Action: ツールを選択・実行
  3. Observation: 実行結果を観察
  4. [繰り返し]: 目標達成まで反復

実装例(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による自律的ツール選択・実行
この記事について
カテゴリーAI・機械学習
難易度上級
作成日2026/6/6