Локальный ИИ-помощник без интернета
Заказчик встретил меня словами: «Ребята, всё круто, но наружу — ни байта». За соседней дверью сидела служба безопасности, а за ней — режимный отдел. Никакого облака, никакого GigaChat и никакого VPN. Только их стойка, их сеть и их правила. Задача при этом простая: инженеру нужен помощник, который быстро найдёт пункт регламента, подскажет параметры и покажет, где в 1С лежит нужная деталь. Классическая работа с ИИ-агентами, только без единого запроса в интернет.
Так появился проект, который теперь люблю показывать всем, кто спрашивает, как сделать агента, живущего полностью на железе заказчика. Ниже — история, как я это делал, где споткнулся и что в итоге получилось.
Почему облако отпало сразу
Сначала я предложил привычный вариант: GigaChat Pro в приватном сегменте, бэкенд рядом, 152-ФЗ прикрыт. Заказчик выслушал и покачал головой. Дело было не в законе. Часть документации имела собственный гриф, и трафик наружу не должен был идти вообще — даже до российского провайдера.
Локальный агент звучит красиво, но за ним сразу встаёт куча вопросов. Какая модель влезет в их железо? Как её обслуживать? Что делать, если она начнёт фантазировать? И главное — будет ли от неё реальная польза инженеру?
Первый подход: «возьмём модель побольше»
Первая версия была наивной. В стойке нашлась карта на 48 ГБ, и я решил, что этого хватит на Qwen 72B в кванте. Развернули, попробовали — и приуныли.
Модель отвечала, но запросы тянулись по десятку секунд, а два инженера подряд её уже клали. Регламенты она обобщала слишком вольно: путала пункты, придумывала номера приложений. Для помощника, к которому приходят с вопросом «какой момент затяжки», такое поведение — приговор.
Отступил и пересобрал подход: не «возьмём модель побольше», а «возьмём модель поменьше и построим вокруг неё нормальную обвязку».
Второй подход: T-Lite и MCP-сервер
Взял T-Lite от Т-Технологий — модель, которая хорошо работает на паре карт попроще, отлично держит русский и заточена под инструкции. Прикрутил к ней свою обвязку и MCP-сервер, который стал единственным способом добраться до внутренних систем.
Логика простая: модель ничего не «знает» про регламенты. Она умеет только рассуждать и звать инструменты. А инструменты — это MCP-сервер, который живёт на том же сервере и умеет искать по базе документов, лезть в 1С и тянуть чертежи. Если модель говорит «момент затяжки такой-то», значит, она получила это из инструмента, а не придумала.
Такой агент оказался полезнее большой модели без обвязки. Реже фантазирует, отвечает быстрее и признаётся, когда не знает.
Что дала свежая спецификация MCP
Первая версия жила на старой MCP и я намучилась с сессиями. У инженеров смена короткая, вопросы разовые. Сервер копил контекст и потихоньку деградировал.
Летний релиз со stateless-режимом снял эту боль. Каждый запрос стал самостоятельным, результаты кэшируются на сервере. Для локального агента это подарок: не нужно городить хранилище сессий на редких HDD.
Протокол упростил и добавление новых инструментов. Появилась задача «ещё и график дежурств смотреть» — поднял отдельный MCP-модуль, зарегистрировал в шлюзе, и агент сразу видит новый инструмент.
Где грабли лежали особенно больно
Первые недели ловил новые беды каждый день.
Модель любила «додумывать». Пришлось жёстко прописать в промпте: если инструмент вернул пусто — пиши «не нашёл в базе».
Поиск тоже подвёл. Классический RAG на pgvector часто смешивал пункты из разных документов. Отказался от идеи, что поиск обязателен для каждого запроса, и дал модели самой решать, когда звать инструмент. Это снизило нагрузку на GPU.
Ещё одна забавная проблема: инженеры писали агенту как в мессенджер. Добавил лёгкую нормализацию на входе — и попадание в ответы сразу выросло.
Что изменилось у инженеров
Раньше мастер мог полчаса искать пункт в регламенте или звонить в техотдел. Теперь открывает окно агента, задаёт вопрос и получает ответ со ссылкой на конкретный пункт. Через пару недель перестали перепроверять всё подряд — ссылка на первоисточник стала привычной.
Появился и побочный эффект. Служба качества посмотрела логи и увидела, какие пункты спрашивают чаще всего. Оказалось, что одни написаны непонятно, а другие устарели. Регламенты пошли на пересмотр.
Что я вынес для себя
Как сделать ИИ-агента, который живёт в закрытом контуре и приносит пользу? Три правила, которые теперь для меня стали основными:
- Не гнаться за размером модели. Небольшая российская модель с хорошей обвязкой часто обгоняет большую без неё.
- Строить всё вокруг MCP. Завтра инструментов будет пять, и ты будешь рад, что не привязал агента к одной интеграции.
- Заставлять агента говорить «не знаю». Локальный агент, который признаётся в неведении, полезнее облачной модели, которая уверенно врёт.
Если у тебя есть данные, которые не хочется показывать даже провайдеру связи — может, пора посмотреть, что реально влезает в твою собственную стойку?
