Вызов инструментов (function calling) через AI Gateway
Как модель вызывает ваши функции: описание tools, разбор tool_calls, агентные циклы и возврат результата, пример кода на Python — с оплатой в рублях.
Function calling позволяет модели не просто отвечать текстом, а запрашивать вызов ваших функций: узнать погоду, поискать в базе, оформить заказ, дёрнуть внешний API. Вы описываете доступные инструменты, модель сама решает, какой из них и с какими аргументами вызвать, а ваш код исполняет вызов и возвращает результат обратно. В AI Gateway это работает через стандартные поля tools и tool_calls, как в оригинальном API OpenAI.
Как это работает
В запросе вы передаёте массив tools — описания функций в формате JSON Schema. Модель, если сочтёт нужным, вернёт не текст, а tool_calls с именем функции и аргументами. Ваш код исполняет функцию, добавляет результат в диалог сообщением с ролью tool и снова обращается к модели — та формулирует финальный ответ с учётом полученных данных.
from openai import OpenAI
import json
client = OpenAI(
base_url="https://ai-gatewey.ru/v1",
api_key="sk-aigate-ваш_ключ",
)
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Погода в городе",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
messages = [{"role": "user", "content": "Какая погода в Москве?"}]
resp = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=messages,
tools=tools,
)
call = resp.choices[0].message.tool_calls[0]
args = json.loads(call.function.arguments)
# исполняем функцию у себя и возвращаем результат модели
result = {"city": args["city"], "temp": "+18°C"}
messages.append(resp.choices[0].message)
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": json.dumps(result),
})
final = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=messages,
tools=tools,
)
print(final.choices[0].message.content)Сценарии
- Агентные циклы — модель последовательно вызывает инструменты (поиск → расчёт → оформление), пока не решит задачу; цикл повторяется, пока приходят
tool_calls. - Доступ к актуальным данным — курсы, остатки на складе, статус заказа: модель берёт свежие цифры из вашей системы, а не из памяти.
- Действия в системах — создать заявку, отправить письмо, изменить запись: модель формирует вызов, ваш код его исполняет под вашим контролем.
- Структурированное извлечение — описав функцию с нужными полями, вы гарантированно получаете аргументы по заданной схеме.
Частые вопросы
Какие модели поддерживают вызов инструментов?
Только модели с поддержкой tools — их актуальный список собирается живьём ниже по каталогу. На карточке в каталоге такие модели помечены бейджем «инструменты».
Можно ли заставить модель вызвать конкретную функцию?
Да — параметр tool_choice управляет поведением: auto (модель решает сама), required (обязательно вызвать какой-то инструмент) или явное указание конкретной функции.
Модель может вызвать несколько инструментов сразу?
Да, в одном ответе может прийти несколько элементов в tool_calls. Исполните их все и верните по результату на каждый tool_call_id.
Соберите первого агента с инструментами
Получить ключМодели с этой возможностью
Живой срез каталога — цены за 1 млн токенов:
| Модель | Цена, ₽/1М | Контекст |
|---|---|---|
| Anthropic: Claude Opus 4.8 | 3 919 | 1M |
| Mistral: Mistral Medium 3.5 | 1 176 | 262K |
| xAI: Grok 4.3 | 392 | 1M |
| OpenAI: GPT-5.5 | 4 703 | 1.1M |
| Google: Gemini 3.1 Pro Preview | 1 881 | 1.0M |
| Qwen: Qwen3 Max | 611 | 262K |
| Meta: Llama 4 Maverick | 94 | 1.0M |
| DeepSeek: DeepSeek V3 | 125 | 128K |
| Anthropic: Claude Sonnet 5 | 1 568 | 1M |
| Qwen: Qwen3.6 Plus | 306 | 1M |
| Qwen: Qwen3.7 Max | 588 | 1M |
| Google: Nano Banana Pro (Gemini 3 Pro Image) | 1 881 | 66K |