Создание завершения чата - DeepSeek v3.1: Управление мышлением (Потоковый режим)
Этот API используется для создания диалогов с моделью DeepSeek v3.1. Поддерживается потоковый вывод (SSE) и точное управление способностью глубокого мышления модели (Thinking).
Описание API
- Статус API: Опубликован (Released)
- Метод запроса:
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 | Идентификатор используемой модели. Пример: deepseek-v3-1-250821 |
messages | Да | Array of Objects | Список сообщений диалога. |
? role | Да | String | Роль отправителя сообщения (например, system, user, assistant). |
? content | Да | String | Текст (содержимое) сообщения. |
max_tokens | Нет | Integer | Максимальное количество токенов, генерируемых в ответе (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, где каждый фрагмент данных (chunk) является 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: Как получить статистику потребления токенов (Usage) в потоковом (SSE) запросе?
A1: В теле запроса необходимо установить stream в true, а также задать stream_options: {"include_usage": true}. Таким образом, сервер отправит дополнительный блок данных перед маркером окончания потока SSE data: [DONE]. Массив choices в этом блоке будет пустым, но поле usage будет содержать полную статистику по токенам.
Q2: В чем разница между enabled и auto в параметре thinking?
A2:
enabled: Принуждает модель выполнить "глубокое размышление (Chain of Thought)" перед возвратом окончательного ответа. Это обычно приводит к более высокому качеству логических выводов, но может увеличить время отклика (задержку до первого символа) и расход выходных токенов.auto: Передает право принятия решения модели. Модель автоматически определит, требуется ли глубокое мышление, основываясь на сложности вопросов в вашихmessages.
Q3: Почему запрос возвращает ошибку 401 Unauthorized?
A3: Обычно это означает сбой аутентификации. Проверьте поле Authorization в заголовке запроса (Request Header) — оно должно быть точно в формате Bearer {{YOUR_API_KEY}}. Также убедитесь, что ваш API-ключ (API Key) действителен и срок его действия не истек.
Q4: Будет ли возвращаться содержимое процесса мышления, если включить глубокое мышление thinking?
A4: Согласно стандартной реализации, совместимой с OpenAI, при потоковом выводе содержимое глубокого мышления может возвращаться внутри специальных тегов (например, <think>...</think>) или через специальное поле в chunk. При парсинге потоковых данных на фронтенде обращайте внимание на обработку процесса мышления в content, чтобы реализовать UI-эффект "модель думает" для пользователя.
Q5: Что значит, если появляется finish_reason: "length"?
A5: Это означает, что вывод модели достиг установленного вами лимита max_tokens или уперся в ограничение максимального контекстного окна самой модели, из-за чего ответ был обрезан. Если ответ неполный, вы можете попробовать увеличить значение max_tokens.