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 не сможет писать/читать.
Ротация¶
- Сгенерировать новый ключ:
openssl rand -hex 32 - Обновить обе env-переменные в
/opt/rag-platform/.envи/opt/rag-platform/docker-compose.yml sudo docker compose -f /opt/rag-platform/docker-compose.yml up -d(пересоздаст оба контейнера)- Проверить:
sudo docker logs rag-openwebui | tail -20— не должно быть 401/403 к Qdrant - ⚠ 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)
Связанные файлы¶
- rag-sync.md — процесс индексации
- openwebui.md — как OpenWebUI использует Qdrant
- rag-platform-docker.md — docker-стек