エンドポイント
ツール呼び出し
モデルに関数の実行を依頼するツール呼び出しの解説です。OpenAI の tools 形式でのリクエストパラメーター、messages と tools を送って結果を返すループの手順、実装のヒント、エラーを説明します。OpenAI、Anthropic、Google、Mistral などのモデルで使えます。
プレイグラウンドで試すツール呼び出し(関数呼び出し)では、モデルがコードに関数の実行を依頼し、その結果を回答に使います。api14 は、ツールに対応するすべてのモデル(OpenAI、Anthropic、Google、Mistral、Qwen、DeepSeek など)で OpenAI の tools 形式を使います。ツールに対応するモデルを探すには、モデルの一覧で対応パラメーターを絞り込んでください(supported_parameters に tools が含まれます)。
リクエストパラメーター
| パラメーター | 型 | 説明 |
|---|---|---|
tools | array | [{ "type": "function", "function": { "name", "description", "parameters" } }]。parameters は JSON Schema です。 |
tool_choice | string | object | "auto"(デフォルト)、"none"、"required"、または { "type": "function", "function": { "name": "get_weather" } }。 |
parallel_tool_calls | boolean | 1 ターンで複数のツール呼び出しを許可します(対応するモデルではデフォルトで 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);
ループ
messagesとtoolsを送信します。- レスポンスが
finish_reason: "tool_calls"の場合、message.tool_callsの各項目を実行します。 - アシスタントのメッセージを追加し、呼び出しごとに
{ "role": "tool", "tool_call_id", "content" }のメッセージを 1 つ追加して、リクエストを再送します。 - モデルが通常のコンテンツで回答するまで繰り返します。
ツール呼び出しを含むレスポンスは次のとおりです。
{
"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 と同じです。エラーを参照してください。