チャット補完の作成 - DeepSeek v3.1 思考レベル制御 (ストリーミング)
本エンドポイントは、DeepSeek v3.1 モデルとのチャット対話を作成するために使用されます。ストリーミング出力(SSE)およびモデルの深い思考能力(Thinking)の詳細な制御をサポートしています。
エンドポイント詳細
- ステータス: リリース済み (Released)
- 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 ヘッダーは無効化されています)
リクエストボディ (Request Body)
Content-Type: application/json
| パラメータ名 | 必須 | 型 | 説明 |
|---|---|---|---|
model | はい | String | 使用するモデルのID。例: deepseek-v3-1-250821 |
messages | はい | Array of Objects | 対話のメッセージリスト。 |
? role | はい | String | メッセージ送信者の役割(例: system, user, assistant)。 |
? content | はい | String | メッセージの具体的な内容。 |
max_tokens | いいえ | Integer | 1回のリクエストでモデルが生成する補完(completion)の最大トークン数。入力と出力の合計トークン数はモデルのコンテキスト制限を受けます。 |
temperature | いいえ | Number | サンプリング温度。0から2の間で指定します。高い値(例: 0.8)は出力をよりランダムにし、低い値(例: 0.2)は出力をより決定的で集中したものにします。 |
stream | いいえ | Boolean | true に設定した場合、SSE(Server-Sent Events)形式でメッセージの差分をストリーミング送信します。メッセージストリームは data: [DONE] で終了します。 |
stream_options | いいえ | Object | ストリーミング出力に関するオプション。stream パラメータが true の場合のみ設定可能です。 |
? include_usage | いいえ | Boolean | true に設定した場合、ストリーミングメッセージの最後にある data: [DONE] の前に、追加のチャンク(データブロック)が送信されます。このチャンクの usage フィールドには、リクエスト全体のトークン使用量統計が含まれます。 |
thinking | いいえ | Object | 深い思考能力をサポートする一部のモデルにおいて、このフィールドを通じて思考能力のオン/オフを制御します。 |
? type | いいえ | String | enabled:深い思考能力を強制的に有効化します。<br>disabled:強制的に無効化します。<br>auto:モデルの自動判断に委ねます。 |
リクエスト例
{
"model": "deepseek-v3-1-250821",
"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
},
"thinking": {
"type": "enabled"
}
}
レスポンス (Response)
HTTP ステータスコード: 200 OK
Content-Type: application/json
(注:stream: true の場合、戻り値のフォーマットは SSE データストリームとなり、各データチャンクは以下の構造を持つ JSON 文字列になります。以下は非ストリーミング、またはストリーミングを組み立てた後の標準的な JSON 構造です)
| フィールド名 | 型 | 説明 |
|---|---|---|
id | String | リクエストの一意の識別子。 |
object | String | オブジェクトタイプ。通常は chat.completion または chat.completion.chunk。 |
created | Integer | 作成日時のタイムスタンプ(秒)。 |
choices | Array of Objects | モデルが生成した回答リスト。 |
? index | Integer | choices リストにおけるこの回答のインデックス。 |
? message | Object | 生成された回答メッセージオブジェクト(ストリーミングリクエストでは通常 delta となります)。 |
? role | String | 役割(通常は assistant)。 |
? content | String | 回答の具体的な内容。 |
? finish_reason | String | 生成を停止した理由(例: stop, length)。 |
usage | Object | トークン使用量の統計。 |
? prompt_tokens | Integer | プロンプトで消費されたトークン数。 |
? completion_tokens | Integer | 生成されたコンテンツで消費されたトークン数。 |
? total_tokens | Integer | 消費された合計トークン数。 |
レスポンス例 (JSON)
{
"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: ストリーミング (SSE) リクエストでトークンの消費量(Usage)を取得するにはどうすればよいですか?
A1: リクエストボディで stream を true に設定し、同時に stream_options: {"include_usage": true} を構成する必要があります。これにより、SSE ストリームの終了マーカー data: [DONE] が送信される前に、サーバーが追加のデータチャンクをプッシュします。このデータチャンクの choices 配列は空ですが、usage フィールドには完全なトークン統計情報が含まれます。
Q2: thinking パラメータの enabled と auto の違いは何ですか?
A2:
enabled: 最終的な回答を返す前に、モデルに「深い思考(Chain of Thought)」を行うことを強制します。これにより通常、より高品質な推論結果が得られますが、応答時間(初回トークン生成までの遅延)や出力トークンの消費量が増加する可能性があります。auto: 決定権をモデルに委ねます。モデルはmessages内の質問の複雑さに応じて、深い思考が必要かどうかを自動的に判断します。
Q3: リクエストが 401 Unauthorized エラーを返したのはなぜですか?
A3: これは通常、認証の失敗が原因です。リクエストヘッダーの Authorization フィールドが Bearer {{YOUR_API_KEY}} の形式で正しく入力されているか確認し、APIキーが有効であり、期限切れでないことを確認してください。
Q4: thinking(深い思考)を有効にした後、思考プロセスの内容は返されますか?
A4: OpenAI 互換フォーマットの標準的な実装によれば、ストリーミング出力の場合、深い思考の内容は特定の識別子(例: <think>...</think> タグ)内に含まれて返されるか、あるいは特定のチャンクフィールドを通じて返される可能性があります。フロントエンドでストリーミングデータを解析する際は、ユーザーに「思考中」のUIエフェクトを表示できるように、content 内の思考プロセスの内容を適切に処理することに留意してください。
Q5: finish_reason: "length" が返された場合、どういう意味ですか?
A5: これは、モデルの出力が設定した max_tokens の制限に達したか、モデル自体の最大コンテキストウィンドウの制限に触れたため、回答が切り捨てられたことを意味します。回答が不完全な場合は、max_tokens の値を大きくして再試行してください。