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

Документация API: Создание вызова функции чата

Описание интерфейса

По заданному промпту (подсказке) модель возвращает один или несколько предсказанных вариантов ответа, а также может возвращать вероятности альтернативных токенов для каждой позиции. Данный API специально поддерживает функцию вызова функций (Function Calling), позволяя модели осуществлять интеллектуальный выбор между генерацией текстового сообщения и вызовом указанной функции.

Основная информация

  • Метод запроса: POST
  • URL-адрес запроса: https://api.codingplanx.ai/v1/chat/completions
  • Формат данных: application/json

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

ПараметрТипОбязательноПримерОписание
Content-TypestringДаapplication/jsonТип содержимого данных
AcceptstringДаapplication/jsonТип данных, принимаемых клиентом
AuthorizationstringНетBearer {{YOUR_API_KEY}}Учетные данные для аутентификации

Тело запроса (Body)

ПараметрТипОбязательноОписание
modelstringДаID используемой модели (например, gpt-4o). Подробную информацию о доступных моделях см. в таблице совместимости конечных точек (endpoints) моделей.
messagesarrayДаСписок сообщений, составляющих диалог на данный момент. Каждый объект должен содержать поля role и content.
toolsarrayДаСписок инструментов, которые может вызывать модель. В настоящее время в качестве инструментов поддерживаются только функции. Используется для предоставления списка функций, для которых модель может генерировать входные данные в формате JSON.
tool_choiceobject/stringДаУправляет тем, какую функцию вызывает модель (если таковые имеются). none означает, что вызовы не требуются; auto означает, что модель выбирает сама. Также можно принудительно вызвать определенную функцию с помощью {"type": "function", "function": {"name": "my_function"}}.
temperaturenumberНетТемпература выборки (сэмплинга), от 0 до 2. Более высокие значения (например, 0.8) делают вывод более случайным, а более низкие (например, 0.2) — более детерминированным. Рекомендуется не изменять этот параметр одновременно с top_p.
top_pnumberНетМетод ядерного сэмплинга (nucleus sampling). Значение 0.1 означает, что рассматриваются только токены, составляющие верхние 10% вероятностной массы. Рекомендуется не изменять этот параметр одновременно с temperature.
nintegerНетКоличество генерируемых вариантов ответа для каждого входного сообщения. По умолчанию 1.
streambooleanНетПо умолчанию false. Если установлено true, частичные изменения сообщений (дельты) будут отправляться в виде потока Server-Sent Events (SSE) и завершатся сообщением data: [DONE].
stopstring/arrayНетДо 4 последовательностей, при обнаружении которых API прекратит дальнейшую генерацию токенов. По умолчанию null.
max_tokensintegerНетМаксимальное количество токенов, генерируемых в ответе чата. Общая длина ввода и сгенерированного текста ограничена размером контекста модели.
presence_penaltynumberНетЧисло от -2.0 до 2.0. Положительные значения штрафуют новые токены в зависимости от того, появлялись ли они уже в тексте, увеличивая вероятность перехода модели к новым темам.
frequency_penaltynumberНетЧисло от -2.0 до 2.0. Положительные значения штрафуют новые токены в зависимости от частоты их текущего присутствия в тексте, уменьшая вероятность дословного повторения моделью одного и того же контента.
logit_biasobjectНетИзменяет вероятность появления указанных токенов в ответе. Принимает JSON-объект, сопоставляющий ID токенов с их значением смещения (от -100 до 100).
userstringНетУникальный идентификатор, представляющий вашего конечного пользователя; может помочь в мониторинге и обнаружении злоупотреблений.
response_formatobjectНетОбъект, определяющий формат, который должна вывести модель. Например, используйте { "type": "json_object" } для включения режима JSON.
seenintegerНетФункция на стадии бета-тестирования. Если указано, система попытается выполнить детерминированную выборку, чтобы запросы с одинаковым 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)

ПараметрТипОписание
idstringУникальный идентификатор ответа чата.
objectstringТип объекта, обычно chat.completion.
createdintegerUnix-метка времени создания ответа.
choicesarrayСписок вариантов сгенерированного ответа.
? indexintegerИндекс данного варианта в списке choices.
? messageobjectОбъект сообщения, сгенерированного моделью, содержит role и content.
? finish_reasonstringПричина, по которой модель остановила генерацию токенов (например, stop, length или был вызван инструмент/функция).
usageobjectСтатистика использования токенов для данного запроса.
? prompt_tokensintegerКоличество токенов, израсходованных на промпт (ввод).
? completion_tokensintegerКоличество токенов, израсходованных на сгенерированный ответ.
? total_tokensintegerОбщее количество токенов, израсходованных в этом запросе.

Пример ответа (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 (в системном или пользовательском промпте). Если этого не сделать, модель может застрять в бесконечном цикле, генерируя пробельные символы, что приведет к тайм-ауту запроса или достижению лимита токенов.