Назад к подготовке

Function calling и structured output в LLM-приложении

Как работает function calling и как добиться корректного structured output?

Ответить самому

Сначала сформулируйте ответ как на собеседовании, затем откройте разбор и оцените себя.

Загрузка

Короткий ответ

Модель генерирует tool call с именем функции и аргументами, приложение исполняет реальный код и возвращает результат в контекст. Structured output надежнее делать через JSON schema или constrained decoding.

Полный разбор

Function calling - это договор между моделью и runtime. Runtime сообщает модели список инструментов: название, описание, JSON schema аргументов. Модель не вызывает API сама; она генерирует структурированный вызов. Приложение валидирует аргументы, выполняет функцию, добавляет tool result в контекст и просит модель сформулировать финальный ответ.

Structured output можно получать prompt-инструкциями, но надежнее использовать provider-native JSON mode, schema validation или constrained decoding. В constrained decoding на каждом шаге запрещаются токены, которые нарушили бы грамматику или JSON schema. Это снижает риск невалидного JSON, но не гарантирует бизнес-смысл аргументов.

В production нужны retry на parse/validation errors, лимиты на tools, allowlist действий, логирование tool calls и защита от prompt injection через результаты инструментов.

Теория

LLM выбирает и форматирует действие, а приложение исполняет его и отвечает за безопасность, валидацию и side effects.

Типичные ошибки

  • Думать, что LLM сама ходит в базу или API.
  • Не валидировать аргументы tool call.
  • Полагаться только на текстовый prompt для строгого JSON.