Как работает Function Calling
Function calling — это протокол взаимодействия между LLM и внешними системами. Модель получает описание доступных инструментов и в процессе генерации ответа решает, нужно ли вызвать один из них:
1. Разработчик описывает функции:
search_products(query: string, category?: string) → Product[]
check_inventory(product_id: string) → {in_stock: boolean, qty: int}
add_to_cart(product_id: string, qty: int) → CartItem
2. Пользователь: «Найди мне красные кроссовки Nike до 10 000 рублей»
3. Модель → возвращает вызов:
{"function": "search_products", "args": {"query": "красные кроссовки Nike", "max_price": 10000}}
4. Клиент вызывает API → получает список товаров → передаёт модели
5. Модель генерирует ответ пользователю с реальными данными
Этот цикл может повторяться несколько раз: модель последовательно вызывает функции, уточняет информацию и в итоге даёт финальный ответ.
Function Calling в e-commerce
В торговом контексте function calling открывает принципиально новые сценарии взаимодействия. Примеры инструментов AI-ассистента для магазина:
| Функция | Что делает | Тип действия |
|---|---|---|
search_products |
Семантический поиск по каталогу | Read |
get_product_details |
Полная информация о товаре | Read |
check_inventory |
Наличие и количество | Read |
get_recommendations |
Персонализированные рекомендации | Read |
add_to_cart |
Добавление товара в корзину | Write |
apply_promo |
Применение промокода | Write |
initiate_checkout |
Запуск оформления заказа | Write |
Read-функции безопасны. Write-функции (особенно initiate_checkout) требуют явного подтверждения пользователем или human-in-the-loop контроля.
Structured Output и JSON Schema
Надёжный function calling требует строгой типизации. Описание функции в JSON Schema:
{
"name": "search_products",
"description": "Поиск товаров по запросу и фильтрам",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "Поисковый запрос"},
"category": {"type": "string", "description": "Категория товара"},
"max_price": {"type": "number", "description": "Максимальная цена в рублях"}
},
"required": ["query"]
}
}
Важно: Модели галлюцинируют аргументы функций, особенно для несуществующих параметров. Всегда валидируйте вывод модели перед реальным вызовом API.
Параллельный и последовательный вызов
Современные модели поддерживают вызов нескольких функций за один «ход». Это важно для составных запросов:
- Параллельно: наличие + цена + отзывы по одному товару
- Последовательно: сначала поиск товара, затем (по product_id) проверка наличия
Параллельный вызов снижает latency ответа, но требует управления зависимостями между вызовами.