История развития RAG на примере одного проекта - QubStore

История развития RAG на примере одного проекта

Содержание статьи

Как одна конкретная RAG-система эволюционировала из нейросети, которая ищет по md-файлам до многослойного пайплайна с графом знаний, гибридным ретривером и адаптивной схемой рассуждений.

Начну с краткой предыстории.

Проект переезжал в другое облако. Прод переехал успешно, но dev-среда — чаты, документация, код, задачи — подтягивались постепенно. Часть людей, хранящих особые знания не переехало. И ничего не предвещало беды.

Я новый человек на проекте, долгожданная смена проекта. Техлид, спокойно перенимаю дела, пишу стратегию по переносу бизнес-логики с фронта на бэк на полгода вперёд.

Неожиданно для всех точка входа в мобильном приложении, которая была основной, перестала работать. Кто-то принял решение её выпилить и показывать функциональность мобильной веб-версии, в которой не было и половины былой функциональности.

Поддержка была нагружена в три раза больше обычного, и выдала список из 9 критичных дефектов. Критичных — это значит на каждый пожаловалось не меньше сотни пользователей. Начиная с невозможности войти до неактуальных отчетных документов.

А за мобильный веб предполагалось отвечать как раз мне.

Фаза 1. RAG нужен здесь и сейчас.

Всё что у меня было на этот момент — код, задачи, документация и чаты. К ним прилагался PO в панике и два ИТ Лида за которыми закрепился мем “задача на 5 минут”.

Я написал на python загрузчики, которые складывают задачи, документацию и треды из чатов md-файлами рядом с кодом, положил весь код (и бэк и фронт) в одну папку.

Корпоративный AI-поставщик к этому моменту, спасибо большое, поставил Deepseek V4 Flash на общедоступное Openai API. Поэтому в течение часа под сообщением руководителя службы поддержки с девятью дефектами появилось моё сообщение с анализом где и что чинить, сколько времени это займёт и что три я уже пофиксил и отдал в тестирование.

Фаза 2. Актуалочка в чатиках

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

Давно хотел испробовать graphRAG. Подняв решение поверх md-файлов на llamaindex+chromadb, после серии опытов я понял что базе знаний нужна чистка мертвых листьев. Объявив источником истины чаты и код на проде, я запустил процесс актуализации и очистки. Сделал дашборд, который помогал в очистке и актуализации.

На первом этапе был гибридный (BM25+vector) поиск, который выдавал найденные куски из векторой базы данных. На втором этапе я внедрил Graph of Thoughs, который разбирает вопрос на подвопросы и делает серию запросов, а потом синтезирует полученные данные в один ответ. Этот ответ можно было подредактировать и сохранить как сущность note с наивысшим уровнем приоритета.

За неделю меня тегнули в чатах 115 раз потому что я всегда находил ответы на актуальные вопросы по доступным мне коду/таскам/докам/чатам.

Дальше случилась неприятная история с сокращением. CTO заблокировал мой перевод после запроса критериев и сроков пересмотра ЗП, а компания из которой был переезд уже передала мою ставку. В итоге меня сократили, а я не успел поставить базу знаний как сервис.

Фаза 3. Опен-сорс.

На мой взгляд, python не очень подходит в качестве production-решения, а поскольку я человек честный, то я решил написать решение с нуля на Go, применив более продвинутые принципы построения.

В качестве инференса я использовал домашний RTX4090 24Гб VRAM, на котором разместил qwen3.8 27b и qwen3-embedder.

Помимо graphRAG и гибридного поиска к решению добавился Temporal-awareness, logicRAG и множество оптимизаций производительности чтобы это сносно работало на домашней системе.

Фаза 4. Бенчмарки.

Потеряв источник контента для анализа, я начал искать среди open-source. Нашел несколько продуктов на примерно той же стадии хаоса — LeonAI проходил этап миграции на агентные системы, и ещё несколько на этапе перехода без должной документации. Но я нигде не мог найти систему с открытыми чатами.

Сделав синтетический корпус вопросов и ответов по Leon, я разочаровался его вялотекучестью.

К тому же, мне было важно чтобы система работала на русскоязычном корпусе. И я обнаружил бенчмарки DRAGON и RUMBA.

DRAGON уже полгода не обновляется, ответы выложены в открытый доступ и по сути это сборник вопросов по корпусу новостей. Скорее пример того, как нужно делать бенчмарки, чем реальный бенчмарк. Я его прошел на 80.3%. Это максимум возможного потому что на некоторые вопросы нет ответов в новосном корпусе.

RUMBA мне совсем не подошел, это другой тип систем.

Существует EnterpriseRAG-Bench, в котором 500к документов именного того типа, который мне нужен: чаты, доки, таски и код. Чтобы запустить его на локальном железе понадобится год.

Фаза 5. Статья на хабре

Я обратился в Альянс ИИ и к разработчикам русскоязычных бенчмарков с вопросом принятых подходов к тестированию таких систем, но ответа не получил.

А Яндекс анонсировал выход Алиса AI для бизнеса в сентябре, которая точно так же забирает данные из разных систем и выдаёт ответ.

Ввиду нехватки ресурсов именно на тестирование системы я пока приостанавливаю работу над проектом. Приглашаю уважаемое сообщество поучаствовать в разработке национальной базы знаний с открытым исходным кодом.

Ах да, сам проект: https://github.com/alterfo/kb

Ссылка на основную публикацию