Для AI-агентов: markdown этой страницы — /docs-content/ai/chat/tools.md индекс документации — /llms.txt
Вызов функций (tools)
Опишите функции, которые модель может вызвать, и она сама решит, когда это нужно. Модель не выполняет функцию — она возвращает её имя и аргументы, а вызов делает ваш код. Результат вы отправляете обратно в диалог, и модель формулирует финальный ответ.
Когда модель решает вызвать функцию, finish_reason равен tool_calls, а content — null. Аргументы приходят в tool_calls[].function.arguments строкой с JSON.
Описание функции
curl -X POST https://vibecode.bitrix24.tech/v1/chat/completions \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "bitrix/bitrixgpt-5.5",
"messages": [
{"role": "user", "content": "Какая погода в Москве?"}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Получить текущую погоду в указанном городе",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "Название города"}
},
"required": ["city"]
}
}
}
],
"tool_choice": "auto"
}'
Пример ответа
{
"id": "chatcmpl-9aaee7576d8057ab",
"object": "chat.completion",
"model": "bitrix/bitrixgpt-5.5",
"choices": [
{
"index": 0,
"finish_reason": "tool_calls",
"message": {
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "chatcmpl-tool-a423212c4e614cab",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"city\": \"Москва\"}"
}
}
]
}
}
],
"usage": {"prompt_tokens": 275, "completion_tokens": 26, "total_tokens": 301}
}
Возврат результата в диалог
Выполните функцию у себя и добавьте в messages сообщение с ролью tool и тем же tool_call_id:
{
"messages": [
{"role": "user", "content": "Какая погода в Москве?"},
{"role": "assistant", "content": null, "tool_calls": [{"id": "chatcmpl-tool-a423212c4e614cab", "type": "function", "function": {"name": "get_weather", "arguments": "{\"city\": \"Москва\"}"}}]},
{"role": "tool", "tool_call_id": "chatcmpl-tool-a423212c4e614cab", "content": "+5°C, облачно"}
]
}
Следующим ответом модель сформулирует человеческий текст на основе полученного результата.
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | unsupported_tool_type |
В массиве tools есть элемент с type, отличным от function. Для поиска в интернете используйте POST /v1/search |
| 400 | tool_choice_without_tools |
Передан tool_choice, но массив tools отсутствует |
Полный список общих ошибок API — Ошибки.
Известные особенности
Поддерживается только type: "function". Встроенных инструментов вроде поиска в интернете у эндпоинта нет. Запрос с другим значением type отклоняется с 400, а не выполняется молча без инструментов.
Имена в ответе сверяются с вашим списком. Если модель придумала имя функции, которого нет в tools, такой вызов удаляется из ответа. Когда придуманными оказываются все вызовы, finish_reason меняется на stop, а в content приходит текстовое объяснение — диалог не зацикливается на несуществующей функции.
Аргументы приходят строкой. Поле arguments — это JSON в виде строки, его нужно разобрать перед использованием. Модель может вернуть синтаксически корректный JSON, не соответствующий вашей схеме параметров, поэтому проверяйте значения перед вызовом.