ПростоГраф: как я сделал глубокий форк LightRAG под свои (и, возможно, ваши) нужды. LightRAG.. LightRAG. llm.. LightRAG. llm. Natural Language Processing.. LightRAG. llm. Natural Language Processing. Open source.. LightRAG. llm. Natural Language Processing. Open source. python.. LightRAG. llm. Natural Language Processing. Open source. python. rag.. LightRAG. llm. Natural Language Processing. Open source. python. rag. агенты ии.. LightRAG. llm. Natural Language Processing. Open source. python. rag. агенты ии. Ненормальное программирование.
ПростоГраф: как я сделал глубокий форк LightRAG под свои (и, возможно, ваши) нужды - 1

С чего всё началось (можете пропустить, тут немного жизы)

С приходом LLM у меня возникло желание использовать их с пользой для компании. Куча маркетинговых видеона ютубе — как ИИ заменил сотрудников, стал всё знать и прочий шум, который только набирает обороты, — меня очень вдохновили. И я, вооружившись LM Studio, закинув всю документацию в контекст и задав вопрос, быстро приземлился на землю.

TTFT (время до генерации первого токена) на домашней видеокарте 4070 Super, входном контексте в 120к токенов и 8B‑модели — 4 минуты. TPS (скорость генерации) — 3,5 т/с. Качество ужасное: нюансов доменной области компании ИИ не понимает. Итог: не годится.

Далее я узнал про такой подход, как RAG. Подумал: серебряная пуля. Стал изучать эту тему — и оказалось, что там настолько обширный цветник из подходов к чанкингу, парсингу, ретриву, да и в целом паттернов RAG (native, graph, CAG), куча метрик (recall, precision и ещё сотня наберётся), что я вот до сих пор, уже год с лишним, изучаю это. И могу точно сказать, что ни одна готовая система или фреймворк не закроет на 100% конкретно Ваш случай. И честно, ПростоГраф тоже. Но об этом далее.

Что такое LightRAG?

LightRAG — это open‑source RAG‑фреймворк от команды HKUDS, который отвечает на вопросы по твоим документам. Его особенность в том, что он совмещает обычный векторный поиск с графом знаний: при индексации вытаскивает из текста сущности и связи между ними. За счёт этого он лучше отвечает на вопросы, где важны отношения между объектами, а не просто похожие куски текста, где можно упустить важные тонкости.

Официальный репозиторий LightRAG

Почему LightRAG?

Причин много, основные:

  • Open‑source

  • Достаточно эффективный поисковый движок под капотом

  • Готовый парсер (включая мощный Docling) и чанкер

  • Простота в управлении системой в целом

  • Готовый WebUI

Я перепробовал много разных RAG‑фреймворков и систем, RAGFlow, Flowise, AutoRAG. Пробовал десктоп‑варианты — Jan, AnythingLLM, GPT4ALL и прочие. Строил с нуля свои пайплайны, но возвращался к LightRAG.

В целом у LightRAG хорошее, крепкое ядро, и дабы не раздувать статью пересказами уже существующей информации, более подробно Вы можете почитать в их официальном репо и статьях:
Как мы улучшали качество поиска с помощью графа знаний и что из этого вышло
Графы знаний в юридическом домене: эксперимент с LightRAG
Там логика и архитектура LightRAG разобрана до косточек.

ПростоГраф, что это? И зачем он вообще поя™вился?

Как я уже сказал это форк, глубокий форк, но не самого поискового движка, его я не трогал.

Работает? НЕ ТРОГАЙ!

Я оснастил его мощной обвязкой, чтобы сотрудники из разных отделов компании могли использовать его как рабочий инструмент, а не MVP. Позволяя очень тонко управлять контекстом, промптами, ролями и отделами. Что позволяет загрузить один раз документацию, немного донастроив всё через удобный WebUI, дать учетку Вашему бухгалтеру или инженеру технической поддержки и тем самым здорово упростив им жизнь. У них будет лишь простая веб страничка перед глазами, к который уже все так привыкли в обычном формате общения с LLM.

Страница авторизации /webui/#/login

Страница авторизации /webui/#/login
Страница рядового юзера /webui/#/chat

Страница рядового юзера /webui/#/chat

