Skip to content

eugenegantz/rag-search

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RAG Search

Локальная RAG-система (Retrieval-Augmented Generation) для интеллектуального поиска по документам, веб-страницам или изображениям с ответами на естественном языке.

Возможности

  • Индексация документов: PDF, DOCX, TXT, MD
  • Индексация изображений: JPG, PNG
  • Индексация веб-страниц: URL или HTML-файл
  • RAG-поиск: поиск по смыслу + генерация ответа LLM на основе найденных фрагментов
  • Векторный поиск без LLM: поиск по смыслу в векторной базе данных без вызова LLM
  • Источники: каждый ответ сопровождается ссылками на конкретные файлы
  • Интерфейса: веб-интерфейс, CLI, REST API
  • Локальные эмбеддинги: модель multilingual-e5-large работает локально, данные не уходят внешним сервисам при индексации
  • Локальный image-to-text: модель Huihui-Qwen3.5-0.8B-abliterated работает локально, данные не уходят внешним сервисам при индексации. Модель на базе легковесной QWEN3.5 с ослабленой цензурой
  • Фоновая индексация: документы индексируются в фоновом потоке, не блокируя API

Требования

  • Python 3.10+
  • CUDA (опционально, для ускорения эмбеддингов)
  • LLM API с OpenAI-совместимым интерфейсом

Установка

# Клонирование репозитория
git clone https://github.com/eugenegantz/rag-search.git ./rag
cd rag

# Установка зависимостей
pip install -r requirements.txt

Модели эмбеддингов должны скачаться самостоятельно при первом запуске. Файлы модели расположены в директори models/

Конфигурация

Пустой файл конфигурации создается при первом запуске app_config/config.py. В нем необходимо настроить параметры веб-сервера и параметры подключения к поставщику LLM. Подробные комментарии будут внутри.

Пример config.py

config = {
    "openai": {
        "base_url": "https://api.provider.ai/coding/v1/",
        "api_key": "akjznak...kzmqu",
        "default_headers": {
            "User-Agent": "MyAppName/1.0"
        }
    },
    "daemon": {
        "host": "127.0.0.1",
        "port": 8367,
    }
}

Использование

Запуск демона

python cli.py daemon start

Windows: чтобы работала команда rag необходимо внести директорию в переменную PATH.

Демон запустится на http://127.0.0.1:8367 и загрузит модели эмбеддингов (~10-30 сек).

CLI

# Проверить статус
python cli.py daemon status

# Индексация документов
python cli.py index add document.pdf report.docx notes.txt

# Список индексированных файлов
python cli.py index list

# Поиск по смыслу среди индексированных файлов
python cli.py index query "Запрос"

# Удалить файл из индекса
python cli.py index remove document.pdf

# Поиск (RAG)
python cli.py ask "Какие инструменты ИИ используются в компании?"

# Вывод в JSON
python cli.py ask "вопрос" --json

# Остановка демона
python cli.py daemon stop

Веб-интерфейс

Откройте http://127.0.0.1:8367 в браузере:

  • Поиск (/): задавайте вопросы и получайте ответы с источниками
  • Добавление документов (/add): добавляйте файлы по пути (можно несколько, по одному на строку)

REST API

Метод Эндпоинт Описание
GET /api/v1/health Проверка состояния
POST /api/v1/search RAG-поиск
POST /api/v1/context/query Векторный поиск чанков без LLM
POST /api/v1/index/add Добавить файл в индексацию
GET /api/v1/index/get Список проиндексированных файлов
GET /api/v1/index/query Векторный поиск по файлам
POST /api/v1/index/remove Удалить файл из индексации
POST /api/v1/shutdown Остановить демон

Примеры запросов

# RAG-поиск
curl -X POST http://localhost:8367/api/v1/search \
  -H "Content-Type: application/json" \
  -d '{"query": "вопрос", "top_k": 10}'

# Добавление документа
curl -X POST http://localhost:8367/api/v1/index/add \
  -H "Content-Type: application/json" \
  -d '{"filepath": ["/path/to/file.pdf"]}'

Поддерживаемые форматы

Формат Описание
.txt, .md Текстовые файлы UTF-8
.docx Документы Microsoft Word
.pdf PDF-документы
.html HTML-страницы
.png, .jpeg, .jpg Изображения
https://domain.com/page Веб-страницы

Архитектура

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│    CLI      │     │    Web      │     │   API       │
│  (Typer)    │     │  (HTML/JS)  │     │  (HTTP)     │
└──────┬──────┘     └──────┬──────┘     └──────┬──────┘
       │                   │                   │
       └───────────────────┼───────────────────┘
                           │ HTTP
                    ┌──────┴──────┐
                    │   Daemon    │
                    │  (FastAPI)  │
                    └──────┬──────┘
                           │
           ┌───────────────┼───────────────┐
           ▼               ▼               ▼
    ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
    │  ChromaDB   │ │  e5-large   │ │             │
    │ (векторная  │ │ (эмбеддинги,│ │     LLM     │
    │   база)     │ │  локально)  │ │             │
    └─────────────┘ └─────────────┘ └─────────────┘

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

rag-test-01/
├── app_config/          # Конфигурация
├── core/                # Классы, утилиты и т.д.
├── db/                  # База данных ChromaDB
├── models/              # Локальные ML-модели
├── static/              # Веб-интерфейс
├── cli.py               # CLI-клиент
├── client.py            # HTTP-клиент
├── daemon.py            # Backend (FastAPI)
└── index.py             # Точка входа для веба

Как это работает

  1. Индексация: документ разбивается на чанки (<=1024 символа), каждый чанк векторизуется моделью e5-large и сохраняется в ChromaDB
  2. Поиск: запрос пользователя векторизуется той же моделью, в ChromaDB ищутся ближайшие чанки
  3. Контекст: найденные чанки дополняются соседними для лучшего понимания
  4. Генерация: LLM получает промпт с контекстом и вопросом, генерирует ответ
  5. Источники: ответ содержит markdown + JSON-ссылки на использованные документы

About

Локальная RAG-система (Retrieval-Augmented Generation) для интеллектуального поиска по документам, веб-страницам или изображениям с ответами на естественном языке.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors