Содержание статьи
Как одна конкретная 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
