会員登録すると
学習することができます。
会員登録する(無料)
登録済みの方はこちら
ログイン

エージェントにつなぐ ― tool_use と tool_result のループ

目安学習時間 20分

課題

全問正解でレクチャー完了です。

【問題1】

ツールの実行が失敗したときの扱いとして正しいものはどれですか。

[選択肢]

【問題2】

複数のツール結果を返すとき、正しい返し方はどれですか。

[選択肢]
会員登録すると
学習することができます。
会員登録する(無料)

学ぶ目的

準備

npm install @anthropic-ai/sdk
export ANTHROPIC_API_KEY=sk-ant-...

APIキーは各自で取得します。ここから先は従量課金なので、練習中は短い入力で試してください。

1往復目:AIがツールを呼びたいと言う

import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();

const messages = [{ role: "user", content: "いま東京は何度?" }];

let response = await client.messages.create({
  model: "claude-opus-5",
  max_tokens: 16000,
  tools: [weatherTool],
  messages,
});

console.log(response.stop_reason); // → "tool_use"

stop_reason"tool_use" なら、AIはツールを呼びたがっています。

2往復目:実行して結果を返す

応答の content には複数のブロックが入ります。type で絞り込んでから使います。

while (response.stop_reason === "tool_use") {
  // AIの発言をそのまま履歴に積む(content 全体を渡すこと)
  messages.push({ role: "assistant", content: response.content });

  const toolResults = [];
  for (const block of response.content) {
    if (block.type !== "tool_use") continue;

    try {
      const result = await getWeather(block.input.city);
      toolResults.push({
        type: "tool_result",
        tool_use_id: block.id,
        content: JSON.stringify(result),
      });
    } catch (error) {
      // 失敗も必ず返す。黙って捨てるとAIは待ち続ける
      toolResults.push({
        type: "tool_result",
        tool_use_id: block.id,
        content: error.message,
        is_error: true,
      });
    }
  }

  // 結果は「1つのuserメッセージ」にまとめて返す
  messages.push({ role: "user", content: toolResults });

  response = await client.messages.create({
    model: "claude-opus-5",
    max_tokens: 16000,
    tools: [weatherTool],
    messages,
  });
}

const answer = response.content.find((b) => b.type === "text");
console.log(answer.text); // → 「東京はいま21.4℃です」など

3つの約束ごと

  1. tool_use_id を必ず一致させる。どの呼び出しへの返事かが分からなくなります
  2. 複数のツール結果は1つのuserメッセージにまとめる。分けて送ると、AIは以後まとめて呼ばなくなります
  3. 失敗したら is_error: true を付けて必ず返す。返さないと処理が止まります

このレクチャーで学ぶこと

  • stop_reason を見てループを回す
  • tool_result の返し方(idの一致・1メッセージにまとめる)
  • 失敗を握りつぶさない

質問

まだ質問は投稿されていません。

質問投稿

ログイン後に質問の投稿ができます。