13 октября 2026 г. · Анатолий Крылов, редактор Тераферма
ИИ-ассистент по документам компании на своей LLM: кейс стартапа
ИИ-ассистент по документам компании собирается из открытой LLM и поиска по базе (RAG) на одной арендованной видеокарте: команда из трёх разработчиков подняла Qwen 32B с поиском по 5000 регламентов за две недели и около 48 часов работы GPU. Точность на тестовом наборе из 150 вопросов выросла с 60% до 85–90%. Ниже: архитектура, выбор карты, сколько памяти и времени занимает каждый этап, что пошло не так и как повторить.
Это собирательный пример: команда придумана, но архитектура, время работы и цены — реальные, по тарифам Терафермы.
Три разработчика (назовём их командой «Склад-ИИ») делают внутренние инструменты для логистической компании. Заказчик пришёл с понятной болью: у компании около 5000 документов: регламенты складов, инструкции по оборудованию, требования перевозчиков, шаблоны договоров. Новый сотрудник неделями ищет ответы на простые вопросы вроде «какие документы нужны для приёмки опасного груза» или «как оформить возврат паллеты перевозчику».
Задача: ассистент, который отвечает на вопросы по документам компании и показывает, из какого документа взят ответ.
Почему не ChatGPT по API
Первая мысль — подключить API OpenAI. Команда отказалась по трём причинам:
- Оплата. Зарубежные API не принимают российские карты, а посредники добавляют 20–40% и риски блокировки.
- Документы. Заказчик не хотел отправлять внутренние регламенты в сторонний сервис.
- Контроль. Своя модель не изменится завтра без предупреждения, и её поведение можно настроить.
Решение: открытая модель на арендованной видеокарте. Команда выбрала Qwen 32B Instruct: хорошо понимает русский, умеет работать с длинным контекстом, лицензия разрешает коммерческое использование.
Важная оговорка, которую команда сразу обсудила с заказчиком: машины Терафермы находятся за пределами России. Поэтому для пилота использовали только обезличенные документы (регламенты, инструкции, техническую документацию) без персональных данных сотрудников и клиентов. Это требование 152-ФЗ, и о нём лучше договориться на старте.
Архитектура: RAG в четыре блока
Схема называется RAG — «генерация с поиском»:
- Подготовка документов. PDF и DOCX переводятся в текст и режутся на фрагменты по 500–800 слов с перекрытием.
- Векторный индекс. Каждый фрагмент превращается в вектор моделью эмбеддингов (bge-m3 хорошо работает с русским) и кладётся в векторную базу.
- Поиск. На вопрос пользователя находятся 5–8 самых близких по смыслу фрагментов.
- Ответ. Языковая модель получает вопрос и найденные фрагменты и формулирует ответ со ссылками на документы.
Модель крутится в vLLM — сервере, который отдаёт API, совместимый с OpenAI. Значит, интерфейс чата и код поиска можно писать так же, как под ChatGPT, просто указав другой адрес.
Выбор видеокарты
Команда посчитала память:
| Что | Объём |
|---|---|
| Qwen 32B в 4-битной квантизации (AWQ) | ≈ 19 ГБ |
| Контекст на 16 тысяч токенов для нескольких пользователей | 6–12 ГБ |
| Модель эмбеддингов bge-m3 | ≈ 2 ГБ |
| Итого с запасом | ≈ 30–35 ГБ |
На RTX 4090 с 24 ГБ модель запускается, но для нескольких одновременных пользователей и длинных документов тесно. Команда выбрала RTX A6000 с 48 ГБ за 66 ₽ в час. Для разработки и отладки кода хватало RTX 4090 за 48 ₽, а на A6000 переключались для тестов под нагрузкой.
Если бы понадобилась модель крупнее, например 70B, следующим шагом будет A100: от 97 ₽ в час. Проверить, сколько памяти нужно конкретной модели, можно в VRAM-калькуляторе.
Как шёл пилот
Неделя 1 — прототип. Обработка документов, индекс, первая версия ответов. Видеокарта нужна была 3–4 часа в день: включили утром, выключили вечером. Пока сервер остановлен, деньги не списываются.
Неделя 2 — качество. Самая долгая часть. Команда собрала 150 реальных вопросов от сотрудников склада и проверяла, на сколько ассистент отвечает правильно. Первая версия давала верный ответ примерно в 60% случаев. После трёх итераций (улучшения нарезки документов, переранжирования найденных фрагментов и инструкции модели «отвечай только по документам, иначе говори „не нашёл“») точность выросла до 85–90% на тестовом наборе.
Демо заказчику. Сотрудники задавали вопросы в чате, ассистент отвечал и показывал ссылку на пункт регламента.
Сколько стоил пилот
| Этап | Карта | Часы | Стоимость |
|---|---|---|---|
| Разработка и отладка | RTX 4090 | 25 | ≈ 1 200 ₽ |
| Тесты качества и нагрузки | RTX A6000 | 15 | ≈ 990 ₽ |
| Демо заказчику (2 дня по 4 часа) | RTX A6000 | 8 | ≈ 528 ₽ |
| Итого | 48 | ≈ 1 200 ₽ + 1 518 ₽ |
Вся работа видеокарты на пилот уложилась в несколько тысяч рублей. Свой сервер с картой на 48 ГБ стоил бы сотни тысяч, а API с посредником — сравнимые деньги за месяц, но без контроля над моделью и с отправкой документов наружу.
Сколько памяти и времени занимает каждый этап
| Этап | Что работает | Видеопамять | Время |
|---|---|---|---|
| Извлечение текста из PDF и DOCX | скрипты на Python | не нужна | на своём компьютере |
| Эмбеддинги 5000 документов | bge-m3 | 2–3 ГБ | 15–30 минут на RTX 4090 |
| Переранжирование найденных фрагментов | bge-reranker | 1–2 ГБ | доли секунды на вопрос |
| Генерация ответа | Qwen 32B AWQ в vLLM | 19 ГБ + контекст | 5–15 секунд на ответ |
Индекс строится один раз и сохраняется в файл. Команда держала его у себя и загружала на сервер вместе с моделью: это быстрее, чем пересчитывать эмбеддинги при каждом запуске. Пересчитывать индекс нужно только тогда, когда меняются документы.
Как повторить: пошагово
1. Соберите документы и тестовые вопросы до аренды. Извлеките текст, нарежьте на фрагменты, составьте 100–150 реальных вопросов с правильными ответами и ссылками на документ. Без тестового набора невозможно понять, стала система лучше или хуже после очередной правки.
2. Начните с RTX 4090. Для разработки хватает RTX 4090 с 24 ГБ: модель 32B в 4 битах помещается с коротким контекстом. Шаблон vLLM ставится при запуске машины, команды есть на странице запуска vLLM.
3. Поднимите модель. Например: vllm serve Qwen/Qwen2.5-32B-Instruct-AWQ --max-model-len 16384. Сервер отдаёт API, совместимый с OpenAI, и код чата не нужно переписывать. Какие версии Qwen подходят под русский язык, разобрано на странице запуска Qwen.
4. Постройте индекс и прогоните тестовые вопросы. Сохраните результаты в таблицу: вопрос, найденные фрагменты, ответ, правильно или нет.
5. Улучшайте поиск, а не модель. Нарезка, переранжирование, инструкция «отвечай только по документам». Каждую правку проверяйте на том же тестовом наборе.
6. Переходите на 48 ГБ для нагрузки. Когда качество устраивает, тест под несколькими пользователями делайте на RTX A6000: там хватает памяти на контекст для параллельных запросов.
7. Останавливайте сервер в конце дня. Данные на машине после остановки удаляются, поэтому код, индекс и логи держите в git и своём хранилище.
Что пошло не так
Таблицы в PDF ломались при извлечении. Требования перевозчиков были свёрстаны таблицами, и после извлечения текста строки перемешивались. Модель получала обрывки вроде «3 паллеты 48 часов опасный» и отвечала неверно. Помог отдельный разбор таблиц: каждую строку превращали в предложение «Для опасного груза срок приёмки — 48 часов».
Старые версии регламентов. В базе лежали три версии одного регламента за разные годы, и поиск иногда находил устаревшую. Команда добавила к каждому фрагменту дату документа и при поиске оставляла только последнюю действующую редакцию.
Ответы с вкраплениями другого языка. Изредка модель вставляла в русский ответ слово на английском или китайском. Явная инструкция отвечать только по-русски и снижение температуры генерации убрали проблему почти полностью.
Что команда узнала на практике
Качество решает поиск, а не модель. Половина неправильных ответов была из-за того, что поиск находил не тот фрагмент. Лучшая нарезка документов дала больше, чем замена модели на более крупную.
Модель должна уметь сказать «не знаю». Без явной инструкции она уверенно придумывала ответы на вопросы, которых нет в документах. Для внутреннего ассистента это опаснее, чем честное «не нашёл».
Поминутная оплата меняет привычки. Команда завела правило: последний, кто уходит, останавливает сервер. Модель и индекс хранили у себя и заливали заново при запуске — это 5–10 минут.
Сколько будет стоить эксплуатация
После пилота заказчик спросил главное: сколько будет стоить ассистент каждый месяц. Команда посчитала два режима: только в рабочее время (8 ч × 22 дня = 176 часов) и круглосуточно (720 часов).
| Карта | Память | Рабочие часы, месяц | Круглосуточно, месяц |
|---|---|---|---|
| RTX A6000 | 48 ГБ | ≈ 11 616 ₽ | ≈ 47 520 ₽ |
| A100 | 80 ГБ | ≈ 17 072 ₽ | ≈ 69 840 ₽ |
Цены в каталоге следуют за рынком, и соотношение между картами меняется. Перед запуском в работу сравните актуальные тарифы: если A100 с 80 ГБ стоит не дороже A6000, её стоит брать: запас памяти позволит увеличить контекст и число одновременных пользователей без смены карты.
Для внутреннего ассистента склада круглосуточный режим не нужен: смены работают днём, и сервер можно включать скриптом утром и останавливать вечером. Это сокращает счёт примерно в четыре раза по сравнению с работой 24/7.
Что дальше
Для промышленной эксплуатации с данными сотрудников команда планирует перенести систему на сервер в России, этого требует закон о персональных данных. Пилот на арендованной видеокарте позволил дёшево проверить идею, показать заказчику работающий прототип и посчитать, какая мощность понадобится в продакшене.
Кому подойдёт
- Стартапам и студиям разработки, которые делают ИИ-продукты и хотят проверить идею без закупки железа.
- Компаниям с базами знаний (техподдержка, юристы, склад, производство), которым нужен поиск по документам.
- Разработчикам, которые хотят попробовать открытые LLM: Qwen, Llama, DeepSeek, — прежде чем решать, где их держать постоянно.
Не подойдёт для промышленной работы с персональными данными на зарубежных машинах: это запрещает 152-ФЗ. И не стоит начинать с RAG, если документов меньше нескольких десятков: их проще целиком передать модели в контексте, без индекса и поиска.
Начать можно с шаблона vLLM: он ставится одной кнопкой при запуске сервера в каталоге. А как запустить конкретные модели, рассказано в статьях про Llama на арендованной видеокарте и DeepSeek R1.