Пригласите друзей и получите бесплатные токены!Узнать больше

Создание завершения чата - DeepSeek v3.1: Управление мышлением (Потоковый режим)

Этот API используется для создания диалогов с моделью DeepSeek v3.1. Поддерживается потоковый вывод (SSE) и точное управление способностью глубокого мышления модели (Thinking).

Описание API

  • Статус API: Опубликован (Released)
  • Метод запроса: POST
  • URL запроса: https://api.codingplanx.ai/v1/chat/completions

Заголовки запроса (Headers)

ПараметрОбязательноТипПримерОписание
Content-TypeДаStringapplication/jsonФормат данных
AcceptДаStringapplication/jsonФормат приема
AuthorizationНетStringBearer {{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НетStringenabled: Принудительно включить глубокое мышление.<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 для непотоковых запросов или после сборки потока)

ПараметрТипОписание
idStringУникальный идентификатор запроса.
objectStringТип объекта, обычно chat.completion или chat.completion.chunk.
createdIntegerВременная метка создания (в секундах).
choicesArray of ObjectsСписок сгенерированных моделью ответов.
? indexIntegerИндекс данного ответа в списке choices.
? messageObjectОбъект сгенерированного сообщения (в потоковых запросах обычно delta).
   ? roleStringРоль (обычно assistant).
   ? contentStringКонкретное содержимое ответа.
? finish_reasonStringПричина завершения генерации (например, stop, length).
usageObjectСтатистика использования токенов.
? prompt_tokensIntegerКоличество токенов, использованных в промпте (запросе).
? completion_tokensIntegerКоличество сгенерированных токенов.
? total_tokensIntegerОбщее количество использованных токенов.

Пример ответа (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.