HabrRAG — это асинхронный REST API для Retrieval-Augmented Generation (RAG), использующий LangGraph для управления пайплайном.
- ✅ FastAPI - асинхронный веб-фреймворк
- ✅ LangGraph - граф-ориентированный RAG пайплайн
- ✅ Pydantic - типизация и валидация данных
- ✅ Qdrant + BM25 - гибридный поиск документов
- ✅ Cross-Encoder - переранжирование результатов
- ✅ ChatOpenAI - интеграция с LLM
- ✅ Асинхронность - полная поддержка async/await
- ✅ Кэширование - сохранение ответов в PostgreSQL
HabrRAG/
├── main.py # FastAPI приложение
├── ui/
│ ├── chainlit_app.py # Chainlit чат-интерфейс
│ └── chainlit.md # Документация Chainlit
├── src/
│ ├── logger.py # Логирование в консоль
│ ├── schemas.py # Pydantic модели (AppState, RAGRequest, RAGResponse)
│ ├── settings.py # Конфигурация из переменных окружения
│ ├── caching.py # Кэширование ответов в PostgreSQL
│ ├── build_sources.py # Построение источников данных
│ ├── lifespan.py # Управление жизненным циклом приложения
│ ├── summarization.py # Суммаризация документов
│ ├── chunking.py # Чанкирование документов
│ ├── retrievers.py # Создание Qdrant + BM25 ретривера
│ └── rag/
│ ├── graph.py # LangGraph RAG пайплайн
│ ├── schemas.py # Дополнительные схемы
│ ├── state.py # Pydantic модели RAGState и Document
│ └── prompts.py # Системные промпты для LLM
├── db/
│ ├── answer_cache.sql # Инициализация таблицы кэша
│ └── db_chainlit.sql # Скрипты для Chainlit БД
├── notebooks/
│ ├── GenerateSynthQA.ipynb # Генерация синтетических Q&A
│ └── qa_dataset.jsonl # Датасет вопросов и ответов
├── evaluation/ # Инструменты оценки RAG системы
│ ├── create_langfuse_dataset.py # Создание датасета в Langfuse
│ ├── run_dataset.py # Запуск RAG на датасете Langfuse
│ ├── evaluate_dataset_run.py # Оценка результатов запуска
│ ├── metrics.py # Метрики оценки
│ ├── structures.py # Структуры данных
│ ├── data/ # Тестовые датасеты
│ └── logs/ # Отчеты об оценке
├── Dockerfile.app # Docker для FastAPI приложения
├── Dockerfile.chainlit # Docker для Chainlit интерфейса
├── docker-compose.yml # Docker Compose конфигурация
├── pyproject.toml # Зависимости проекта
└── .env.example # Шаблон переменных окружения
Чанкирование и векторизация будут проведены заново
Советуем:
- Предварительно поставить в
.envпараметрRAG_APP__SPLIT_DATASET=train[:2] - Запустить поднятие docker
- Подождать несколько минут инициализации приложения
- Загрузить подготовленный snapshot https://drive.google.com/file/d/1sHARsAjnrDR72dgbSYqxPviEC0Q0YIbj/view?usp=sharing в qdrant прямо через интерфейс
- Готово, вы великолепны
- Перейти на https://openrouter.ai/
- Зарегистрироваться и получить API ключ
- Создать
.envфайл на основе.env.example
- Выполнить команду
chainlit create-secretи скопировать сгенерированный секрет - Добавить в
.envфайл:CHAINLIT_AUTH_SECRET=ваш_секрет
docker-compose up --buildНиже приведены доступные сервисы и их параметры подключения:
- URL: http://localhost:8001
- Логин:
любой - Пароль:
любой
- Host:
localhost - Host name/address:
db - Port:
5432 - Username:
chainlit_user - Password:
chainlit_pass
- URL: http://localhost:8080
- Логин:
admin@admin.com - Пароль:
admin
Проверка статуса приложения
curl http://localhost:8000/healthПолучить ответ от RAG системы. Запросы можно отправлять через Swagger UI по адресу http://localhost:8000/docs
Примеры запросов:
{ "query": "Who was the original owner of the lot of items being sold?" }{ "query": "What are some of the skills taught in the Trail Patrol Training course?" }{ "query": "Who were the two convicted killers that escaped from an upstate New York maximum-security prison?" }Истории чатов автоматически сохраняются в PostgreSQL базе данных. Chainlit управляет созданием таблиц и хранением данных пользователей, сессий и сообщений.
- Чаты в Chainlit кэшируются в базу данных
chainlit_db - Вопросы и ответы RAG кэшируются в базу данных
postgres_dbв таблицеanswer_cache
Langfuse запускается локально через Docker Compose. После запуска всех сервисов:
- Перейти на http://localhost:3000
- Создать новый проект
- В настройках проекта скопировать Public Key и Secret Key
- Добавить их в
.envфайл:LANGFUSE_PUBLIC_KEY=your_public_key LANGFUSE_SECRET_KEY=your_secret_key
Папка evaluation содержит инструменты для комплексной оценки качества RAG-системы с использованием Langfuse. Процесс включает три этапа: создание датасета, запуск RAG цепочки и автоматическую оценку результатов.
Подробное описание процесса см. в evaluation/README.md.
| Технология | Назначение |
|---|---|
| FastAPI | REST API фреймворк |
| LangGraph | Граф-ориентированный пайплайн |
| LangChain | Работа с LLM и документами |
| Pydantic | Валидация данных |
| Qdrant | Векторный поиск |
| ChatOpenAI | Интеграция с OpenAI API |
| PyTorch | Работа с эмбедингами |
| Chainlit | Чат-интерфейс с авторизацией |
| Qdrant | Векторная база данных для документов |
| PostgreSQL | Реляционная база данных для чатов |
| Langfuse | Логирование и оценка RAG пайплайна |