От проблемы до технической реализации — опыт создания ИИ‑ассистента для Росатома за 48 часов хакатона АтомикХак 2.0
Часть 1: Бизнес‑кейс. Зачем это нужно?
Проблема, которая съедает миллионы
Представьте: новый сотрудник крупной корпорации ищет ответ на рабочий вопрос. Он открывает внутренний портал, видит сотни PDF‑инструкций, тысячи записей в базе знаний службы поддержки. Час поиска, звонки коллегам, еще час изучения документов. В итоге — либо неточный ответ, либо решение отложить задачу.

Цена такой неэффективности астрономическая:
Средний офисный сотрудник тратит 2,5 часа в день на поиск информации. Ссылка 1, Ссылка 2.
90% корпоративных знаний «заперто» в PDF‑файлах и не поддается быстрому поиску.
Служба поддержки отвечает на одни и те же вопросы сотни раз.
Уход экспертов = потеря ключевых знаний компании.
Именно эту проблему мы решали на хакатоне AtomicHack 2.0. У нас было 48 часов, чтобы превратить горы разрозненной документации в умного помощника, который работает как персональный ChatGPT для каждого сотрудника.

Результат: 2-е место на хакатоне и рабочий прототип, которым уже можно пользоваться. Вот ссылка на пример работы нашего бота.
Наше решение в двух словах
Мы собрали ИИ‑ассистента, который работает как «продвинутый библиотекарь»:
Понимает смысл вопроса, а не просто ищет ключевые слова. Например, вы можете спросить "как поехать в командировку?", и система найдет инструкцию, даже если в ней написано условно "порядок направления в служебную поездку".
Мгновенно просматривает тысячи страниц документации. Ассистент извлекает знания как из структурированных таблиц (Excel с историей обращений), так и из неструктурированных текстов (сотни PDF-документов).
Находит точные ответы в двух источниках одновременно. Система не просто определяет нужный документ, а указывает на конкретный абзац и перепроверяет его релевантность, чтобы дать максимально точный ответ.
Итоговый ответ приходит в Telegram в виде понятного текста, а не ссылки на документ, с указанием источника для проверки.
Простая аналогия: мы скрестили Google (для поиска) и ChatGPT (для понимания и ответов), но только для внутренних документов компании.
Что это дает бизнесу и компаниям?
Прямая экономия
Экономия времени сотрудников: Поиск информации сокращается с часов до секунд.
Разгрузка службы поддержки: Ассистент отвечает на 80% типовых вопросов, позволяя специалистам сфокусироваться на сложных задачах.
Стратегические преимущества
Сохранение знаний: Экспертиза не уходит вместе с сотрудниками, а становится доступной всем.
Масштабируемость: Система «выучивает» новые документы автоматически и работает 24/7.
Скорость принятия решений: Мгновенный доступ к корпоративным знаниям уменьшает количество ошибок.
Часть 2: Технический разбор. Как это сделано?
А теперь давайте заглянем «под капот» и разберем, как это реализовано технически.
Архитектура решения и выбор стека
Наша система состоит из нескольких ключевых компонентов:

