Агенты и tool-use
Агенты - LLM, которым дали руки, и вопросы тут про ответственность инженера: лимиты, идемпотентность, подтверждения. Красивую демку соберёт любой; надёжность - то, что проверяют.
// Ключевая рамка: модель решает «что дальше», твой код решает «что ей можно».
Цикл агента и tool calling
Агент - LLM в цикле ReAct: рассуждение → вызов инструмента → наблюдение результата → следующее действие. Модель планирует, код исполняет.
Tool calling: инструменты описываются схемами, модель возвращает структурный вызов. Валидация аргументов и обработка ошибок - на твоей стороне: свободные невалидируемые аргументы дают мусорные вызовы вместо честных ошибок схемы.
// Хорошая ошибка инструмента - тоже интерфейс: агент прочитает сообщение и поправится; молчаливый провал заведёт его в тупик.
- ReAct
- цикл reasoning → action → observation
- tool calling
- структурные вызовы функций по схеме; валидация - твоя
Планирование и память
Сложные задачи - через декомпозицию на подзадачи; длинные цепочки без чекпоинтов копят ошибки как снежный ком. Критик или шаг рефлексии («проверь свой план») заметно повышают надёжность.
Память: контекст - рабочая, всё долговременное - внешнее (векторное хранилище, заметки агента) и подмешивается retrieval'ом по мере надобности.
// Мультиагентность (роли, критик-исполнитель) помогает на сложных пайплайнах, но умножает цену и точки отказа. Начинай с одного агента с хорошими инструментами.
Надёжность - главный боттлнек
Обязательный минимум: лимит числа шагов (иначе зацикливание на неудачном инструменте и счёт за токены), идемпотентные инструменты (повторный вызов не удваивает эффект), подтверждение человеком для необратимых действий - письма, платежи, delete.
Оценка агентов - end-to-end: success rate на наборе сценариев с критериями успеха. «Красота рассуждений» и удачные демки - не метрика.
// Права инструментов это и есть безопасность агента: чего в наборе нет, того он не сделает. Системный промпт «будь осторожен» - не контроль доступа.
- идемпотентность
- повторный вызов инструмента не меняет результат
- human-in-the-loop
- подтверждение человеком необратимых действий
Как отвечать: «Как сделать LLM-агента надёжным для прода?»
Ограничениями со стороны кода, не промптом. Лимит итераций против зацикливания; инструменты со строгими схемами аргументов и внятными сообщениями об ошибках - агент умеет поправляться по ним; идемпотентность, чтобы ретрай не удвоил эффект; для необратимых действий - подтверждение человеком. Права даю по минимуму: чего нет в наборе инструментов, того агент не сделает. И меряю не демками, а success rate на наборе сценариев - прогон на каждое изменение промпта или модели.
Все контуры надёжности со стороны системы + правильная метрика. Ответ инженера, который отвечает за последствия, а не за впечатление.
На чём валят
- −Необратимые действия без подтверждения - вопрос времени, когда агент воспользуется ими не так.
- −Без лимита итераций - зацикливание и счёт за токены.
- −Инструменты со свободными аргументами - мусорные вызовы вместо ошибок схемы.
- −Оценка демками вместо сценариев с критериями успеха.
Проверьте себя
Пять вопросов из банка по этой подтеме. Всего их 11, остальные разбираются в тренажёре.
- Когда агент с инструментами оправдан, а когда лучше один вызов LLM?A)Агент с инструментами лучше одиночного вызова: чем больше в нём шагов, тем выше итоговое качествоB)Агент — для многошаговых задач с внешними данными/действиями; для простого ответа один вызов дешевле и надёжнееC)Один вызов подходит для перевода текстаD)Разницы нет, выбор чисто стилистический
показать ответ и разбор
+B)Агент — для многошаговых задач с внешними данными/действиями; для простого ответа один вызов дешевле и надёжнее// разбор: Агент оправдан, когда задача требует внешних данных, действий или ветвления на несколько шагов (найти → посчитать → записать). За это платят латентностью, стоимостью (много вызовов) и хрупкостью (ошибка на шаге ломает цепочку). Если задача решается одним ответом — один вызов дешевле, быстрее и предсказуемее. Дисциплина: минимально достаточная агентность, а не «агент ради агента».
- Частый провал tool-use агента в проде — это...A)Модель физически не способна вернуть корректно структурированный JSON-вызов в этом случаеB)Инструменты исполняются мгновенно и без ошибокC)Агент не умеет прочитать текст ответа инструментаD)модель зовёт не тот инструмент или с кривыми аргументами, либо зацикливается на повторных вызовах
показать ответ и разбор
+D)модель зовёт не тот инструмент или с кривыми аргументами, либо зацикливается на повторных вызовах// разбор: Реальные провалы: неверный выбор инструмента, галлюцинированные/невалидные аргументы (не по схеме), зацикливание (повторяет вызов, игнорируя результат), плохая обработка ошибки инструмента. Лечат: строгие схемы + валидация аргументов, повтор с сообщением об ошибке модели, лимит шагов/бюджет, few-shot удачных вызовов, узкий набор инструментов. Вернуть JSON модель умеет — проблема в семантике вызова.
- Когда мульти-агентная схема (несколько специализированных агентов) оправдана против одного агента?A)Когда задача делится на роли с раздельными инструментами/контекстом; иначе — лишняя координация без выгодыB)Чем больше специализированных агентов вовлечено в задачу, тем выше её итоговое качествоC)Когда у системы нет доступа к инструментамD)Мульти-агент нужен для задач перевода
показать ответ и разбор
+A)Когда задача делится на роли с раздельными инструментами/контекстом; иначе — лишняя координация без выгоды// разбор: Мульти-агент выигрывает, когда задача естественно распадается на роли с разными инструментами, промптами или контекстами (планировщик/исполнитель/критик), давая изоляцию и специализацию. Но каждый агент — это координация, передача контекста, лишние вызовы и новые точки отказа. Для монолитной задачи один хорошо оснащённый агент проще и дешевле. Правило то же: минимально достаточная сложность.
- Длинный агентный диалог упирается в переполнение контекста. Что из перечисленного НЕ решение?A)Суммаризация ранней истории в компактную сводкуB)Вынос ключевых фактов во внешнюю память (векторную или структурную) с подтягиванием нужного по запросуC)Обрезка истории до скользящего окна последних сообщенийD)Полагаться на то, что модель сама бесконечно помнит весь диалог в своих весах
показать ответ и разбор
+D)Полагаться на то, что модель сама бесконечно помнит весь диалог в своих весах// разбор: Контекст конечен, и в весах модель диалог не «помнит» — между вызовами состояние держит приложение, целиком передавая историю в промпт. Управляют бюджетом: суммаризация старого, скользящее окно, вынос фактов во внешнюю память с retrieval по нужде, компрессия. Ошибка — рассчитывать, что модель сама сохранит всё: за пределами окна информация просто не подаётся и «забывается».
- У агента есть инструменты, меняющие состояние (удалить, оплатить, отправить). Главная предосторожность?A)Дать полный автономный доступ ко всем действиям — так быстрее и удобнее пользователюB)Запретить агенту инструментыC)Ограничить права, валидировать аргументы и требовать подтверждения человека для необратимых действий (least privilege, human-in-the-loop)D)Просто попросить модель в промпте быть аккуратной
показать ответ и разбор
+C)Ограничить права, валидировать аргументы и требовать подтверждения человека для необратимых действий (least privilege, human-in-the-loop)// разбор: Модель вероятностна и уязвима к prompt injection, поэтому давать ей необратимые действия без страховки опасно. Принципы: least privilege (узкие права инструментов), валидация и санитайзинг аргументов, идемпотентность/лимиты, подтверждение человеком (human-in-the-loop) или dry-run для разрушительных операций, аудит-лог. Просьба «будь осторожен» — не контроль: инъекция её перебьёт. Тотальный запрет убивает пользу — нужен баланс.
дальше
Теорию прочитали. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.