APIドキュメント:チャット補完の作成(Function Calling)
エンドポイントの説明
プロンプトが提供されると、モデルは1つまたは複数の予測される補完結果を返します。また、各位置の代替トークンの確率を返すこともできます。このエンドポイントは特に**関数呼び出し(Function Calling)**機能をサポートしており、モデルがメッセージの生成と指定された関数の呼び出しをインテリジェントに選択できるようにします。
- 公式リファレンス:Function Calling Guide
基本情報
- リクエストメソッド:
POST - エンドポイント:
https://api.codingplanx.ai/v1/chat/completions - データフォーマット:
application/json
リクエストヘッダー (Headers)
| パラメータ名 | 型 | 必須 | サンプル値 | 説明 |
|---|---|---|---|---|
Content-Type | string | はい | application/json | データコンテンツタイプ |
Accept | string | はい | application/json | クライアントが受け入れるデータ型 |
Authorization | string | いいえ | Bearer {{YOUR_API_KEY}} | 認証クレデンシャル |
リクエストボディ (Body)
| パラメータ名 | 型 | 必須 | 説明 |
|---|---|---|---|
model | string | はい | 使用するモデルのID(例:gpt-4o)。利用可能なモデルの詳細については、モデルエンドポイントの互換性表を参照してください。 |
messages | array | はい | これまでの会話を構成するメッセージのリスト。各オブジェクトには role と content フィールドが含まれている必要があります。 |
tools | array | はい | モデルが呼び出すことのできるツールのリスト。現在はツールとして関数のみをサポートしています。モデルがJSON入力を生成できる関数のリストを提供するために使用されます。 |
tool_choice | object/string | はい | モデルがどの関数を呼び出すか(呼び出す場合)を制御します。none は関数を呼び出さないことを意味し、auto はモデルが自動的に選択することを意味します。{"type": "function", "function": {"name": "my_function"}} のように指定して、特定の関数を強制的に呼び出すことも可能です。 |
temperature | number | いいえ | サンプリング温度。0から2の間で指定します。高い値(例:0.8)を指定すると出力がよりランダムになり、低い値(例:0.2)を指定すると出力がより決定的になります。この値と top_p を同時に変更することは推奨されません。 |
top_p | number | いいえ | 核(ヌクレアス)サンプリング手法。0.1 は確率質量のトップ10%を構成するトークンのみが考慮されることを意味します。この値と temperature を同時に変更することは推奨されません。 |
n | integer | いいえ | 各入力メッセージに対して生成するチャット補完の選択肢の数。デフォルトは 1 です。 |
stream | boolean | いいえ | デフォルトは false です。true に設定した場合、部分的なメッセージの差分が Server-Sent Events (SSE) として送信され、data: [DONE] で終了します。 |
stop | string/array | いいえ | 最大4つのシーケンス。APIはこれらのシーケンスに遭遇した時点で、それ以上のトークン生成を停止します。デフォルトは null です。 |
max_tokens | integer | いいえ | チャット補完で生成される最大トークン数。入力と生成結果の合計の長さは、モデルのコンテキスト長の制限を受けます。 |
presence_penalty | number | いいえ | -2.0から2.0の間の数値。正の値を指定すると、テキスト内にすでに存在するトークンにペナルティを与え、モデルが新しいトピックについて話す可能性を高めます。 |
frequency_penalty | number | いいえ | -2.0から2.0の間の数値。正の値を指定すると、テキスト内での既存の頻度に基づいて新しいトークンにペナルティを与え、モデルが同じ内容を繰り返す可能性を低くします。 |
logit_bias | object | いいえ | 指定したトークンが補完に現れる可能性を変更します。トークンIDをバイアス値(-100から100)にマッピングするJSONオブジェクトを受け入れます。 |
user | string | いいえ | エンドユーザーを表す一意の識別子。乱用の監視や検出に役立ちます。 |
response_format | object | いいえ | モデルが出力しなければならないフォーマットを指定するオブジェクト。例:{ "type": "json_object" } を使用してJSONモードを有効にします。 |
seen | integer | いいえ | ベータ版の機能です。指定した場合、システムは決定論的にサンプリングを行い、同じシードとパラメータを持つリクエストが同じ結果を返すように試みます。 |
リクエストボディのサンプル
{
"model": "gpt-4o",
"messages": [
{
"role": "system",
"content": "You are a helpful customer support assistant. Use the supplied tools to assist the user."
},
{
"role": "user",
"content": "Hi, can you tell me the delivery date for my order?"
},
{"role": "assistant", "content": "Hi there! I can help with that. Can you please provide your order ID?"},
{"role": "user", "content": "i think it is order_12345"}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_delivery_date",
"description": "Get the delivery date for a customer's order. Call this whenever you need to know the delivery date, for example when a customer asks 'Where is my package'",
"parameters": {
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "The customer's order ID."
}
},
"required": [
"order_id"
],
"additionalProperties": false
}
}
}
]
}
レスポンスパラメータ (Response)
| パラメータ名 | 型 | 説明 |
|---|---|---|
id | string | チャット補完の一意の識別子。 |
object | string | オブジェクトのタイプ。通常は chat.completion です。 |
created | integer | チャット補完が作成された際のUnixタイムスタンプ。 |
choices | array | チャット補完の選択肢のリスト。 |
? index | integer | 選択肢リストにおけるこの選択肢のインデックス。 |
? message | object | モデルによって生成された応答メッセージオブジェクト。role と content を含みます。 |
? finish_reason | string | モデルがトークンの生成を停止した理由(例:stop、length、または関数呼び出しがトリガーされた場合)。 |
usage | object | 今回のリクエストにおけるトークン消費量の統計情報。 |
? prompt_tokens | integer | プロンプト(入力)で消費されたトークン数。 |
? completion_tokens | integer | モデルが生成した応答で消費されたトークン数。 |
? total_tokens | integer | このリクエストで消費された合計トークン数。 |
レスポンスのサンプル (200 OK)
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "\r
\r
Hello there, how may I assist you today?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
よくある質問 (FAQ)
Q1: 特定の関数を強制的に呼び出すにはどうすればよいですか?
A: tool_choice パラメータを設定することで実現できます。例えば、関数名が get_weather の場合、tool_choice を {"type": "function", "function": {"name": "get_weather"}} に設定します。これにより、モデルは通常の応答を無視し、強制的に該当する関数のパラメータを出力します。
Q2: 応答内容が途中で途切れてしまうのはなぜですか?
A: レスポンス内の choices[0].finish_reason の値を確認してください。"length" の場合、生成されたテキストが設定した max_tokens パラメータの制限を超えたか、モデルのコンテキストの最大長に達したことを示しています。max_tokens の値を大きくして試してみてください。
Q3: temperature と top_p はどちらもランダム性を制御しますが、どのように使い分ければよいですか?
A: これら2つのパラメータは、どちらもモデル出力の多様性を調整します。高い値はより創造的な出力を生成し、低い値はより厳密で決定的な出力を生成します。公式には、どちらか一方のパラメータのみを調整し、もう一方はデフォルト値のままにすることが推奨されています。予期せぬ結果を防ぐため、両方を同時に変更しないでください。
Q4: stream: true を有効にした場合、エンドポイントが返すデータフォーマットはどのようになりますか?
A: ストリーミング転送を有効にすると、エンドポイントは単一のJSONオブジェクトを返すのではなく、Server-Sent Events (SSE) のデータストリームを返します。データは data: {"id": "...", "choices": [{"delta": {"content": "..."}}]} の形式でチャンクごとに送信されます。転送が完了すると、最後のメッセージとして data: [DONE] が送信されます。
Q5: response_format で JSON モードを有効にする際の注意点は何ですか?
A: response_format を { "type": "json_object" } に設定する場合、messages(システムプロンプトまたはユーザープロンプト)内で、JSON形式のデータを生成するようにモデルへ明確に指示する必要があります。そうしないと、モデルが空白文字を生成する無限ループに陥り、リクエストがタイムアウトしたり、トークン上限に達したりする可能性があります。