Документация API для генерации чата (Chat Completions)
Этот API используется для получения одного или нескольких предсказанных ответов (дополнений) от модели на основе предоставленной серии сообщений чата. Поддерживается потоковая передача данных (streaming), вызов функций (Function Calling) и настройка различных параметров семплирования.
1. Информация об интерфейсе (API)
- Название интерфейса: Официальный N-тест
- Метод запроса:
POST - URL запроса:
https://api.codingplanx.ai/v1/chat/completions - Тип контента:
application/json - Аутентификация:
Bearer {{YOUR_API_KEY}}
2. Заголовки запроса (Headers)
| Параметр | Обязательно | Тип | Описание | Пример |
|---|---|---|---|---|
| Content-Type | Да | string | Идентификатор типа медиа | application/json |
| Accept | Да | string | Формат ответа, принимаемый клиентом | application/json |
| Authorization | Нет | string | Маркер доступа (токен) API | Bearer sk-xxxxxx |
3. Тело запроса (Request Body)
| Параметр | Обязательно | Тип | Описание |
|---|---|---|---|
| model | Да | string | Идентификатор используемой модели (например, gpt-4o, gpt-3.5-turbo). |
| messages | Да | array | Список сообщений чата. Каждый объект содержит role (system/user/assistant) и content. |
| tools | Да | array | Список инструментов, которые может вызвать модель. В настоящее время поддерживаются только функции. |
| tool_choice | Да | object | Управляет тем, какую функцию вызывает модель. none (не вызывать), auto (автоматически) или указание конкретной функции. |
| temperature | Нет | number | Температура семплирования (0-2). Чем выше значение, тем более случайный результат; чем ниже, тем более детерминированный. Рекомендуется изменять либо этот параметр, либо top_p. |
| top_p | Нет | number | Ядерное семплирование (Nucleus sampling). Значение 0.1 означает, что учитываются только токены, составляющие верхние 10% вероятностной массы. |
| n | Нет | integer | По умолчанию 1. Количество вариантов ответов, генерируемых для каждого входного сообщения. |
| stream | Нет | boolean | По умолчанию false. Если true, отправляются частичные токены сообщений по мере их генерации (как в ChatGPT). |
| stop | Нет | string | Последовательность остановки. Модель прекратит генерацию при обнаружении этих символов. |
| max_tokens | Нет | integer | Максимальное количество генерируемых токенов. По умолчанию inf (бесконечность). |
| presence_penalty | Нет | number | От -2.0 до 2.0. Штрафует новые токены в зависимости от того, появлялись ли они уже в тексте, увеличивая вероятность обсуждения новых тем. |
| frequency_penalty | Нет | number | От -2.0 до 2.0. Штрафует новые токены в зависимости от частоты их появления в тексте, уменьшая вероятность повторения одних и тех же слов. |
| logit_bias | Нет | object | Изменяет вероятность появления указанных токенов в ответе. |
| user | Нет | string | Идентификатор конечного пользователя, помогающий отслеживать злоупотребления. |
| response_format | Нет | object | Задает формат ответа. Например, { "type": "json_object" } включает режим вывода в JSON. |
| seen | Нет | integer | Функция на стадии тестирования. Указывает seed (зерно) для попытки получения детерминированных (повторяемых) результатов. |
4. Параметры ответа (Response Body)
| Параметр | Тип | Описание |
|---|---|---|
| id | string | Уникальный идентификатор данного запроса. |
| object | string | Тип объекта, обычно chat.completion. |
| created | integer | Метка времени создания запроса (в секундах формата Unix). |
| choices | array | Список вариантов ответов. |
| ├─ index | integer | Индекс данного варианта в списке. |
| ├─ message | object | Конкретное сообщение, сгенерированное моделью. |
| │ ├─ role | string | Роль, обычно assistant. |
| │ └─ content | string | Текстовое содержимое сообщения. |
| └─ finish_reason | string | Причина остановки генерации (например, stop, length, tool_calls). |
| usage | object | Статистика использования токенов. |
| ├─ prompt_tokens | integer | Количество токенов, израсходованных во входных данных (промпте). |
| ├─ completion_tokens | integer | Количество токенов, израсходованных при генерации ответа. |
| └─ total_tokens | integer | Общее количество израсходованных токенов. |
5. Примеры (Examples)
Пример запроса
{
"model": "gpt-4o",
"messages": [
{
"role": "user",
"content": "who are u?"
}
],
"n": 1,
"max_tokens": 100,
"temperature": 0.8,
"stream": false
}
Пример ответа
{
"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
}
}
6. Часто задаваемые вопросы (FAQ)
В: Почему возникает ошибка, хотя я установил response_format: { "type": "json_object" }?
О: При использовании режима JSON вы должны явно дать указание модели сгенерировать JSON через системное или пользовательское сообщение в массиве messages (например: "Пожалуйста, ответьте в формате JSON"). В противном случае модель может зависнуть или выдать ошибку из-за невозможности сгенерировать валидный JSON-объект.
В: Можно ли одновременно настраивать temperature и top_p?
О: Технически да, но официально рекомендуется изменять только один из них. Настройка одного параметра обычно достаточна для изменения случайности вывода. Изменение обоих параметров одновременно может привести к непредсказуемым результатам генерации.
В: Как получать данные, когда включен stream: true?
О: При включении потоковой передачи сервер будет отправлять серию событий Server-Sent Events (SSE). Полезная нагрузка каждого события представляет собой объект JSON, и трансляция завершится строкой data: [DONE]. Для построчной обработки вам необходимо использовать библиотеки для парсинга потоков (например, response.iter_lines() в Python).
В: Как рассчитывается расход токенов?
О: Для английского языка 1 токен равен примерно 4 символам или 0,75 слова; для китайского языка 1 иероглиф может соответствовать 1-2 токенам. Фактический расход определяется по значениям в поле usage в теле ответа.
В: Что означает finish_reason: "length"?
О: Это означает, что сгенерированный контент превысил лимит, установленный вами в параметре max_tokens, или достиг максимального ограничения длины контекста модели, в результате чего текст был усечен.
В: Поддерживает ли API вызов функций (Function Calling)?
О: Да, поддерживает. Если определить прототипы функций через параметр tools, модель по мере необходимости будет возвращать объект tool_calls внутри choices[0].message, а не обычный текст в поле content.