チャット補完の作成(ストリーミング)
公式ドキュメント参考: OpenAI Chat Create
エンドポイントの概要
プロンプト(Prompt)を指定すると、モデルは1つまたは複数の予測される補完された会話コンテンツを返します。このエンドポイントは、標準のレスポンスとストリーミング(SSE)レスポンスの両方をサポートしており、さらに各位置の代替トークンの確率を返すこともできます。
リクエスト仕様
- HTTPメソッド:
POST - エンドポイントURL:
https://api.codingplanx.ai/v1/chat/completions
ヘッダー (Headers)
| パラメータ名 | 必須 | 型 | 例 | 説明 |
|---|---|---|---|---|
Content-Type | はい | string | application/json | データ形式 |
Accept | はい | string | application/json | 受信データ形式 |
Authorization | いいえ* | string | Bearer {{YOUR_API_KEY}} | 認証トークン(実際の呼び出し時は通常必須) |
X-Forwarded-Host | いいえ | string | localhost:5173 | プロキシホスト名(通常は手動で渡す必要はありません) |
リクエストボディ (Request Body)
| パラメータ名 | 型 | 必須 | 説明 |
|---|---|---|---|
model | string | はい | 使用するモデルID。互換性のあるモデルのリストについては、モデルエンドポイントの互換性表を参照してください。 |
messages | array | はい | これまでの会話に含まれるメッセージのリスト。role と content フィールドを含みます。 |
tools | array | はい | モデルが呼び出せるツールのリスト。現在はツールとしての関数(Function)のみをサポートしています。 |
tool_choice | object | はい | モデルがどの関数を呼び出すか(ある場合)を制御します。none は呼び出さないことを示し、auto は自動選択、または特定の関数を強制的に呼び出すことを指定します。 |
extra_body | object | はい | 追加パラメータ。思考モードを有効にするかどうかを設定する enable_thinking(boolean)を含みます(モデルのサポートが必要)。 |
temperature | integer/float | いいえ | サンプリング温度。0から2の間で指定します。高い値(例: 0.8)は出力をよりランダムにし、低い値(例: 0.2)はより集中的で決定論的な出力にします。この値か top_p のどちらかを変更することをお勧めしますが、両方を同時に変更しないでください。 |
top_p | integer/float | いいえ | ヌクレアスサンプリングパラメータ。0.1は、上位10%の確率質量を構成するトークンのみを考慮することを意味します。この値か temperature のどちらかを変更することをお勧めしますが、両方を同時に変更しないでください。 |
n | integer | いいえ | 各入力メッセージに対して生成するチャット補完の選択肢の数。デフォルトは1です。 |
stream | boolean | いいえ | ストリーミング出力を有効にするかどうか。true に設定すると、Server-Sent Events(SSE)の形式でメッセージの差分(Delta)を送信し、data: [DONE] メッセージでストリームを終了します。 |
stop | string/array | いいえ | APIがトークンの生成を停止するシーケンス(最大4つ)。デフォルトは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モードが有効になります。注意: 使用する場合は、必ずメッセージ内でモデルにJSONを生成するように指示してください。そうしないと、無限に空白がストリーミングされる可能性があります。 |
seen | integer | いいえ | 決定論的サンプリングを行うためのシード(Seed)を設定します(ベータ機能)。 |
リクエスト例
{
"model": "gpt-5-mini",
"max_tokens": 1000,
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "你好"
}
],
"temperature": 1.0,
"stream": true,
"stream_options": {
"include_usage": true
}
}
レスポンス仕様
- Content-Type:
application/json(非ストリーミング) またはtext/event-stream(ストリーミングstream: trueの場合)
レスポンスパラメータ (非ストリーミング構造)
| パラメータ名 | 型 | 説明 |
|---|---|---|
id | string | チャット補完の一意の識別子。 |
object | string | オブジェクトタイプ。通常は chat.completion または chat.completion.chunk です。 |
created | integer | 作成時のタイムスタンプ(Unix時間)。 |
choices | array | 補完の選択肢のリスト。 |
choices[].index | integer | 選択肢リスト内のインデックス。 |
choices[].message | object | モデルによって生成されたメッセージオブジェクト。role と content を含みます。ストリーミングの場合は delta になります。 |
choices[].finish_reason | string | 生成が停止した理由(例: stop、length など)。 |
usage | object | APIトークンの使用状況の統計情報。 |
usage.prompt_tokens | integer | プロンプトで消費されたトークン数。 |
usage.completion_tokens | integer | モデルによって生成されたトークン数。 |
usage.total_tokens | integer | 今回のリクエストで消費された合計トークン数。 |
レスポンス例 (非ストリーミング / 集約されたストリーミング結果)
{
"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
}
}
(注:リクエストで stream: true が指定された場合、レスポンスボディは改行で区切られたSSEイベントストリームとなり、各行は data: {...} で始まり、最後に data: [DONE] で終了します。)
FAQs(よくある質問)
Q1: stream: true を有効にしたストリーミングレスポンスをどのように解析しますか?
A: stream: true を有効にすると、APIはServer-Sent Events(SSE)プロトコルを通じてデータを返します。クライアントはレスポンスストリームを1行ずつ読み取り、data: プレフィックスで始まる文字列を探してJSONとして解析する必要があります。データストリームの最後のメッセージは常に data: [DONE] であり、ストリームの終了を示します。解析時にこの終了マーカーを除外するようにしてください。
Q2: response_format をJSONに設定した後、リクエストがフリーズしたり、無限に空白がストリーミングされたりするのはなぜですか?
A: { "type": "json_object" } を使用してJSONモードを有効にする場合、渡される messages(通常はシステムプロンプト)内で「JSON形式で出力してください」とモデルに明示的に指示する必要があります。関連するテキストプロンプトがない場合、モデルは混乱し、max_tokens 制限に達するまで無限に空白文字を生成し続ける可能性があります。
Q3: temperature と top_p パラメータは同時に調整できますか?
A: 公式ドキュメントでは、この2つのパラメータを同時に調整しないことを強く推奨しています。どちらもモデルの出力のランダム性を制御するためのメカニズムです。出力をより安定させ、予測可能にしたい場合は temperature を下げるか、top_p を小さくします。より創造的な回答を得たい場合は、どちらか一方を高くします。両方を同時に変更すると、結果が予測困難になります。
Q4: パラメータの extra_body.enable_thinking の役割は何ですか?
A: これは本エンドポイントの特別な拡張パラメータです。{"enable_thinking": true} を渡した際、バックエンドで現在使用されているモデルが「思考モード(Thinking Mode / CoT)」(推論強化型の大規模モデルなど)をサポートしている場合、モデルは深い思考プロセスを開始します。モデルがサポートしていない場合、このパラメータは通常無視されます。
Q5: レスポンスの finish_reason が stop ではなく length になるのはなぜですか?
A: finish_reason が length を返す場合、モデルが完全な返答を生成する前に強制的に切り捨てられたことを示します。これは通常、max_tokens パラメータの設定値が小さすぎるか、入力と生成されたトークンの合計数が現在のモデルで許可されている最大コンテキストウィンドウの制限を超えたことが原因です。max_tokens の値を増やしてみてください。