Мы удалили AI-менеджера для маркетплейсов и написали заново
Мы уже рассказывали, как собрали AI-менеджера маркетплейсов на регулярках, а потом пересадили его на агента и тут же обложили ограничениями: восемь шагов на ход, узкие инструменты с лимитами, урезанные данные, запись в кабинет только после «да» владельца.Мы обещали поделиться результатами. Делимся: через четыре дня после запуска мы удалили своего агента целиком. Ниже — что показали тесты, почему не стали чинить и что сделали вместо него.Что показали тесты
AI-менеджер для WB, Ozon и Маркета: отдали решения агенту и сразу его ограничили
Недавно мы рассказывали, как собрали AI-менеджера маркетплейсов на правилах : фраза проходит через регулярки, превращается в операцию из закрытого списка, операция идёт в API площадки. Модель там только помогала угадать операцию. Всё, что меняет кабинет, — только кнопкой владельца.Первые владельцы с ним поговорили. Ниже — что мы увидели в этих разговорах, почему переделали менеджера почти с нуля и почему новая версия получилась свободнее, но при этом вся в ограничителях.Что показали первые разговорыЛюди пишут не по списку.
ReAct-агент изнутри. Модель, инструменты и управляющий цикл
Как ответ языковой модели превращается в чтение файла, запуск команды или изменение кода? Разберем этот путь на четырех общих схемах, затем посмотрим реализацию на Python и схему работы агента на примере падающего теста. Для понимания кода достаточно знать Python, JSON и принцип HTTP-запроса. Агентные фреймворки здесь не понадобятся.Чем агент отличается от одного запроса к модели
Проверяю выбор функций и значения аргументов в ELM
Если вы подключаете к чату настоящие инструменты, нужно проверить два случая: когда вызов следует выполнить и когда ни один инструмент не подходит. Я сравнил два способа: модель сама пишет вызов или выбирает функцию и аргументы из готовых вариантов.Второй способ я исследую в собственной экспериментальной системе ELM — так я называю свой проект. Код предлагает варианты, нейросеть выбирает из них, а код собирает вызов. В проверяемом здесь режиме нейросеть не генерирует текст вызова.
Как сделать RAG-чат для сайта, который не выдумывает цены: пять решений из моего бота
С июня я делаю AI-чат для сайтов, который не выдумывает цены и не соглашается с клиентом во всём подряд. К пяти решениям из статьи я пришёл через ошибки.Зачем вообще ещё один чат-ботПо
Маскирование ПДн для LLM: метрика, которую не считает никто, и шесть шлюзов против живого агента
Это первая статья серии: измеряем, что происходит с LLM-агентом, когда шлюз замаскировал данные. Дальше разберём находки по чужим системам и то, что нашлось у нас.1. Зачем это меритьАгент поддержки получает: «Здравствуйте, я Кузнецова Дарья, телефон 8 935 747 66 22, проверьте заказ». До модели доходит «я <PERSON_1>, телефон <PHONE_NUMBER_2>», и она вызывает check_order(phone=…).Тут половина решений на рынке и ломается: инструменту нужен настоящий телефон, по <PHONE_NUMBER_2> заказ не найдётся. Шлюз обязан вернуть реальное значение в аргумент вызова ровно в той форме, в какой написала модель.
Каждый LLM-фреймворк описывает инструмент по-своему
Чтобы дать LLM доступ к своему коду, пишут инструменты (tools). Инструмент — это функция и всё, что модели нужно знать, чтобы её вызвать: имя, описание и схема аргументов.Потом те же инструменты приходится писать ещё раз. Первая версия сделана на tool() из AI SDK. В проекте появляется MCP-сервер, и инструменты переписывают под registerTool. Соседняя команда использует Genkit, и те же инструменты пишут в третий раз, через defineTool. Функции остаются прежними, меняется только обёртка.К тому же каждая обёртка привязана к своему фреймворку. tool() берётся из пакета ai, defineTool — метод экземпляра Genkit, registerTool
Строим продвинутый каркас для ИИ-агента
В основе базового agentic harness — простой цикл: LLM получает задачу, выбирает и вызывает инструмент, результат возвращается в контекст, после чего модель решает, какое действие выполнить следующим. Цикл продолжается, пока модель не решит, что задача выполнена.

