Перейти к содержанию

Qdrant — векторное хранилище RAG

Автоматически составлено агентом 06.08.2026 из rag-sync.md. Требует ревью: проверить содержимое коллекций через REST API.

Быстрая справка

Параметр Значение
Контейнер rag-qdrant (docker)
Образ qdrant/qdrant:latest
Порты 6333 HTTP, 6334 gRPC (только rag-net + localhost)
Data volume /opt/rag-platform/data/qdrant/
Внутренний DNS http://qdrant:6333 (из rag-openwebui)
API-ключ QDRANT_API_KEY в /opt/rag-platform/.env ⚠ утёк 05.08

Коллекции

Open WebUI создаёт две коллекции по дефолту:

1. open-webui_knowledge

  • Роль: все Knowledge Collections из UI OpenWebUI, все точки в ОДНОЙ коллекции
  • Метрика: Cosine similarity
  • Размерность: 768 (nomic-embed-text)
  • on_disk: false (векторы в RAM для скорости)
  • Разделение knowledge: через payload-метаданные точек, не через отдельные Qdrant-коллекции

2. open-webui_files

  • Роль: отдельная коллекция для файлов (upload вне knowledge)
  • Метрика: Cosine
  • Размерность: 768

Почему одна коллекция на все knowledge (не per-KB): это дефолт OpenWebUI. Изменить нельзя без правки исходников.

Как посмотреть содержимое коллекции через REST API

# Из ragserver (внутри docker network не нужен API-key)
sudo docker exec rag-qdrant curl -s http://localhost:6333/collections/open-webui_knowledge | jq

# С хоста ragserver с API-ключом
export QDRANT_API_KEY="<из /opt/rag-platform/.env>"
curl -H "api-key: $QDRANT_API_KEY" \
  http://192.168.1.200:6333/collections/open-webui_knowledge | jq

# Список всех коллекций
curl -H "api-key: $QDRANT_API_KEY" \
  http://192.168.1.200:6333/collections | jq '.result.collections[].name'

# Количество точек в коллекции
curl -H "api-key: $QDRANT_API_KEY" \
  http://192.168.1.200:6333/collections/open-webui_knowledge/points/count \
  -X POST -H "Content-Type: application/json" -d '{}' | jq

# Пример: посмотреть первые 5 точек
curl -H "api-key: $QDRANT_API_KEY" \
  http://192.168.1.200:6333/collections/open-webui_knowledge/points/scroll \
  -X POST -H "Content-Type: application/json" \
  -d '{"limit": 5, "with_payload": true, "with_vector": false}' | jq

Backup / Restore

Live snapshot через Qdrant API

# Создать snapshot
curl -H "api-key: $QDRANT_API_KEY" \
  -X POST http://192.168.1.200:6333/collections/open-webui_knowledge/snapshots

# Список snapshots
curl -H "api-key: $QDRANT_API_KEY" \
  http://192.168.1.200:6333/collections/open-webui_knowledge/snapshots | jq

# Скачать snapshot файл
curl -H "api-key: $QDRANT_API_KEY" \
  http://192.168.1.200:6333/collections/open-webui_knowledge/snapshots/<name> \
  -o snapshot.tar

Snapshot-файлы лежат в /opt/rag-platform/data/qdrant/snapshots/.

Простой бэкап (offline)

sudo docker compose -f /opt/rag-platform/docker-compose.yml stop rag-qdrant
sudo tar czf /opt/backups/qdrant-$(date +%F).tar.gz -C /opt/rag-platform/data qdrant/
sudo docker compose -f /opt/rag-platform/docker-compose.yml start rag-qdrant

Задача 20 в TODO — настроить автобэкап.

Restore из бэкапа

sudo docker compose -f /opt/rag-platform/docker-compose.yml stop rag-qdrant
sudo rm -rf /opt/rag-platform/data/qdrant/*
sudo tar xzf /opt/backups/qdrant-YYYY-MM-DD.tar.gz -C /opt/rag-platform/data/
sudo docker compose -f /opt/rag-platform/docker-compose.yml start rag-qdrant

Полная перегенерация коллекции (если бэкап потерян)

Если Qdrant удалён, но файлы KB на месте → можно перегенерировать: 1. Удалить state.json в /opt/rag-sync/ (см. rag-sync.md) 2. Запустить sync-to-openwebui.sh — он проиндексирует все файлы заново 3. Время: ~10 минут для текущего объёма KB

API-ключ

Ключ используется: - Внутри контейнера rag-openwebui: env QDRANT_API_KEY (для запросов OpenWebUI → Qdrant) - Внутри контейнера rag-qdrant: env QDRANT__SERVICE__API_KEY (валидация входящих запросов)

Оба должны совпадать, иначе OpenWebUI не сможет писать/читать.

Ротация

  1. Сгенерировать новый ключ: openssl rand -hex 32
  2. Обновить обе env-переменные в /opt/rag-platform/.env и /opt/rag-platform/docker-compose.yml
  3. sudo docker compose -f /opt/rag-platform/docker-compose.yml up -d (пересоздаст оба контейнера)
  4. Проверить: sudo docker logs rag-openwebui | tail -20 — не должно быть 401/403 к Qdrant
  5. ⚠ RAG-02 в TODO — ключ утёк в чат 05.08.2026, ротировать обязательно

Производительность

  • Векторы в RAM (on_disk=false) — быстрый поиск, но при большом объёме упрёмся в 16GB RAM ragserver
  • Текущий объём: ~200 KB текста → ~1000 точек (768-dim × 4 байта) = ~3 MB в RAM
  • Порог беспокойства: ~10 млн точек = ~30 GB RAM → тогда включать on_disk=true

Известные проблемы

  • API-ключ утёк 05.08.2026 (RAG-02)
  • Данные в RAM — при рестарте контейнера чтение из bind mount занимает секунды-минуты в зависимости от объёма
  • Бэкапа нет (RAG-05)

Связанные файлы