Skip to content

A web application for using RAG based on Obsidian Notes

License

Notifications You must be signed in to change notification settings

Daniil-Solo/RAG-On-Obsidian

Repository files navigation

RAG-On-Obsidian

Ваш интерактивный помощник для работы с заметками Obsidian с помощью LLM и RAG-подхода

Возможности приложения

  • Генерация ответов на вопросы по заметкам в Obsidian
  • Приложение разворачивается локально как с помощью Docker, так и без него (инструкции ниже)
  • Приложение отслеживает изменения в заметках автоматически
  • Визуализация заметок пользователя в виде облака точек
  • Темная/светлая тема

Структура проекта

  • backend — бекенд часть проекта, отвечающая за обработку данных и интеграцию с базой знаний.
  • frontend — фронтенд часть проекта для взаимодействия пользователя с системой.
  • experiments — раздел для исследований и экспериментов, связанных с RAG.

Технологический стек

  • Бекенд: FastAPI, SQLModel (asyncpg и psycopg), uvicorn, PostgreSQL
  • RAG: MistralAI API, aiohttp, pgvector, langchain (только TextSplitter)
  • Фронтенд: TypeScript, Mantine UI, React Query, Vite

Архитектура приложения

Приложение RAG-On-Obsidian состоит из следующих компонентов:

  1. Web-сервис:

    • Используется FastAPI на базе uvicorn
    • Обрабатывает пользовательские запросы и взаимодействует с векторной базой данных
    • Раздает фронтенд и необходимые для него статические файлы
  2. База данных:

    • Используется PostgreSQL с установленным расширением pgvector
    • Хранит настройки, сообщения в чате и векторные представления заметок
    • Обеспечивает эффективным поиск по векторам с использованием HNSW-алгоритма

Все компоненты разворачиваются в Docker-контейнерах, оркестрация осуществляется с помощью Docker Compose.

CI/CD

Для проекта настроен пайплайны

  • для сборки Docker-образа при изменении файлов в директориях backend или frontend
  • для запуска линтера Ruff над кодом в директории backend

Ссылка на все пайлайны

Интерфейс

Интерфейс состоит из трех основных вкладок: Chat, Index и Settings. Рассмотрим подробее каждую из них.

Chat

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

Index

Вкладка Index содержит визуализацию индекса базы данных, а также возможность этот индекс обновить, удалить и получить актуальную информацию по текущему индексу.

Settings

Здесь, пользователь может выбрать темную или светлую тему для приложении, а также задать настройки для используемой генеративной модели (пока используется только Mistral AI).

Бекенд

Обработка запросов

При получении пользовательского запроса:

  • Генерируем эмбеддинг запроса с помощью модели Mistral-Embed
  • Ищем topK релевантных чанков для данного запроса
  • На основе запроса и чанков с помощью LLM (сейчас интеграция только с MistralAI) генерируем ответ

Индексация базы данных

При запросе пользователя на обновление индекса:

  • Получаем список файлов, которые изменились
  • Генерируем по этим файлам новые эмбеддинги по измененным файлам
  • По всем эмбеддингам в базе данных считаем PCA разложение, чтобы получить первые две компоненты векторов
  • По полученному результату обновляем наш индекс

Исследования и оценка качества RAG

Подробнее про сплиттинг текста, выбор эмбединговой модели и оценивание качества ретривал-части RAG можно почитать здесь.

Запуск приложения

Docker (рекомендуемый вариант)

  1. Убедитесь, что он установлен и запущен на машине командой docker -v
  2. Скачиваем файл docker-compose.yml
  3. Указываем в web.volumes вместо ./backend/obsidian абсолютный путь до директории с заметками Obsidian
  4. Выполняем в директории с файлом команду docker-compose up -d или docker compose up -d
  5. Переходим на http://localhost/ в браузере
  6. Вы великолепны!

Без Docker

  • Если у вас Linux/MacOS, то рассмотрите вариант с установкой Docker, а потом вернитесь к запуску из Docker
  • Если у вас Windows, то рассмотрите вариант с установкой WSL и поверх него Docker, а потом вернитесь к запуску из Docker

Если предыдущие два варианта не подходят, то поехали запускать без Docker:

  1. Устанавливаем PostgreSQL, создаем базу данных, не забываем пароль
  2. Устанавливаем расширение pgvector в этой базе данных командой: CREATE EXTENSION IF NOT EXISTS vector;
  3. Скачиваем репозиторий командой: git clone https://github.com/Daniil-Solo/RAG-On-Obsidian.git
  4. Создаем виртуальное окружение в директории backend и устанавливаем зависимости: pip install poetry==1.8.5 && poetry install
  5. Скачиваем папку с билдом фронта в директорию backend папку с Google-диска
  6. Создаем в директори backend файл .env и заполняем его:
MODE=production
OBSIDIAN_PATH=<YOUR-ABSOLUTE-PATH-TO-OBSIDIAN-NOTES-DIRECTORY>
STATIC_PATH=<YOUR-ABSOLUTE-PATH-TO-FRONT-BUIKD-DIRECTORY>
DB_HOST=<YOUR-DATABASE-HOST> # default is localhost
DB_PORT=<YOUR-DATABASE-PORT> # default is 5432
DB_USER=<YOUR-USER-NAME-IN-POSTGRES> # default is postgres
DB_PASSWORD=<YOUR-PASSWORD-IN-POSTGRES>
DB_NAME=<YOUR-DATABASE-NAME-IN-POSTGRES> # default is postgres
  1. Из директории backend запускаем командой: poetry run uvicorn src.app:app --port 5000
  2. Переходим на http://localhost/ в браузере
  3. Вы восхитительны!

Команда

Проектом занимались:

About

A web application for using RAG based on Obsidian Notes

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •