В 09:40 оператор попросил помощника выяснить, почему заказ не доставлен. Чат написал убедительную версию про курьера, хотя не открыл ни заказ, ни трекинг. Агент в той же ситуации сначала читает состояние через инструменты, выбирает следующий шаг и проверяет результат. Если проверить нечем, перед нами всё ещё чат, только с более дорогим системным промптом.
Рабочее определение простое: агент это система, которая в цикле наблюдает состояние, принимает решение, вызывает инструменты и проверяет результат.
Минимальная формула:
observe → decide → act → verify → repeat/stopЕсли у системы нет инструментов, это не агент, а чат.
Если у системы нет проверки результата, это не агент, а генератор уверенных неприятностей.
Если у системы нет ограничений прав, это не агент, а инцидент безопасности в ожидании календарной даты.
Компоненты агента
- Goal — цель, которую надо достигнуть.
- State — текущее состояние мира или задачи.
- Planner — механизм выбора следующего шага.
- Tools — внешние действия: API, файлы, shell, браузер, CRM, почта.
- Memory — долговременные факты или рабочий контекст.
- Verifier — проверка результата действия.
- Policy — ограничения: что можно, что нельзя, где нужен человек.
- Audit log — запись того, что агент делал и почему.
Агент не обязан быть автономным
Самый опасный самообман: «агент» значит «пусть сам всё сделает».
В зрелых системах агент часто ограничен:
- может читать, но не писать;
- может предлагать действие, но не выполнять;
- может выполнять только safe tools;
- требует подтверждение для денег, писем, удаления данных, публикации;
- работает в sandbox;
- имеет лимит шагов, времени и бюджета.
Хороший агент не максимально свободен. Хороший агент достаточно свободен, чтобы быть полезным, и достаточно ограничен, чтобы не стать дорогой катастрофой.
Чеклист главы
- Вы можете назвать все восемь компонентов своего агента; отсутствующие — осознанное решение, а не забывчивость.
- У агента есть лимит шагов, времени и бюджета на задачу.
- Список инструментов минимален: каждый tool нужен для цели агента.
- Опасные действия (деньги, письма, удаление, публикация) требуют подтверждения человека.
- Каждый шаг агента пишется в audit log: что решил, что вызвал, что получил.
- Verifier существует и не является той же моделью, хвалящей саму себя без критериев.
Практикум
Задача 31.1 — агент-исследователь заказа. ⭑⭑
Постройте минимальный агент для типовой задачи поддержки: «разберись, почему заказ №X не доставлен». Инструменты (все — заглушки над фейковыми данными): get_order(id), get_delivery_status(order_id), get_payment_status(order_id), search_tickets(customer_id). Агент в цикле observe → decide → act → verify собирает картину и возвращает структурированный диагноз: причина, evidence, рекомендуемое действие.
Критерии приёмки:
- Loop реализован вами явно (while + выбор инструмента через tool calling), без агентских фреймворков — цель понять механику.
- Жёсткий лимит: максимум 6 шагов; при достижении — честный ответ «не смог разобраться» с накопленным evidence.
- Диагноз содержит только факты, полученные из инструментов; тест: уберите один инструмент — агент не должен «дорисовать» недостающие данные.
- Audit log позволяет воспроизвести всю траекторию: какие инструменты, с какими аргументами, в каком порядке и почему.
Подсказки:
- Заготовьте 5 сценариев фейковых данных: не оплачен, потерян курьером, неверный адрес, доставлен-но-клиент-не-увидел, данные противоречат друг другу. Последний — самый интересный.
- «Decide» — это просто очередной LLM-вызов со структурированным выходом:
next_action: tool_call | final_answer.
Задача 31.2 — сломать своего агента. ⭑⭑
Возьмите агента из 31.1 и целенаправленно найдите три способа заставить его вести себя плохо: зациклиться, потратить лишние шаги, дать уверенный диагноз без evidence. Затем закройте найденные дыры ограничениями, а не promt-заклинаниями «не зацикливайся».
Критерии приёмки:
- Задокументированы три поломки: вход → поведение → почему так произошло.
- Каждая закрыта механизмом: дедупликация повторных вызовов с теми же аргументами, обязательное поле
evidenceв схеме финального ответа, счётчик шагов. - Повторный прогон тех же входов показывает исправленное поведение.
Подсказки:
- Самый простой способ зациклить агента — противоречивые данные в двух инструментах. Что он делает, когда
payment=ok, аdeliveryговорит «не оплачен»?