Агентная система для тех, кто вкатывается: собираем агента поддержки от одного файла до Temporal, саги и circuit breaker
Клиент пишет в поддержку: «Посылка не пришла, верните деньги». Агента, который на это ответит, можно написать за вечер. Цикл из части 1, три инструмента, и в демо он отвечает правильно. А потом...
Клиент пишет в поддержку: «Посылка не пришла, верните деньги». Агента, который на это ответит, можно написать за вечер. Цикл из части 1, три инструмента, и в демо он отвечает правильно. А потом процесс перезапускается посреди возврата, провайдер модели ложится на полчаса, клиент нажимает «отправить» дважды. И оказывается, что агент это малая часть системы.
Это третья, последняя часть серии. В первой разобрали агентный цикл, токены и кэш. Во второй собрали практики: ретраи, идемпотентность, саги, Temporal, подтверждение человеком, проверки. Здесь соберём из них одну систему. Начнём с агента в одном файле и на каждом шаге будем упираться в проблему. Каждая проблема добавит компонент, а схема системы будет расти вместе с текстом. Код, как и раньше, псевдокод: имена на английском, как в настоящем Python, комментарии на русском.
Схемы рисую по C4. Это способ рисовать архитектуру с разным приближением, как карту. Context показывает систему коробкой среди людей и внешних систем. Container раскрывает её на приложения и хранилища. Component раскрывает одно приложение на части. Первые два уровня авторы C4 советуют всем командам, третий только когда он что-то добавляет. Контейнер в C4 это не Docker, а всё, что должно работать, чтобы работала система: сервис, база, очередь.
Агент в одном процессе теряет всё при перезапуске. Обращение и историю диалога храните в базе, а сам процесс обработки ведите в Temporal: workflow на обращение, Workflow ID равен id диалога.
У Temporal своя база, и бизнес-данные в ней не хранят. Воркеры с вашим кодом запускаете вы, сервис Temporal их не выполняет.
Ретрай и circuit breaker разные вещи. Ретрай повторяет временный сбой, circuit breaker перестаёт звать сервис, который лежит. Его место перед провайдером модели, в LLM-шлюзе.
Модель решает, деньги двигает код: возврат идёт сагой, где возврат денег это точка невозврата. Крупные суммы одобряет оператор.
Не всё должен делать агент. Роутер на маленькой модели отправляет FAQ в один вызов, «где заказ» в цепочку, и только спорный возврат в агента.
Добавляйте компонент, когда появилась боль, которую он лечит. Чек-лист в конце.
Начнём с того, что умеем после части 1. Скрипт держит историю диалога в памяти, вызывает модель и выполняет инструменты, которые она попросила. Инструментов три: track_order_status смотрит статус заказа у службы доставки, get_refund_policy достаёт правила возврата, refund_payment возвращает деньги. Похожий track_order_status есть в гайде OpenAI по агентам, где пример тоже про поддержку.
Про обиженных криэйторов, или Кто кому должен за нейросеть
Читаю очередную волну возмущения. Владельцы сайтов, художники, музыканты, фотографы — все те, кого объединяет емкое слово «криэйторы», — требуют сатисфакции. ИИ, видите ли, обучался возможно…
AMD объявила о начале поставок первых чипов на Zen 6 — они оказались вдвое быстрее Zen 5 в ряде тестов
AMD раскрыла дополнительные технические подробности об архитектурах Zen 6 и Zen 6c, которые лежат в основе процессоров EPYC 9006 Venice шестого поколения. Новые процессоры призваны составить…
Как агент улучшил себя, не тронув ни одного веса: разбираем The Trinity
26 октября на arXiv вышла работа The Trinity: Capability-Driven Recursive Self-Improvement for Multimodal Agents. Авторов 21, на странице Hugging Face указан Национальный университет Сингапу…
Поймай меня, если с прокси
Фрэнк Эбегнейл был гениальным мошенником за счет своей феноменальной наблюдательности и досконального (причем, приобретенного самостоятельно) знания чековых операций. То, что нам втюхивают с…