Что есть в ПростоГраф, чего нет в LightRAG?

  • Управление отделами, пользователями и их учетными данными.

  • Выбор — какие документы физически доступны разным отделам. Не нужная для отдела продаж спецификация API даже не дойдет до ретрива, не потратит токены.

  • Кастомизация системных промптов для каждого отдела. Стиль ответов для отдела продаж и отдела тестирования — разный.

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

  • Возможность каждому документу добавить свою метаинформацию. Не меняет документ, но позволяет до настроить поведение LLM при ответе.

  • Сбор обратной связи от пользователей под каждым ответом.

  • Просмотр всех чатов и оценок на странице администратора, фактически в бою собираем реальный eval сет.

  • Передача в LLM истории сообщений, фиксированное кол‑во последних пар вопрос‑ответ, чтобы LLM видела историю и не ломалась на Multi‑Turn кейсах.

  • Сохранение истории чатов у пользователя (а‑ля боковое меню).

  • Просмотр исходных документов сразу в чате.

  • Управление провайдерами LLM, эмбеддингов, реранкеров — сразу в WebUI.

  • Настройка чанкинга (размер/перекрытие) в WebUI.

  • Полностью русский интерфейс, грамотно переведены десятки крупных, подкапотных промптов ядра. Переведены почти все сообщения пайплайна. Да, в LightRAG был русский, но очень в ограниченном объеме. Система заточена под реальный РУ‑сегмент.

  • Безопасность тоже забыта не полностью, — персистентный JWT‑секрет, защита /login от перебора, предупреждение о дефолтном пароле, отзыв доступа в реальном времени (роль/отдел перечитываются из БД на каждый запрос), ACL учитывается даже в кэше ответов.

  • Ну и главное(шутка:)) — кастомизация страницы входа. Подсказка гуманитарию куда он попал и что делать.

    ПростоГраф: как я сделал глубокий форк LightRAG под свои (и, возможно, ваши) нужды - 4

В общем

Я использовал эту систему пару месяцев, ловил и исправлял баги, добавлял функционал и по сути это сейчас готовое решение из коробки. Я выложил проект на Гитхаб.
Берите, пользуйтесь, возможно, через ИИ вы допилите что‑то под себя, а возможно и этот функционал сразу покроет все Ваши потребности. Пишите замечания, баги, предложения, — если проект Вам понравится, доделаем его вместе:)

Как установить и запустить?

git clone https://github.com/Denis-ya-32/prostograf.git

cd prostograf

cp .env.example .env # ключи можно вписать сюда или позже в веб-интерфейсе

docker compose up -d --build # первая сборка ~2-4 мин (дольше при первой загрузке базовых образов)

На самом деле — раз уж я стараюсь подавать всё максимально просто — дайте нейронке ссылку на гит и промпт «Скачай и запусти ПростоГраф», и она справится. Возможно, придётся немного посисадминить: настроить реверс‑прокси наружу, чтобы пользоваться могли люди из разных уголков необъятной, но и с этим она спокойно справится. Статья не о сетевом администрировании.

Дальше

  1. Заходим в WebUI, на страницу авторизации:
    http://localhost:9621/webui/#/login

  2. Авторизуемся под admin/admin и нажимаем «Войти».

И всё:) Вы в админке!

Интерфейс будет очень знаком тем, кто работал с LightRAG. Но он существенно переработан.

Интерфейс будет очень знаком тем, кто работал с LightRAG. Но он существенно переработан.
Родной UI LightRAG если кому интересно

Родной UI LightRAG если кому интересно

Давайте теперь посмотрим, как подготовить систему к работе и заодно на весь тот функционал, что я описывал выше

  1. Сразу идем в «Отделы и пользователи» и меняем пароль администратора.

    ПростоГраф: как я сделал глубокий форк LightRAG под свои (и, возможно, ваши) нужды - 7
  2. Идем в «Настройки» > «Провайдеры LLM» и выбираем провайдера, модель и ключ для LLM и эмбеддингов.

    ПростоГраф: как я сделал глубокий форк LightRAG под свои (и, возможно, ваши) нужды - 8

    3. Опционально можете включить реранкер (рекомендую), но и без него качество Вас может полностью устроить.

    ПростоГраф: как я сделал глубокий форк LightRAG под свои (и, возможно, ваши) нужды - 9

    4. Размер чанка менять не нужно. Это значение по умолчанию из LightRAG. Если очень хочется, тестируйте. Нажимаем «Сохранить и применить». Сервер быстро (10–30с) перезагрузится.

    5. Дальше там же, в настройках идем на вкладку «Тестирование» и кликаем «Проверить провайдеров». Если названия моделей, настройки и ключи правильные, — увидите 200 код.

    ПростоГраф: как я сделал глубокий форк LightRAG под свои (и, возможно, ваши) нужды - 10

Основные настройки все. Просто правда?

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

Процесс не быстрый. ~100k токенов на v4-flash=около часа. Но оно того стоит:)

Процесс не быстрый. ~100k токенов на v4-flash = около часа. Но оно того стоит:)

Если в процессе будут ошибки, система покажет, повторное нажатие «Сканировать/Повторить», в крайнем случае удаление и повторная загрузка, решают все проблемы. Я пока иного не наблюдал, если что пофиксим, главное, сообщайте о таком:)

Когда документы будут загружены, можем зайти на вкладку «Граф знаний» и помедитировать на цветные кружочки с ребрами.

ПростоГраф: как я сделал глубокий форк LightRAG под свои (и, возможно, ваши) нужды - 12

Ну и после медитации, идем в «Чат» и задаем вопрос, медитируем снова

ПростоГраф: как я сделал глубокий форк LightRAG под свои (и, возможно, ваши) нужды - 13

А теперь к более полезной практике

