Диагностика Mock-интервью
Главная · Агенты и инструменты

Tool calling: как модель вызывает инструменты

Сама по себе LLM умеет ровно одно — генерировать текст. Tool calling (вызов инструментов) даёт ей «руки»: возможность попросить внешний код сходить в API, базу данных или файловую систему. Это фундамент всех агентов, и на собеседовании AI-инженера про него спрашивают почти всегда.

Интуиция

Представь очень эрудированного консультанта, запертого в комнате без окон. Он блестяще рассуждает, но не знает, какая погода на улице, и не может нажать ни одной кнопки. Всё, что он может, — писать записки. Tool calling — это договорённость: если консультант напишет записку строго определённого формата («вызови get_weather для Москвы»), то ассистент за дверью — ваш код — исполнит просьбу и просунет обратно листок с результатом. Консультант так и остаётся генератором текста; изменился только протокол общения.

Как это работает

Цикл tool calling состоит из четырёх шагов:

Современные модели умеют параллельные вызовы (parallel tool calls): в одном ответе — сразу несколько tool call, и ваш код может исполнить их одновременно. Классический пример — «погода в Москве и Питере»: один ответ модели, два вызова, два результата.

💡 Ключевая мысль Модель никогда ничего не исполняет — она только «просит» в формате JSON. Исполняет всегда ваш код, с вашими правами и вашей ответственностью. Поэтому и валидация, и безопасность, и обработка ошибок — на стороне разработчика.

Качество описаний = качество вызовов

Модель выбирает инструмент и заполняет аргументы, глядя только на имя, описание и схему. Описание тула — это промпт-инжиниринг: «get_data» с пустым описанием почти гарантирует мусорные вызовы, а «возвращает текущую погоду по названию города; используй для любых вопросов о погоде» — осмысленные. Хорошая практика: описывать не только «что делает», но и «когда использовать», приводить формат аргументов и типовые значения.

Родственная механика — structured output / JSON mode: модель принуждают выдавать строго валидный JSON по заданной схеме, но без последующего исполнения. По сути tool calling — это structured output, к которому договорились приделать исполнение: обе механики опираются на одну способность модели генерировать текст по схеме (часто с constrained decoding — маскированием токенов, нарушающих грамматику).

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

MCP (Model Context Protocol) — открытый стандарт подключения инструментов и источников данных к моделям. Вместо того чтобы писать интеграцию под каждую пару «приложение × тул», сервер один раз описывает свои инструменты по протоколу, и любой MCP-совместимый клиент может их использовать. Это стандартизация транспорта и описаний, сама механика вызова остаётся той же.

⚠️ Подводный камень Раз исполняет ваш код — все риски тоже ваши. Тул «выполнить произвольную shell-команду» без ограничений превращает любую prompt injection (внедрённую инструкцию в данных) в удалённое выполнение кода. Права инструментов должны быть минимально необходимыми, опасные действия — за подтверждением человека.
🎤 На собеседовании
  • «Модель сама исполняет инструменты?» — нет, она генерирует структурированный запрос; исполнение — всегда на стороне вашего кода. Это главный вопрос-ловушка.
  • «Как улучшить точность вызовов?» — меньше тулов, подробные описания «что и когда», строгие JSON-схемы, возврат ошибок валидации модели для повторной попытки.
  • «Что такое MCP и зачем он?» — стандарт описания и подключения тулов: пишем сервер один раз, используем из любого клиента.
  • «Чем tool calling отличается от JSON mode?» — обе механики про генерацию по схеме; tool calling добавляет цикл «вызов → исполнение → результат в контекст → продолжение».