Документация API: Создание вызова функции чата
Описание интерфейса
По заданному промпту (подсказке) модель возвращает один или несколько предсказанных вариантов ответа, а также может возвращать вероятности альтернативных токенов для каждой позиции. Данный API специально поддерживает функцию вызова функций (Function Calling), позволяя модели осуществлять интеллектуальный выбор между генерацией текстового сообщения и вызовом указанной функции.
- Официальная документация: Function Calling Guide
Основная информация
- Метод запроса:
POST - URL-адрес запроса:
https://api.codingplanx.ai/v1/chat/completions - Формат данных:
application/json
Заголовки запроса (Headers)
| Параметр | Тип | Обязательно | Пример | Описание |
|---|---|---|---|---|
Content-Type | string | Да | application/json | Тип содержимого данных |
Accept | string | Да | application/json | Тип данных, принимаемых клиентом |
Authorization | string | Нет | Bearer {{YOUR_API_KEY}} | Учетные данные для аутентификации |
Тело запроса (Body)
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
model | string | Да | ID используемой модели (например, gpt-4o). Подробную информацию о доступных моделях см. в таблице совместимости конечных точек (endpoints) моделей. |
messages | array | Да | Список сообщений, составляющих диалог на данный момент. Каждый объект должен содержать поля role и content. |
tools | array | Да | Список инструментов, которые может вызывать модель. В настоящее время в качестве инструментов поддерживаются только функции. Используется для предоставления списка функций, для которых модель может генерировать входные данные в формате JSON. |
tool_choice | object/string | Да | Управляет тем, какую функцию вызывает модель (если таковые имеются). none означает, что вызовы не требуются; auto означает, что модель выбирает сама. Также можно принудительно вызвать определенную функцию с помощью {"type": "function", "function": {"name": "my_function"}}. |
temperature | number | Нет | Температура выборки (сэмплинга), от 0 до 2. Более высокие значения (например, 0.8) делают вывод более случайным, а более низкие (например, 0.2) — более детерминированным. Рекомендуется не изменять этот параметр одновременно с top_p. |
top_p | number | Нет | Метод ядерного сэмплинга (nucleus sampling). Значение 0.1 означает, что рассматриваются только токены, составляющие верхние 10% вероятностной массы. Рекомендуется не изменять этот параметр одновременно с temperature. |
n | integer | Нет | Количество генерируемых вариантов ответа для каждого входного сообщения. По умолчанию 1. |
stream | boolean | Нет | По умолчанию false. Если установлено true, частичные изменения сообщений (дельты) будут отправляться в виде потока Server-Sent Events (SSE) и завершатся сообщением data: [DONE]. |
stop | string/array | Нет | До 4 последовательностей, при обнаружении которых API прекратит дальнейшую генерацию токенов. По умолчанию null. |
max_tokens | integer | Нет | Максимальное количество токенов, генерируемых в ответе чата. Общая длина ввода и сгенерированного текста ограничена размером контекста модели. |
presence_penalty | number | Нет | Число от -2.0 до 2.0. Положительные значения штрафуют новые токены в зависимости от того, появлялись ли они уже в тексте, увеличивая вероятность перехода модели к новым темам. |
frequency_penalty | number | Нет | Число от -2.0 до 2.0. Положительные значения штрафуют новые токены в зависимости от частоты их текущего присутствия в тексте, уменьшая вероятность дословного повторения моделью одного и того же контента. |
logit_bias | object | Нет | Изменяет вероятность появления указанных токенов в ответе. Принимает JSON-объект, сопоставляющий ID токенов с их значением смещения (от -100 до 100). |
user | string | Нет | Уникальный идентификатор, представляющий вашего конечного пользователя; может помочь в мониторинге и обнаружении злоупотреблений. |
response_format | object | Нет | Объект, определяющий формат, который должна вывести модель. Например, используйте { "type": "json_object" } для включения режима JSON. |
seen | integer | Нет | Функция на стадии бета-тестирования. Если указано, система попытается выполнить детерминированную выборку, чтобы запросы с одинаковым seed и параметрами возвращали одинаковые результаты. |
Пример тела запроса
{
"model": "gpt-4o",
"messages": [
{
"role": "system",
"content": "You are a helpful customer support assistant. Use the supplied tools to assist the user."
},
{
"role": "user",
"content": "Hi, can you tell me the delivery date for my order?"
},
{"role": "assistant", "content": "Hi there! I can help with that. Can you please provide your order ID?"},
{"role": "user", "content": "i think it is order_12345"}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_delivery_date",
"description": "Get the delivery date for a customer's order. Call this whenever you need to know the delivery date, for example when a customer asks 'Where is my package'",
"parameters": {
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "The customer's order ID."
}
},
"required": [
"order_id"
],
"additionalProperties": false
}
}
}
]
}
Параметры ответа (Response)
| Параметр | Тип | Описание |
|---|---|---|
id | string | Уникальный идентификатор ответа чата. |
object | string | Тип объекта, обычно chat.completion. |
created | integer | Unix-метка времени создания ответа. |
choices | array | Список вариантов сгенерированного ответа. |
? index | integer | Индекс данного варианта в списке choices. |
? message | object | Объект сообщения, сгенерированного моделью, содержит role и content. |
? finish_reason | string | Причина, по которой модель остановила генерацию токенов (например, stop, length или был вызван инструмент/функция). |
usage | object | Статистика использования токенов для данного запроса. |
? 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)
В1: Как заставить модель вызвать конкретную функцию, которую я указал?
О: Вы можете сделать это, настроив параметр tool_choice. Например, если ваша функция называется get_weather, вы можете установить tool_choice следующим образом: {"type": "function", "function": {"name": "get_weather"}}. Таким образом, модель проигнорирует обычный текстовый ответ и принудительно выведет аргументы для этой функции.
В2: Почему мой ответ был обрезан (усечен)?
О: Проверьте значение choices[0].finish_reason в объекте ответа. Если оно равно "length", это означает, что сгенерированный текст превысил ограничение параметра max_tokens, которое вы установили, или достиг максимальной длины контекста модели. Вы можете попробовать увеличить значение max_tokens.
В3: И temperature, и top_p контролируют случайность. Как мне их использовать?
О: Оба этих параметра действительно регулируют разнообразие вывода модели. Более высокие значения делают вывод более креативным, а более низкие — более строгим и детерминированным. В официальной документации рекомендуется изменять только один из этих параметров, оставляя другой по умолчанию. Не изменяйте оба параметра одновременно, чтобы избежать непредсказуемых результатов.
В4: Какой формат данных возвращает API при включении stream: true?
О: При включении потоковой передачи API больше не возвращает единый JSON-объект. Вместо этого он возвращает поток данных Server-Sent Events (SSE). Данные будут отправляться по частям (дельты) в формате data: {"id": "...", "choices": [{"delta": {"content": "..."}}]} . По завершении передачи последним сообщением будет data: [DONE].
В5: На что следует обратить внимание при включении режима JSON в response_format?
О: Когда вы устанавливаете response_format в { "type": "json_object" }, вы должны явно проинструктировать модель генерировать данные в формате JSON в массиве messages (в системном или пользовательском промпте). Если этого не сделать, модель может застрять в бесконечном цикле, генерируя пробельные символы, что приведет к тайм-ауту запроса или достижению лимита токенов.