Технологический стек:
LangChain: для построения RAG‑пайплайна.
FAISS: для быстрого локального векторного поиска.
LaBSE‑en‑ru: для создания качественных эмбеддингов на русском языке.
saiga_llama3_8b: русскоязычная LLaMA 3 для генерации ответов.
aiogram: для телеграм‑бота.
Подготовка данных: Как «прочитать» тысячи PDF-файлов
Прежде чем научить ИИ искать, нужно было "скормить" ему данные. Самая большая сложность корпоративных знаний — их хаотичность. PDF-файлы бывают разными: одни содержат обычный текст, другие — это, по сути, сканы, то есть картинки.
Мы применили гибридный подход для извлечения информации:
1. Для текстовых PDF: Мы использовали стандартные библиотеки (PyPDF2
), чтобы быстро и точно извлечь весь текст.
2. Для сканированных PDF (картинок): Если первый метод не давал результата, система автоматически переключалась на технологию оптического распознавания символов (OCR, pytesseract
). Это позволило нам "прочитать" даже те документы, которые были просто отсканированы и сохранены без текстового слоя.
Такой двухэтапный процесс гарантировал, что ни один документ, независимо от его формата, не будет упущен. Весь извлеченный текст затем очищался и готовился к следующему этапу — превращению в векторы.
Ядро системы: двойной семантический поиск
Основа нашего решения — технология «понимания смысла» (эмбеддинги) и двойной поиск с реранкингом.
1. Создание эмбеддингов
Мы превращаем текст в числовые векторы, чтобы понять его смысл. Вот как это реализовано:
from transformers import AutoTokenizer, AutoModel
import torch
tokenizer = AutoTokenizer.from_pretrained("cointegrated/LaBSE-en-ru")
model_emb = AutoModel.from_pretrained("cointegrated/LaBSE-en-ru")
def embeddings_text(sentences):
encoded_input = tokenizer(sentences, padding=True, truncation=True,
max_length=512, return_tensors='pt')
with torch.no_grad():
model_output = model_emb(**encoded_input)
embeddings = model_output.pooler_output
embeddings = torch.nn.functional.normalize(embeddings)
return embeddings
2. Двойная архитектура поиска
Мы используем две независимые векторные базы: одна для PDF, другая для истории обращений из Excel. Это позволяет находить как общие инструкции, так и конкретные решения прошлых проблем. То есть, если когда-то ранее был задан похожий вопрос и ответ был положительно принят пользователем, то система выдает его, в надежде дать верную подсказку новому юзеру.
3. Поиск с реранкингом
Чтобы повысить точность, мы реализовали двухуровневый поиск: сначала находим 5 наиболее похожих документов, а затем «перечитываем» их на уровне предложений, чтобы найти самое точное совпадение.
def search_best_from_structured(query):
docs = db.similarity_search_with_score(query, k=5)
# Фильтруем по порогу релевантности
norm_docs_from_excel = [i[0] for i in docs if i[1] <= 0.658243]
if len(norm_docs_from_excel) > 1:
# Запускаем реранкинг для выбора лучшего документа
result_points = real_rerank(norm_docs_from_excel, query)
doc_real = norm_docs_from_excel[int(result_points.argmax())]
return doc_real
# ...
Интеграция с LLM и промпт-инженеринг
Мы использовали русскоязычную Saiga LLaMA 3, еще мы успели посмотреть:
DiTy/gemma-2-9b-it-russian-function-calling-GGUF
QuantFactory/T-lite-instruct-0.1-GGUF
RefalMachine/ruadapt_qwen2.5_7B_ext_u48_instruct_gguf
Но из коробки в нашем случае лучше всего оказалась Saiga.
def get_llm_answer(query, chunks_join):
user_prompt = '''Используй только следующий контекст, чтобы очень кратко ответить на вопрос в конце.
Не пытайся выдумывать ответ.
Контекст:
===========
{chunks_join}
===========
Вопрос:
===========
{query}'''.format(chunks_join=chunks_join, query=query)
SYSTEM_PROMPT = "Ты система поддержки пользователей компании Росатом..."
prompt = f'''<|im_start|>system\n{SYSTEM_PROMPT}<|im_end|>...'''
# ... код генерации ответа
Также мы ограничивали собственное «творчество» модели с помощью промптинга. Такой подход заставляет ИИ работать как суммаризатор найденной информации, и не "галлюцинировать", что критически важно для корпоративной среды.
Объединение логики в Telegram-боте
Долго не думая мы решили сделать UI через телеграмм, так как это было проще и быстрее. Вся логика собирается в одной функции, которая опрашивает обе базы данных, передает найденный контекст в LLM и формирует итоговый ответ для пользователя.
def QnA_with_LLM(query):
res = ''
# 1. Поиск в структурированных данных (история обращений)
excel_chunk = search_best_from_structured(query)
if excel_chunk:
res += f'Решение аналогичного вопроса: {excel_chunk[0].metadata["Решение"]}'
# 2. Поиск в неструктурированных данных (PDF)
pdf_chunk = search_best_from_unstructured(query)
# 3. Генерация ответа на основе найденного в PDF
result = get_llm_answer(query, pdf_chunk.page_content)
# 4. Формирование финального ответа с метаданными
info = f'Страница: {page}, Исходный документ: {file_name}'
res += '\n' + f'Ответ LLM: {result}' + '\n' + info
return res
Безусловно, можно легко адаптировать это коробочное решение и для веба, и для десктопа.
Часть 3: Практическое руководство. Как это внедрить?
Что нужно для внедрения
Данные: Цифровые копии внутренней документации (PDF, Word, Excel), история обращений в службу поддержки, базы знаний.
Команда: 2–3 разработчика на пару месяцев. Все таки процесс внедрения для каждого разный и на другой документации модель может повести себя иначе. Да и прогресс не стоит на месте, появляется кучу техник и разновидностей RAGа.
Инфраструктура: Стандартный сервер с GPU (можно арендовать в облаке) либо локально, если есть на чем развернуться. У нас в команде был человек с rtx 4090.
Этапы внедрения
1. MVP (2–4 недели): Создание прототипа на ограниченном наборе документов и тестирование на пилотной группе.
2. Масштабирование (4–6 недель): Загрузка всего массива документов и интеграция с корпоративными системами.
3. Оптимизация (2–4 недели): Настройка на основе обратной связи от пользователей.
Примерный бюджет и окупаемость
Инфраструктура: от 200 тыс. рублей (стоимость одной карточки для локального варианта) или от 20 тыс. рублей в месяц при аренде сервера (цена на достаточно популярных сервисах, за рекламу не платили, извините).
Поддержка: От 10 тыс. рублей (смотря с кем и как договоритесь). Одного разработчика на зп или минимальной проверки раз в несколько недель от условного фрилансера может хватать.
Окупаемость: при экономии 1 часа в день на 100 сотрудников экономия составляет более 6 млн рублей в год. ROI достигается за 2–3 месяца.
Как считали окупаемость
Основная выгода системы — прямая экономия рабочего времени сотрудников, которое они раньше тратили на поиск информации.
1. Определяем стоимость часа работы сотрудника:
Средняя зарплата: Возьмем для примера среднюю зарплату специалиста в крупной компании — 120 000 рублей в месяц «на руки».
Полная стоимость сотрудника для компании: Компания платит не только зарплату, но и налоги, страховые взносы (около 30%), а также несет накладные расходы (аренда, оборудование, ПО). Консервативно можно умножить зарплату на коэффициент 1.6.
> 120 000 руб. * 1.6 = 192 000 рублей в месяц (полная стоимость одного сотрудника).
Стоимость рабочего часа: В месяце примерно 21 рабочий день, или 168 рабочих часов.
> 192 000 руб. / 168 часов ≈ 1 140 рублей в час.
2. Рассчитываем годовую экономию:
Выше я предположил, что система экономит 1 час в день для 100 сотрудников.
Экономия в день:
> 100 сотрудников * 1 час * 1 140 руб./час = 114 000 рублей в день.
Экономия в год: В году примерно 247 рабочих дней.
> 114 000 руб./день * 247 дней ≈ 28 158 000 рублей в год.
Как видите, реальная потенциальная экономия огромна. Мы указали очень скромную цифру «более 6 млн рублей» :) , чтобы учесть, что не все сотрудники будут экономить ровно час каждый день. Но даже эта консервативная оценка показывает высокую эффективность проекта.
Расчет окупаемости и затрат приводить не будем, это будет по большей части зависеть от подрядчиков и варианта реализации в вашей компании.
Заключение
Что мы выделили для себя лично о хакатоне: в условиях жесткого дедлайна нет времени на перфекционизм. Мы научились мгновенно отсекать второстепенные фичи и концентрироваться на ядре продукта, которое решает главную боль. Этот навык бесценен и в коммерческой разработке. За двое суток мы погрузились в новые аспекты LangChain
, протестировали несколько подходов к реранкингу и развернули всю систему с нуля. Мы поняли, что работающий прототип, пусть и неидеальный, гораздо лучше, чем идеальный, но не существующий. Главное — быстро создать ценность и получить обратную связь.
Наш опыт показывает, что технологии корпоративного ИИ уже готовы решать реальные бизнес‑задачи. Это не далекое будущее — это инструменты, которые можно внедрить уже сегодня, чтобы получить измеримые результаты и конкурентное преимущество.
Технологии готовы. Вопрос только в том, кто внедрит их быстрее и эффективнее.
Кстати! У нас появился свой телеграмм канал, где мы делимся нашим опытом в хаках и разработке проектов от микросервисов до нейросеток, подписывайтесь :-)
Комментарии (5)
digtatordigtatorov
01.07.2025 08:13Остается только гадать насколько фиговый ocr на тессеракте получился
Как там с таблицами? Изображениями в pdf? Боюсь что процентов 50% информации из доков просто теряется
GG1KENOBI Автор
01.07.2025 08:13Безусловно, для каждого метода и подхода нужно просматривать несколько вариантов, но из тех, что нам удалось посмотреть за время хакатона, тесеракт показал лучший скор. Одна из причин - данные, вполне вероятно, что на других наборах будет другой результат. Вопрос исследования, кроме того, ocr инструменты чуть ли не каждый месяц выходят новые. Поэтому статья больше направлена на обзор опыта в хакатоне и возможность внедрения простых решений за короткий срок. Спасибо за вашу заинтересованность!
slavius
01.07.2025 08:13Некоторые программы при сканировании добавляют текстовый слой, но с английским языком для русских текстов. Слой есть, а информации нет. Да и погрешности и дефекты сканирования добавят свою "изюминку" в тексты.
Но это работающая уже система, которую можно допиливать. Нечто похожее уже предлагают как "Внедрение ИИ в ваш документооборот".
GG1KENOBI Автор
01.07.2025 08:13Я бы даже сказал, что не «можно», а нужно, так как это значительно расширяет возможности ллм и «смягчает» ее ограничения в знаниях, конечно, не без исключений.
decomeron
Еще бы переводить научили и вообще цены бы не было