Cookieを使用しています. Cookieとブラウザストレージは、ログイン状態の維持と設定の保存に使われます。許可いただいた場合は、サイトの利用状況も計測します。はいつでも変更できます。詳しくはCookieポリシーをご覧ください。

ツール呼び出し

エンドポイント

ツール呼び出し

モデルに関数の実行を依頼するツール呼び出しの解説です。OpenAI の tools 形式でのリクエストパラメーター、messages と tools を送って結果を返すループの手順、実装のヒント、エラーを説明します。OpenAI、Anthropic、Google、Mistral などのモデルで使えます。

プレイグラウンドで試す

ツール呼び出し(関数呼び出し)では、モデルがコードに関数の実行を依頼し、その結果を回答に使います。api14 は、ツールに対応するすべてのモデル(OpenAI、Anthropic、Google、Mistral、Qwen、DeepSeek など)で OpenAI の tools 形式を使います。ツールに対応するモデルを探すには、モデルの一覧で対応パラメーターを絞り込んでください(supported_parameters に tools が含まれます)。

リクエストパラメーター

パラメーター型説明
toolsarray[{ "type": "function", "function": { "name", "description", "parameters" } }]。parameters は JSON Schema です。
tool_choicestring | object"auto"(デフォルト)、"none"、"required"、または { "type": "function", "function": { "name": "get_weather" } }。
parallel_tool_callsboolean1 ターンで複数のツール呼び出しを許可します(対応するモデルではデフォルトで true)。
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api14.com/api/v1",
  apiKey: process.env.API14_API_KEY,
});

const result = await client.chat.completions.create({
  "model": "openai/gpt-5-mini",
  "messages": [
    {
      "role": "user",
      "content": "What is the weather in Istanbul?"
    }
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "Get the current weather",
        "parameters": {
          "type": "object",
          "properties": {
            "city": {
              "type": "string"
            }
          },
          "required": [
            "city"
          ]
        }
      }
    }
  ]
});
console.log(result.choices[0].message.tool_calls);

ループ

  1. messages と tools を送信します。
  2. レスポンスが finish_reason: "tool_calls" の場合、message.tool_calls の各項目を実行します。
  3. アシスタントのメッセージを追加し、呼び出しごとに { "role": "tool", "tool_call_id", "content" } のメッセージを 1 つ追加して、リクエストを再送します。
  4. モデルが通常のコンテンツで回答するまで繰り返します。

ツール呼び出しを含むレスポンスは次のとおりです。

{
  "id": "gen-1760000000-tool1",
  "model": "anthropic/claude-sonnet-4.5",
  "choices": [
    {
      "index": 0,
      "finish_reason": "tool_calls",
      "message": {
        "role": "assistant",
        "content": null,
        "tool_calls": [
          {
            "id": "call_01",
            "type": "function",
            "function": { "name": "get_weather", "arguments": "{\"city\":\"Istanbul\"}" }
          }
        ]
      }
    }
  ],
  "usage": { "prompt_tokens": 182, "completion_tokens": 21, "total_tokens": 203, "cost": 0.000861 }
}

続きのリクエストには、ツールの結果を含めます。

{
  "model": "anthropic/claude-sonnet-4.5",
  "tools": [ ... same tools ... ],
  "messages": [
    { "role": "user", "content": "What's the weather in Istanbul?" },
    { "role": "assistant", "content": null, "tool_calls": [ { "id": "call_01", "type": "function", "function": { "name": "get_weather", "arguments": "{\"city\":\"Istanbul\"}" } } ] },
    { "role": "tool", "tool_call_id": "call_01", "content": "{\"temp_c\": 21, \"sky\": \"clear\"}" }
  ]
}

ループ内のすべてのリクエストで tools を送り続けてください。多くのプロバイダーは、リクエストに tools の定義がないと tool メッセージを拒否します。

ヒント

  • arguments は JSON の文字列です。モデルは無効な JSON を生成することがあるため、解析して検証してください。
  • ストリーミングでは、ツール呼び出しは index をキーとする delta.tool_calls のフラグメントとして届きます。解析する前に arguments の文字列を結合してください。
  • ツールに対応するプロバイダーだけにルーティングするには、provider: { "require_parameters": true } を設定します。プロバイダールーティングを参照してください。
  • ループの各反復は、別々に課金されるリクエストです。

エラー

ツールに対応していないモデルは、上流の 400 または 404("No endpoints found that support tool use")を返すことがあります。そのほかのエラーは Chat Completions と同じです。エラーを参照してください。