ИИ-агент над «Гермесом»: как я накрутил платформу агентов на легаси-ERP
Кладовщик открывает «Гермес», копается в справочниках, ищет партию, сверяет остатки, потом прыгает в заказы — и всё это ради ответа менеджеру «есть ли ещё двадцать метров кабеля». На словах минута, на деле — пять окон и матюки. С этой картинки и началась история про моего ИИ-агента.
Клиент торгует стройматериалами и электрикой. Учёт живёт в «Гермесе» уже больше десяти лет, рядом 1С, всё склеено самописными обменами. Менять систему нельзя: двадцать человек привыкли к своим формам, отчёты и ночные регламенты завязаны намертво. Задача была простой — оставить всё как есть, но дать возможность спрашивать данные человеческим языком.
Почему просто скормить LLM таблицы не работает
Сначала я попробовал очевидный путь: дал модели описание таблиц и пару десятков примеров. Модель бодро лепила SQL, который выглядел нормально, но иногда лезла в несуществующие поля или путала контрагентов с сотрудниками. На вопрос про алюминиевый кабель выдавала цифру, взятую из воздуха.
Проблема была не в модели, а в подходе. Один вызов LLM — это не платформа. Нужна была обвязка из надёжных инструментов, а модель должна только выбирать инструмент и заполнять параметры.
Я переделал архитектуру. В центре оркестратор, вокруг него MCP-серверы: остатки, движения, цены, заказы. Каждый сервер знает только свой кусок схемы и отвечает строго на определённые запросы. Модель больше не пишет SQL — она вызывает инструмент.
Как я собрал агента под капотом
MCP-серверы вынес на FastAPI. Каждый — тонкая обёртка над заранее написанными и проверенными запросами к базе «Гермеса». Никакого свободного SQL. Модель может попросить «дай остатки по номенклатуре X на складе Y на дату Z» и получит либо цифры, либо понятный отказ.
Ошибки стали честнее. Раньше модель могла вернуть красивый, но бессмысленный ответ. Теперь либо валидатор параметров отсекает фигню, либо агент говорит «такого склада нет, вот список реальных».
Сверху поставил простой маршрутизатор. Лёгкие вопросы идут сразу в инструмент, сложные — в сценарий с несколькими вызовами. Это сильно сэкономило токены.
Какую модель я выбрал
Данные коммерческие, часть контрактов требует российского контура. Зарубежные API отпали. Остались GigaChat Pro, YandexGPT и локальные варианты.
Прогнал все три на одних и тех же запросах. GigaChat Pro лучше держал многошаговые диалоги. YandexGPT иногда терял контекст на четвёртом ходу. T-lite подошёл только для совсем узких задач.
В итоге оставил GigaChat Pro на диалоговый слой и лёгкую модель для маршрутизации. Получилось и по качеству нормально, и счёт за токены предсказуемый, и 152-ФЗ закрыт.
Как агент ведёт себя, когда не уверен
Если пользователь спрашивает «сколько медного кабеля», а таких позиций сотни, агент теперь честно уточняет: «нашёл двенадцать групп, назови сечение или марку». Лучше переспросить, чем выдать красивую, но ложную цифру.
Все ответы с цифрами содержат ссылку на источник — артикул, партию, дату. Когда что-то не сходится, разбираться можно за минуты.
Что поменялось у клиента
Через пару месяцев менеджеры перестали дёргать кладовщика по мелочам — пишут агенту в чат. Кладовщик наконец занимается своей работой. Руководитель смотрит актуальные цифры, когда нужно, а не ждёт вечернюю сводку.
Час беготни между окнами теперь укладывается в пару минут в мессенджере. Ошибок переноса цифр руками стало меньше. Сам «Гермес» остался нетронутым.
Что я вынес для себя
- Платформа ИИ-агентов вокруг легаси — это не про замену интерфейса, а про альтернативный доступ.
- Чем конкретнее инструменты, тем меньше требований к модели.
- Доверие растёт не от уверенных ответов, а от честных отказов и уточнений.
Главный вопрос после таких проектов: где ещё в компании стоят системы, которые все ненавидят открывать, но которые проще не менять? Скорее всего, туда и стоит поставить следующего агента.
