チャット補完 API ドキュメント (Chat Completions)
この API は、一連の会話メッセージを受け取り、モデルが1つ以上の予測された補完結果を返すために使用されます。ストリーミング出力、ツール呼び出し(Function Calling)、および様々なサンプリングパラメータの調整をサポートしています。
1. エンドポイント情報
- API名:公式Nテスト
- リクエストメソッド:
POST - エンドポイントURL:
https://api.codingplanx.ai/v1/chat/completions - Content-Type:
application/json - 認証方式:
Bearer {{YOUR_API_KEY}}
2. リクエストヘッダー (Headers)
| パラメータ名 | 必須 | データ型 | 説明 | 例 |
|---|---|---|---|---|
| Content-Type | はい | string | メディアタイプの識別 | application/json |
| Accept | はい | string | クライアントが受け入れ可能なレスポンス形式 | application/json |
| Authorization | いいえ | string | API アクセストークン | Bearer sk-xxxxxx |
3. リクエストボディ (Request Body)
| パラメータ名 | 必須 | データ型 | 説明 |
|---|---|---|---|
| model | はい | string | 使用するモデル ID(例: gpt-4o, gpt-3.5-turbo)。 |
| messages | はい | array | 会話メッセージのリスト。各オブジェクトには role (system/user/assistant) と content が含まれます。 |
| tools | はい | array | モデルが呼び出せるツールのリスト。現在は関数(Function)のみをサポートしています。 |
| tool_choice | はい | object | モデルがどの関数を呼び出すかを制御します。none (呼び出さない), auto (自動), または特定の関数を指定します。 |
| temperature | いいえ | number | サンプリング温度 (0〜2)。高いほどランダムになり、低いほど決定的になります。top_p のどちらか一方のみを変更することを推奨します。 |
| top_p | いいえ | number | ヌクレアスサンプリング。0.1 は確率質量の上位 10% のトークンのみを考慮することを意味します。 |
| n | いいえ | integer | デフォルトは 1。各入力メッセージに対して生成される返答の数。 |
| stream | いいえ | boolean | デフォルトは false。true の場合、ChatGPT のようにトークンをインクリメンタル(逐次的)に送信します。 |
| stop | いいえ | string | 停止シーケンス。モデルがこれらの文字に遭遇した場合、生成を停止します。 |
| max_tokens | いいえ | integer | 生成する最大トークン数。デフォルトは inf(無限)。 |
| presence_penalty | いいえ | number | -2.0 から 2.0 の間の値。既に出現したトピックをペナルティの対象とし、新しい話題について話す可能性を高めます。 |
| frequency_penalty | いいえ | number | -2.0 から 2.0 の間の値。繰り返される単語やフレーズをペナルティの対象とします。 |
| logit_bias | いいえ | object | 指定したトークンが出現する確率を変更します。 |
| user | いいえ | string | エンドユーザーの識別子。不正利用の検出に使用されます。 |
| response_format | いいえ | object | 返却フォーマットを指定します。例: { "type": "json_object" } を設定すると JSON モードが有効になります。 |
| seen | いいえ | integer | テスト段階の機能。シード(Seed)を指定して、決定論的な出力を試みます。 |
4. レスポンスパラメータ (Response Body)
| パラメータ名 | データ型 | 説明 |
|---|---|---|
| id | string | 今回のリクエストの一意の識別子。 |
| object | string | オブジェクトタイプ。通常は chat.completion です。 |
| created | integer | リクエストが作成されたタイムスタンプ(Unixタイム/秒)。 |
| choices | array | 返答オプションのリスト。 |
| ├─ index | integer | リスト内でのこのオプションのインデックス。 |
| ├─ message | object | モデルによって生成された具体的なメッセージ。 |
| │ ├─ role | string | ロール。通常は assistant です。 |
| │ └─ content | string | メッセージのテキストコンテンツ。 |
| └─ finish_reason | string | 生成が停止した理由(例: stop, length, tool_calls)。 |
| usage | object | トークンの使用状況。 |
| ├─ prompt_tokens | integer | 入力(プロンプト)で消費されたトークン数。 |
| ├─ completion_tokens | integer | 出力(生成)で消費されたトークン数。 |
| └─ total_tokens | integer | 合計消費トークン数。 |
5. リクエストとレスポンスの例 (Example)
リクエスト例
{
"model": "gpt-4o",
"messages": [
{
"role": "user",
"content": "who are u?"
}
],
"n": 1,
"max_tokens": 100,
"temperature": 0.8,
"stream": false
}
レスポンス例
{
"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
}
}
6. よくある質問 (FAQ)
Q: response_format: { "type": "json_object" } を設定してもエラーになるのはなぜですか?
A: JSONモードを使用する場合、messages 内のシステムメッセージまたはユーザーメッセージを通じて、モデルに対して明示的にJSONを生成するように指示する必要があります(例:「JSONフォーマットで返答してください」)。そうしないと、モデルが有効なJSONを生成できずに処理がスタックしたり、エラーを返したりする可能性があります。
Q: temperature と top_p は同時に調整できますか?
A: 技術的には可能ですが、公式にはどちらか一方のみを調整することが推奨されています。一方を調整するだけで出力のランダム性を変える目的は達成できます。両方を同時に調整すると、生成結果の予測が困難になる可能性があります。
Q: stream: true の場合、どのようにデータを受信しますか?
A: ストリーミング転送を有効にすると、サーバーは一連の Server-Sent Events (SSE) を送信します。各イベントのデータ部分は JSON オブジェクトであり、最後は data: [DONE] で終了します。Python の response.iter_lines() のようなストリーミング解析ライブラリを使用して、データを1行ずつ処理する必要があります。
Q: トークン(Token)の消費量はどのように計算されますか?
A: 英語の場合、1トークンは約4文字または0.75単語に相当します。中国語や日本語の場合、1文字が1〜2トークン(またはそれ以上)に相当する場合があります。最終的な消費量は、レスポンスボディ内の usage フィールドの値に基づきます。
Q: finish_reason: "length" はどういう意味ですか?
A: これは、生成されたコンテンツが max_tokens で設定した制限を超えたか、モデルのコンテキスト最大長(Token上限)に達したため、コンテンツが途中で切り捨てられたことを意味します。
Q: この API は関数呼び出し(Function Calling)をサポートしていますか?
A: はい、サポートしています。tools パラメータで関数のプロトタイプを定義すると、モデルは必要に応じて通常の content の代わりに choices[0].message 内に tool_calls を返します。