Задача:

  1. Создать два отдела, — бухгалтерия и техническая поддержка.

  2. Прикрепить юзеров Иванова А.А и Петрова В.В к бухгалтерии.

  3. Прикрепить юзера Герасимов Б.Б к отделу техпод.

  4. Загрузить документы «Глоссарий системы», «Зарплатные ведомости», «Спецификация API» в систему.

  5. Бухгалтерии дать доступ к «Глоссарий системы» и «Зарплатные ведомости». API им не нужен.

  6. Техподу дать доступ к «Глоссарий системы» и «Спецификация API». К зарплатным ведомостям доступ не нужен.

Мы уже знаем как загружать документы. Остается создать отделы, юзеров и настроить доступ к докам.

  1. Идем на вкладку «Отделы и пользователи» и в разделе «Отделы» создаем отдел «BUH» и «TECHPOD», кликаем создать.

    ПростоГраф: как я сделал глубокий форк LightRAG под свои (и, возможно, ваши) нужды - 14

    2. В разделе «Пользователи» вводим логин «a.ivanova», пароль «12345», имя «Иванова А.А». Выбираем роль «Пользователь» и отдел BUH. Кликаем «Добавить». Увидим уведомление и нового юзера.

    То же самое делаем с другими юзерами.

    ПростоГраф: как я сделал глубокий форк LightRAG под свои (и, возможно, ваши) нужды - 15

3. Далее идем ниже, к разделу «Доступ отдела к документам». Выбираем отдел и ставим галочки в чек‑боксах рядом с теми документами, которые должны попадать в ретривер для отдела и нажимаем «Сохранить». Тут же, можете указать промпт конкретному отделу, он имеет приоритет перед промптом по умолчанию из вкладки «Настройки» > «Промпты».

ПростоГраф: как я сделал глубокий форк LightRAG под свои (и, возможно, ваши) нужды - 16

4.На вкладке «Документы» есть две важные функциональные возможности

Вкладка "Документы"

Вкладка «Документы»
  • Чек‑бокс «Целиком» — при включении документ попадает целиком в ретривер! Это очень важно, когда инструкция процедурная, где описан поэтапно какой-либо сложный процесс, где цена ошибки велика. Любые ограничения на размер и бюджет токенов в «Настройки» > «Параметры запроса», — игнорируются.
    * Этот пункт сделан не просто так, это реальная боль во многих компаниях и это здорово выручает, не нужно свой RAG целиком строить на Child‑Parent паттерне, который достаточно дорогой. Включаем только на процедурку.

  • META — Также важная надстройками поверх промптов. Позволяет корректировать поведение генератора на каких‑то узких/сложных документах. Не меняет текст документа, просто подается как { metainfo: «text» } при успешном ретриве документа/его фрагментов.

    ПростоГраф: как я сделал глубокий форк LightRAG под свои (и, возможно, ваши) нужды - 18

Все это Вы можете более подробно почитать в разделе «Документация». Я собрал там Wiki страничку с удобным поиском.

ПростоГраф: как я сделал глубокий форк LightRAG под свои (и, возможно, ваши) нужды - 19

Теперь отправляем URL и доступы Герасимову Б.Б.

Лови!
URL: http://localhost:9621/webui/#/login
Login: b.gerasimov
Password: 12 345 

Он заходит и задаёт вопрос, получает ответ и оценивает (на самом деле нужно заставлять оценивать, не все понимают насколько это важно). Видит магию

ПростоГраф: как я сделал глубокий форк LightRAG под свои (и, возможно, ваши) нужды - 20

При желании может посмотреть исходник документа в правом меню и увидеть что данные реальные.

ПростоГраф: как я сделал глубокий форк LightRAG под свои (и, возможно, ваши) нужды - 21

Вернемся в админку, посмотрим, жжёт ли Герасимов токены на выбор фильма

Точнее оценим ответ, посмотрим процесс мышления LLM, скорость ответа, использованные документы, расход токенов, оценку. Всё это можно увидеть на вкладке «История».

ПростоГраф: как я сделал глубокий форк LightRAG под свои (и, возможно, ваши) нужды - 22

Все чаты, в том числе удаленные сохраняются в SQLite, потом на их основе можно собирать реальный eval‑сет, а не синтетику.

Послесловие

Я не AI инженер, скорее обычная шестеренка, у которой была боль, как все организовать для компании численностью чуть более ста человек и огромное желание и интерес к LLM и RAG в частности.

Я постарался максимально простым языком показать как использовать эту систему и сделал её простой для конечных пользователей, — рядовых сотрудников и администраторов.

Мне система нужна именно в таком виде, возможно кому‑то тоже будет полезна. Берите, модифицируйте под себя, благо сейчас это очень просто и быстро. Будет важно получать от вас обратную связь, Issue, личка Хабра. Если есть похожие инструменты, готовые, бесплатные, — делитесь. Я тоже в поисках хорошего:)

Дальнейшие планы

  • Добавить возможность перенаправлять ответы на других провайдеров LLM, эмбеддингов, реранкера в случае если текущий провайдер «лежит».

  • Вынести больше настроек из-под капота в WebUI. Да их там море.

  • Добавить возможность автоматизировано собирать и делать eval таблицу для тестов прям в WebUI. Отслеживать метрики после изменений.

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

Автор: Front-Den

Источник