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

Официальная API документация по вызову функций (Function Calling)

Данный интерфейс используется для создания автодополнения чата (Chat Completion). Предоставляя список сообщений и необязательный список инструментов (Functions), модель может генерировать текстовые ответы или параметры, соответствующие определенной JSON-схеме, для вызова внешних функций.

1. Информация об интерфейсе

  • URL интерфейса: https://api.codingplanx.ai/v1/chat/completions
  • Метод запроса: POST
  • Тип контента: application/json
  • Способ аутентификации: Authorization: Bearer {{YOUR_API_KEY}}

2. Параметры запроса

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

Имя параметраТипОбязательноПримерОписание
Content-TypestringДаapplication/jsonФиксированное значение application/json
AcceptstringДаapplication/jsonРекомендуется фиксированное значение application/json
AuthorizationstringДаBearer sk-xxxxxxАутентификация по API ключу

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

Имя параметраТипОбязательноПо умолчаниюОписание
modelstringДа-Используемый ID модели (например, gpt-4o, gpt-3.5-turbo и т.д.).
messagesarrayДа-Список сообщений диалога на данный момент. Каждый объект содержит role ("system", "user", "assistant", "tool") и content.
toolsarrayДа-Список инструментов, которые может вызывать модель. В настоящее время поддерживается только type: "function". Используется для определения имени функции, описания и параметров.
tool_choiceobject/strНетautoУправляет тем, какую функцию вызывает модель. none: не вызывать; auto: автоматический выбор; {"type": "function", "function": {"name": "xxx"}}: принудительный вызов определенной функции.
temperaturenumberНет1Температура выборки (0-2). Чем выше значение, тем более случайным будет результат; чем ниже, тем более детерминированным.
top_pnumberНет1Вероятность ядерной выборки (nucleus sampling).
nintegerНет1Количество вариантов ответов чата, генерируемых для каждого входного сообщения.
streambooleanНетfalseИспользовать ли потоковую передачу. Если установлено значение true, токены будут отправляться как события, отправляемые сервером (SSE).
stopstring/arrayНетnullСтоп-последовательность, при которой API перестанет генерировать токены.
max_tokensintegerНетinfМаксимальное количество генерируемых токенов.
presence_penaltynumberНет0В диапазоне от -2.0 до 2.0. Увеличивает вероятность того, что модель начнет говорить на новые темы.
frequency_penaltynumberНет0В диапазоне от -2.0 до 2.0. Снижает вероятность повторения моделью одного и того же контента.
response_formatobjectНет-Указывает формат вывода. Например, {"type": "json_object"} включает режим JSON.
seedintegerНет-Если указано, система приложит все усилия для детерминированной выборки, чтобы запросы с одинаковым seed и параметрами возвращали одинаковый результат.
userstringНет-Уникальный идентификатор, представляющий конечного пользователя, используется для мониторинга злоупотреблений.

3. Пример запроса

{
    "model": "gpt-4o",
    "messages": [
        {
            "role": "user",
            "content": "Какая сегодня погода в Пекине?"
        }
    ],
    "tools": [
        {
            "type": "function",
            "function": {
                "name": "get_current_weather",
                "description": "Получить текущую погоду в указанном месте",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "location": {
                            "type": "string",
                            "description": "Название города, например: Пекин"
                        },
                        "unit": {
                            "type": "string",
                            "enum": ["celsius", "fahrenheit"]
                        }
                    },
                    "required": ["location"]
                }
            }
        }
    ],
    "tool_choice": "auto",
    "temperature": 0.8
}

4. Параметры ответа

4.1 Структура тела ответа

Имя параметраТипОписание
idstringУникальный идентификатор данного запроса.
objectstringТип объекта, обычно chat.completion.
createdintegerМетка времени Unix (в секундах).
choicesarrayСодержит список сгенерированных ответов.
└ messageobjectСодержит role, content и возможные tool_calls.
└ finish_reasonstringПричина остановки. stop (естественная остановка), length (достигнут max_tokens), tool_calls (требуется вызов инструмента).
usageobjectСтатистика использования: prompt_tokens, completion_tokens, total_tokens.

4.2 Пример ответа (обычный текст)

{
    "id": "chatcmpl-123",
    "object": "chat.completion",
    "created": 1677652288,
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "Сегодня в Пекине ясная погода, температура 25 градусов Цельсия."
            },
            "finish_reason": "stop"
        }
    ],
    "usage": {
        "prompt_tokens": 9,
        "completion_tokens": 12,
        "total_tokens": 21
    }
}

5. FAQ (Часто задаваемые вопросы)

Q1: Что такое Function Calling (вызов функций)? A: Это способ наделить модель возможностью использования внешних инструментов. Модель не выполняет код напрямую, а на основе вашего описания генерирует объект JSON, содержащий имя функции и необходимые параметры. Вам нужно извлечь этот JSON, выполнить функцию локально или на своем сервере, а затем передать результат обратно модели.

Q2: Почему я настроил tools, но модель не вернула tool_calls? A: Возможны следующие причины:

  1. Модель считает, что вопрос пользователя не требует вызова данной функции.
  2. Описание вашей функции (description) недостаточно ясное, из-за чего модель не может сопоставить намерения.
  3. Параметр tool_choice был явно установлен в значение none.
  4. Ограничения возможностей модели (рекомендуется отдавать приоритет моделям, поддерживающим вызов функций, таким как gpt-4o или gpt-3.5-turbo).

Q3: Как заставить модель обязательно вызвать определенную функцию? A: Вы можете установить для tool_choice конкретный объект, например: "tool_choice": {"type": "function", "function": {"name": "get_current_weather"}}. Таким образом, даже если модель решит, что это не нужно, она попытается сгенерировать параметры для этой функции.

Q4: Что делать, если finish_reason имеет значение length? A: Это означает, что сгенерированный ответ превысил ограничение max_tokens или ограничение контекстного окна модели. Вы можете попробовать увеличить параметр max_tokens или сократить длину истории messages.

Q5: На что следует обратить внимание при использовании режима JSON (JSON Mode)? A: При установке response_format: { "type": "json_object" }, вы должны явно потребовать в сообщении System или User, чтобы модель выводила контент в формате JSON (например, добавить фразу "ответьте в формате JSON"), иначе модель может зациклиться, бесконечно выводя пробелы.

Q6: Как обрабатывать несколько вызовов инструментов (multiple tool calls)? A: В рамках одного запроса модель может сгенерировать сразу несколько вызовов инструментов (например, одновременно запросить погоду в Пекине и Шанхае). Вам необходимо перебрать массив choices[0].message.tool_calls и выполнить соответствующую локальную логику для каждого отдельного вызова.