Основы

Function calling на практике: инструменты шаг за шагом

Как модель вызывает ваши функции: описание инструментов, разбор tool_calls, возврат результата и финальный ответ. Полный цикл на примере с кодом.

2 минуты чтения

Языковая модель сама по себе не знает погоду, курс валют или содержимое вашей базы. Function calling (вызов инструментов) даёт ей мост в реальный мир: вы описываете доступные функции, модель решает, какую позвать и с какими аргументами, а выполняете её вы и возвращаете результат. Разберём полный цикл по шагам. Определение — в глоссарии.

Как это работает: четыре шага

  1. Вы описываете инструменты — имя, назначение и схему аргументов каждой функции в поле tools запроса.
  2. Модель решает — вместо текста возвращает tool_calls: какую функцию звать и с какими аргументами в JSON.
  3. Вы выполняете — модель не запускает код сама; функцию вызываете вы своим кодом и получаете результат.
  4. Модель отвечает — результат отправляется обратно, и модель формулирует финальный ответ пользователю на его основе.
Модель не выполняет функции — она только просит их вызвать. Исполнение целиком на вашей стороне, поэтому валидируйте аргументы перед запуском: модель может передать неожиданные значения, а вызов реальной функции способен что-то изменить в системе.

Шаг 1: описание инструмента

Инструмент описывается JSON-схемой. Чем понятнее description, тем точнее модель решает, когда его звать:

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Возвращает текущую погоду в указанном городе",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {"type": "string", "description": "Название города"},
                },
                "required": ["city"],
            },
        },
    }
]

Шаг 2–4: полный цикл

import json
from openai import OpenAI

client = OpenAI(base_url="https://ai-gatewey.ru/v1", api_key="sk-aigate-ваш_ключ")

def get_weather(city: str) -> str:
    # здесь настоящий запрос к погодному сервису
    return f"В городе {city} сейчас +18°C, ясно"

messages = [{"role": "user", "content": "Какая погода в Казани?"}]

# 1. модель решает вызвать инструмент
resp = client.chat.completions.create(
    model="anthropic/claude-sonnet-5", messages=messages, tools=tools,
)
msg = resp.choices[0].message
messages.append(msg)

# 2. выполняем вызванную функцию
for call in msg.tool_calls or []:
    args = json.loads(call.function.arguments)
    result = get_weather(**args)
    messages.append({
        "role": "tool",
        "tool_call_id": call.id,
        "content": result,
    })

# 3. модель формулирует финальный ответ
final = client.chat.completions.create(
    model="anthropic/claude-sonnet-5", messages=messages, tools=tools,
)
print(final.choices[0].message.content)

Практические советы

  • Ясные описания — модель выбирает инструмент по description; пишите его как инструкцию, а не как заголовок.
  • Строгая схема — перечисляйте required-поля и типы, чтобы аргументы приходили в предсказуемом виде.
  • Несколько инструментов — модель сама выберет подходящий или несколько; давайте ей осмысленный набор, а не один на всё.
  • Проверка на выходе — всегда валидируйте аргументы и оборачивайте вызов в обработку ошибок.

Список моделей с поддержкой инструментов и детали формата — на странице возможности function calling.

Частые вопросы

Модель сама выполняет мою функцию?

Нет. Модель только возвращает tool_calls — имя функции и аргументы. Выполняете её вы своим кодом и отправляете результат обратно. Это важно для безопасности: перед запуском вы контролируете и валидируете аргументы.

Что если модель вызвала несколько инструментов сразу?

В tool_calls придёт массив вызовов. Выполните каждый, добавьте по сообщению с ролью tool и соответствующим tool_call_id, затем отправьте всё обратно — модель учтёт все результаты в финальном ответе.

Все модели поддерживают function calling?

Не все — это отдельная возможность. Список поддерживающих моделей строится живьём из каталога на странице возможности function calling. Через единый API формат вызова одинаков для всех таких моделей.

Инструменты моделей через единый API

Начать бесплатно