Инструменты (tools) и их вызов
LLM генерирует текст, и больше ничего. Она не может открыть файл, выполнить команду или отправить запрос в сеть. Всё, что агент «делает», происходит через механизм вызова инструментов (tool calling, также function calling). Это фундамент агентности, и понимать его полезно даже тем, кто никогда не заглянет под капот.
Как работает вызов инструмента
Заголовок раздела «Как работает вызов инструмента»Идея простая. Харнес (agent harness) заранее сообщает модели: «тебе доступны такие-то действия, вот их названия и параметры». Дальше модель в любой момент может вместо обычного текстового ответа вернуть структурированный запрос: «выполни действие X с параметрами Y».
Например, вместо ответа «посмотрите в файле config.py» модель возвращает примерно такое:
{ "tool": "read_file", "arguments": { "path": "src/config.py" }}Важно понимать: модель ничего не выполняет. Она лишь просит. Харнес получает этот запрос, проверяет разрешения, реально читает файл и возвращает его содержимое модели как следующее сообщение. Для модели результат инструмента — просто ещё один кусок текста в диалоге.
Современные модели специально обучены пользоваться инструментами: выбирать подходящий, правильно заполнять параметры, разбирать результаты, в том числе сообщения об ошибках. Именно этот навык, а не «общая эрудиция», во многом отличает модели, из которых получаются хорошие агенты.
Типовой набор инструментов кодинг-агента
Заголовок раздела «Типовой набор инструментов кодинг-агента»Конкретный список зависит от харнеса, но ядро почти всегда одно:
- Чтение файлов: открыть файл целиком или фрагмент по номерам строк.
- Запись и правка файлов: создать файл или точечно заменить фрагмент в существующем.
- Поиск: по имени файла и по содержимому (обычно grep-подобный). Для агента это главный способ ориентироваться в незнакомом репозитории.
- Запуск команд в терминале: сборка, тесты, линтер, git, любые утилиты проекта. Самый мощный и самый рискованный инструмент.
- Веб-поиск и чтение страниц: свежая документация, описания ошибок, changelog библиотек.
Дополнительно харнесы дают инструменты запуска субагентов, работы со списком задач, а через MCP-серверы список расширяется до Jira, браузера, баз данных; об этом на страницах Субагенты и расширения и MCP-серверы.
Цикл: вызов → результат → контекст → следующее решение
Заголовок раздела «Цикл: вызов → результат → контекст → следующее решение»Один вызов инструмента — это один шаг агентного цикла. Складываются они так:
- Модель решает, что ей нужно, и возвращает запрос на вызов инструмента.
- Харнес выполняет действие и получает результат: содержимое файла, вывод команды, список найденных совпадений.
- Результат добавляется в контекст, в историю диалога, которую модель видит.
- Модель смотрит на пополнившийся контекст и принимает следующее решение: ещё один вызов, серия вызовов или текстовый ответ вам.
Так задача «почини тест» разворачивается в цепочку: запуск теста → чтение ошибки → поиск нужного кода → чтение файла → правка → повторный запуск. Каждое звено цепочки — это вызов инструмента, и каждое следующее решение модель принимает, глядя на реальные результаты, а не на свои предположения.
Отсюда же и главный механизм самокоррекции: ошибка исполнения (упавшая сборка, «file not found», красный тест) возвращается модели как обычный результат, и она пробует иначе. Агент, у которого есть быстрый способ проверить себя (тесты, компилятор, линтер), ошибается заметно реже, точнее, быстрее ловит собственные ошибки.
Разрешения: не все инструменты одинаково опасны
Заголовок раздела «Разрешения: не все инструменты одинаково опасны»Инструменты сильно различаются по цене ошибки:
- Чтение и поиск безопасны для проекта: испортить ничего нельзя. Их харнесы обычно разрешают без подтверждений.
- Запись файлов уже изменяет состояние, но в git-репозитории всё обратимо: правки видны в diff и легко откатываются.
- Запуск команд потенциально необратим.
rm -rf,git push --force, миграция боевой базы, деплой: команда исполняется в вашей реальной системе с вашими правами. - Сеть — двойной риск: агент может и отправить наружу лишнее, и получить извне вредоносные инструкции, спрятанные в тексте страницы (prompt injection).
Поэтому харнесы спрашивают подтверждение перед опасными действиями и позволяют настраивать правила: эти команды можно всегда, эти нельзя никогда, а про остальные спрашивай. Это не бюрократия, а страховка: модель может ошибиться в решении, а харнес не даст ошибке стать необратимой. Как выстроить разумные правила, рассказано на странице Безопасность и приватность.
Результаты инструментов расходуют контекст
Заголовок раздела «Результаты инструментов расходуют контекст»Есть неочевидное следствие пункта «результат добавляется в контекст»: всё, что агент прочитал и запустил, занимает место в контекстном окне (context window), то есть в жёстком лимите на объём того, что модель видит одновременно.
Прочитал файл на две тысячи строк, и эти строки теперь в контексте. Запустил тесты с многословным выводом, и вывод там же. За длинную сессию результаты инструментов легко становятся основной массой контекста, вытесняя важное: постановку задачи, договорённости, ранние решения.
Практические следствия:
- Агент, который ищет точечно и читает фрагментами, работает дольше и стабильнее агента, который «на всякий случай» читает всё подряд.
- Шумные команды (тесты с подробным логом, вывод больших JSON) стоит запускать с фильтрами и тихими флагами.
- Затянувшуюся сессию иногда полезнее начать заново с короткой выжимкой, чем продолжать на замусоренном контексте.
Подробнее о том, как устроено контекстное окно и почему это главный дефицитный ресурс агента, рассказано на странице Токены и контекстное окно.
Что дальше
Заголовок раздела «Что дальше»- Скилы: как передать агенту процедуры и регламенты вашей команды.
- Токены и контекстное окно: ресурс, который расходуют инструменты.