Официальная 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-Type | string | Да | application/json | Фиксированное значение application/json |
| Accept | string | Да | application/json | Рекомендуется фиксированное значение application/json |
| Authorization | string | Да | Bearer sk-xxxxxx | Аутентификация по API ключу |
2.2 Тело запроса (Body)
| Имя параметра | Тип | Обязательно | По умолчанию | Описание |
|---|---|---|---|---|
| model | string | Да | - | Используемый ID модели (например, gpt-4o, gpt-3.5-turbo и т.д.). |
| messages | array | Да | - | Список сообщений диалога на данный момент. Каждый объект содержит role ("system", "user", "assistant", "tool") и content. |
| tools | array | Да | - | Список инструментов, которые может вызывать модель. В настоящее время поддерживается только type: "function". Используется для определения имени функции, описания и параметров. |
| tool_choice | object/str | Нет | auto | Управляет тем, какую функцию вызывает модель. none: не вызывать; auto: автоматический выбор; {"type": "function", "function": {"name": "xxx"}}: принудительный вызов определенной функции. |
| temperature | number | Нет | 1 | Температура выборки (0-2). Чем выше значение, тем более случайным будет результат; чем ниже, тем более детерминированным. |
| top_p | number | Нет | 1 | Вероятность ядерной выборки (nucleus sampling). |
| n | integer | Нет | 1 | Количество вариантов ответов чата, генерируемых для каждого входного сообщения. |
| stream | boolean | Нет | false | Использовать ли потоковую передачу. Если установлено значение true, токены будут отправляться как события, отправляемые сервером (SSE). |
| stop | string/array | Нет | null | Стоп-последовательность, при которой API перестанет генерировать токены. |
| max_tokens | integer | Нет | inf | Максимальное количество генерируемых токенов. |
| presence_penalty | number | Нет | 0 | В диапазоне от -2.0 до 2.0. Увеличивает вероятность того, что модель начнет говорить на новые темы. |
| frequency_penalty | number | Нет | 0 | В диапазоне от -2.0 до 2.0. Снижает вероятность повторения моделью одного и того же контента. |
| response_format | object | Нет | - | Указывает формат вывода. Например, {"type": "json_object"} включает режим JSON. |
| seed | integer | Нет | - | Если указано, система приложит все усилия для детерминированной выборки, чтобы запросы с одинаковым seed и параметрами возвращали одинаковый результат. |
| user | string | Нет | - | Уникальный идентификатор, представляющий конечного пользователя, используется для мониторинга злоупотреблений. |
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 Структура тела ответа
| Имя параметра | Тип | Описание |
|---|---|---|
| id | string | Уникальный идентификатор данного запроса. |
| object | string | Тип объекта, обычно chat.completion. |
| created | integer | Метка времени Unix (в секундах). |
| choices | array | Содержит список сгенерированных ответов. |
| └ message | object | Содержит role, content и возможные tool_calls. |
| └ finish_reason | string | Причина остановки. stop (естественная остановка), length (достигнут max_tokens), tool_calls (требуется вызов инструмента). |
| usage | object | Статистика использования: 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: Возможны следующие причины:
- Модель считает, что вопрос пользователя не требует вызова данной функции.
- Описание вашей функции (description) недостаточно ясное, из-за чего модель не может сопоставить намерения.
- Параметр
tool_choiceбыл явно установлен в значениеnone. - Ограничения возможностей модели (рекомендуется отдавать приоритет моделям, поддерживающим вызов функций, таким как
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 и выполнить соответствующую локальную логику для каждого отдельного вызова.