チャット画像認識の作成(ストリーミング対応)Base64
エンドポイント概要: プロンプトを指定すると、モデルは1つまたは複数の予測されるコンプリーション(生成テキスト)を返します。また、各位置における代替トークンの確率を返すことも可能です。このエンドポイントは主に、画像認識(Base64ベース)とテキストプロンプトを含む対話生成の作成に使用されます。
公式リファレンス:OpenAI API ドキュメント
エンドポイント詳細
- リクエストメソッド:
POST - リクエストURL:
https://api.codingplanx.ai/v1/chat/completions - データ形式:
application/json
リクエストヘッダー (Request Headers)
| パラメータ名 | 必須 | 型 | 値の例 | 説明 |
|---|---|---|---|---|
| Content-Type | はい | string | application/json | データ形式 |
| Accept | はい | string | application/json | 受信形式 |
| Authorization | いいえ | string | Bearer {{YOUR_API_KEY}} | 認証トークン |
リクエストパラメータ (Request Body)
| フィールド名 | 型 | 必須 | 説明 |
|---|---|---|---|
| model | string | はい | 使用するモデルのID(例:gpt-4o-mini)。 |
| messages | array | はい | これまでの対話を含むメッセージのリスト。role と content を含みます。画像認識の場合、content はテキストと image_url (Base64) を含む配列にすることができます。 |
| tools | array | はい | モデルが呼び出せるツールのリスト。現在はツールとしての関数(functions)のみをサポートしています。モデルがJSON入力を生成できる関数のリストを提供するために使用されます。 |
| tool_choice | object | はい | モデルがどの関数を呼び出すかを制御します。none は呼び出さないことを意味し、auto は自動選択を意味します。特定の関数を強制的に呼び出すことも可能です。 |
| temperature | integer | いいえ | サンプリング温度。0から2の間で指定します。0.8のような高い値は出力をよりランダムにし、0.2のような低い値は出力をより決定論的にします。top_p と同時に変更することは推奨されません。 |
| top_p | integer | いいえ | 核サンプリング(Nucleus sampling)パラメータ。0.1は上位10%の確率質量を構成するトークンのみを考慮することを意味します。temperature と同時に変更することは推奨されません。 |
| n | integer | いいえ | 各入力メッセージに対して生成するチャットコンプリーションの選択肢の数。デフォルトは1です。 |
| stream | boolean | いいえ | ストリーミング出力の切り替え。デフォルトは false です。true に設定した場合、サーバー送信イベント (SSE) としてメッセージの差分が部分的に送信され、data: [DONE] で終了します。 |
| stop | string | いいえ | APIがトークンの生成を停止するシーケンス(最大4つ)。デフォルトはnullです。 |
| max_tokens | integer | いいえ | チャットコンプリーションで生成されるトークンの最大数。デフォルトはinf(無限)です。 |
| presence_penalty | number | いいえ | 存在ペナルティ(-2.0〜2.0)。正の値は、テキスト内に既に新しいトークンが出現しているかどうかに基づいてペナルティを与え、モデルが新しいトピックについて話す可能性を高めます。 |
| frequency_penalty | number | いいえ | 頻度ペナルティ(-2.0〜2.0)。正の値は、テキスト内でのトークンの現在の出現頻度に基づいてペナルティを与え、モデルが同じ内容を繰り返す可能性を低くします。デフォルトは0です。 |
| logit_bias | object | いいえ | 指定されたトークンがコンプリーションに出現する可能性を変更します。トークンIDをバイアス値(-100〜100)にマッピングするJSONオブジェクトを受け入れます。 |
| user | string | いいえ | エンドユーザーを表す一意の識別子。不正利用の監視と検出に役立ちます。 |
| response_format | object | いいえ | モデルが出力しなければならない形式を指定します。{ "type": "json_object" } を渡すとJSONモードが有効になります。使用する場合は、プロンプト内でモデルにJSONを出力するように指示する必要があります。 |
| seen | integer | いいえ | ベータ機能。決定論的サンプリングのシード。同じシードとパラメータを使用してリクエストを繰り返すと、同じ結果が返されるはずです(絶対的な決定論は保証されません)。 |
リクエスト例
{
"model": "gpt-4o-mini",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "この画像には何が写っていますか?詳細に説明してください。"
},
{
"type": "image_url",
"image_url": {
"url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAiEAAAIhCAYAAACYF2qHAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOy9ebxtWVXf+x1zrrX2Pud2VRQUjUVf0glIYvOJLdJ8iCagIor... (ここは長すぎるため省略されたBase64文字列)"
}
}
]
}
]
}
レスポンスパラメータ (Response Body)
| フィールド名 | 型 | 説明 |
|---|---|---|
| id | string | チャットコンプリーションの一意の識別子。 |
| object | string | オブジェクトタイプ。通常は chat.completion(ストリーミングの場合は chat.completion.chunk)。 |
| created | integer | 作成日時のUnixタイムスタンプ。 |
| choices | array | コンプリーションの選択肢リスト。 |
| └─ index | integer | リスト内における選択肢のインデックス。 |
| └─ message | object | モデルによって生成されたメッセージオブジェクト。role と content を含みます。 |
| └─ finish_reason | string | モデルが生成を停止した理由(例:stop は正常終了、length は max_tokens 制限への到達を表します)。 |
| usage | object | 今回のリクエストにおけるトークン (Token) 消費量の統計。 |
| └─ 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: ストリーミング出力(Streaming)を有効にするには?
A: リクエストボディの stream パラメータを true に設定します。有効にすると、APIは回答全体の生成を待たずに、サーバー送信イベント(Server-Sent Events, SSE)を通じて data: {...} 形式のデータチャンクを逐次返し、data: [DONE] のフラグを受信した時点で生成を終了します。
Q2: 画像認識時のBase64エンコードにおける要件は?
A: 画像のBase64文字列には、data:image/png;base64, や data:image/jpeg;base64, のような正しいMIMEタイプのプレフィックスを含める必要があります。ネットワーク遅延と prompt_tokens の消費を抑えるため(サイズが大きすぎる画像は大量のトークンを消費し、コンテキスト制限を超える可能性があります)、Base64に変換する前に適切なサイズに画像を圧縮することを推奨します。
Q3: モデルの回答が途中で途切れてしまうのはなぜですか?
A: レスポンスボディ内の choices[0].finish_reason の値を確認してください。length の場合、生成されたテキストが設定した max_tokens の上限に達したか、対話全体がモデルの最大コンテキストウィンドウ制限を超過したことを意味します。max_tokens の値を大きくすることで解決できる場合があります。
Q4: モデルにJSON形式でデータを出力させるには?
A: まず、リクエストボディで "response_format": { "type": "json_object" } を設定する必要があります。【重要】:このパラメータの設定に加えて、messages のシステムプロンプト (system prompt) またはユーザープロンプト内で、自然言語を用いてJSONを出力するようモデルに明示的に指示する必要があります(例:「結果をJSON形式で出力してください」)。これを行わないと、モデルはトークンを使い果たすまで無限に空白を生成し続ける可能性があります。
Q5: 401 Unauthorized エラーが発生した場合はどうすればよいですか?
A: リクエストヘッダーの Authorization パラメータにAPIキーが正しく設定されているか確認してください。形式は厳密に Bearer あなたのAPI_KEY である必要があります(Bearer とAPIキーの間には半角スペースが1つ必要です)。