От проблемы до технической реализации — опыт создания ИИ‑ассистента для Росатома за 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)


  1. decomeron
    01.07.2025 08:13

    Еще бы переводить научили и вообще цены бы не было


  1. digtatordigtatorov
    01.07.2025 08:13

    Остается только гадать насколько фиговый ocr на тессеракте получился

    Как там с таблицами? Изображениями в pdf? Боюсь что процентов 50% информации из доков просто теряется


    1. GG1KENOBI Автор
      01.07.2025 08:13

      Безусловно, для каждого метода и подхода нужно просматривать несколько вариантов, но из тех, что нам удалось посмотреть за время хакатона, тесеракт показал лучший скор. Одна из причин - данные, вполне вероятно, что на других наборах будет другой результат. Вопрос исследования, кроме того, ocr инструменты чуть ли не каждый месяц выходят новые. Поэтому статья больше направлена на обзор опыта в хакатоне и возможность внедрения простых решений за короткий срок. Спасибо за вашу заинтересованность!


  1. slavius
    01.07.2025 08:13

    Некоторые программы при сканировании добавляют текстовый слой, но с английским языком для русских текстов. Слой есть, а информации нет. Да и погрешности и дефекты сканирования добавят свою "изюминку" в тексты.

    Но это работающая уже система, которую можно допиливать. Нечто похожее уже предлагают как "Внедрение ИИ в ваш документооборот".


    1. GG1KENOBI Автор
      01.07.2025 08:13

      Я бы даже сказал, что не «можно», а нужно, так как это значительно расширяет возможности ллм и «смягчает» ее ограничения в знаниях, конечно, не без исключений.