Qdrant API на YDB
Qdrant‑совместимый REST API сервис для хранения и поиска векторов в YDB с точным или приближённым KNN‑поиском — векторы хранятся прямо в YDB.
Публичный demo‑endpoint:
http://ydb-qdrant.tech:8080Проверяем…Идеально как базовый URL Qdrant для IDE‑агентов (Roo Code, Cline) и RAG‑сервисов на YDB.
Почему YDB‑Qdrant
Персистентное хранение
Все данные записываются в распределённое хранилище YDB и сохраняются при перезапусках. Никакого in-memory режима — ваши векторы в безопасности.Транзакционность и консистентность
Сервис опирается на распределённые ACID‑транзакции YDB с изоляцией Serializable, поэтому векторы живут рядом с основными бизнес‑данными.Единая платформа данных
Строки, события и векторы хранятся в одной базе YDB — запросы пишутся на YQL, векторы хранятся прямо в YDB.Надёжность и эксплуатация
Используйте multi‑AZ, backup/restore и disaster recovery YDB вместо самостоятельной эксплуатации кластера Qdrant.Самовосстанавливающиеся коллекции
Коллекции автоматически пересоздаются при удалении. Сервис отслеживает время последнего доступа к коллекции для управления жизненным циклом тенантов.Гибкая интеграция
Можно использовать как hosted HTTP‑endpoint, так и Node.js‑пакет ydb-qdrant прямо внутри вашего бэкенда.Сравнение: YDB-Qdrant vs. Standalone Qdrant
| Функция | YDB-Qdrant | Standalone Qdrant |
|---|---|---|
| Движок хранения | YDB (Distributed SQL) | RocksDB / In-memory |
| Консистентность | Строгая (ACID Serializable) | Eventual / Настраиваемая |
| Масштабируемость | Горизонтальная (YDB) | Шардирование (ручное/managed) |
| Язык запросов | Qdrant REST API (YQL внутри) | Qdrant API (gRPC/REST) |
| Сложность эксплуатации | Низкая (переиспользование YDB) | Средняя (отдельный кластер) |
Где лучше всего подходит
- Для прототипов и экспериментов с векторным поиском на YDB.
- Для коллекций примерно до 10K–50K векторов.
- Для IDE‑агентов (Roo Code, Cline), ожидающих Qdrant API.
- Для сервисов, которые уже используют YDB и хотят быстро добавить векторный поиск (через HTTP или как Node.js‑пакет ydb-qdrant).
Планы
- Усиление аутентификации по тенантам (IAM/OAuth, ACL на коллекции) поверх уже реализованных X‑Tenant‑Id и forTenant() API.
- Квоты и rate limiting по тенантам (коллекции, RPS, размеры payload и батчей) плюс расширенный аудит операций.
- Поддержка больших коллекций (>100K векторов) через тюнинг индексов и оптимизацию auto-partitioning YDB.
- Лучшая поддержка высоконагруженных сценариев с миллионами векторов и более жёсткими требованиями по задержкам.
- Расширение покрытия Qdrant API на YDB (фильтры, facets, recommend/discover, batch‑поиск и др. расширенные режимы).
- Гибридный поиск, сочетающий векторное сходство с фильтрацией по payload для более точной выборки.
Как это работает под капотом
Документация
Быстрый старт
Настройка в Roo Code/Kilo Code
Публичный demo‑endpoint для IDE:
http://ydb-qdrant.tech:8080Проверяем…Публичный demo‑endpoint для IDE: http://ydb-qdrant.tech:8080 (вставьте в IDE/агент как базовый URL Qdrant).
Самостоятельный хостинг (Node.js)
- Клонируйте репозиторий и установите зависимости:
npm install - Укажите переменные окружения:
YDB_ENDPOINT,YDB_DATABASE - Настройте аутентификацию через переменные окружения:
YDB_SERVICE_ACCOUNT_KEY_FILE_CREDENTIALS|YDB_METADATA_CREDENTIALS|YDB_ACCESS_TOKEN_CREDENTIALS|YDB_ANONYMOUS_CREDENTIALS - Запустите:
npm run dev(разработка) илиnpm start(прод) - Укажите клиенту базовый URL:
http://localhost:8080
Также можно запускать как контейнер (Docker или docker-compose) с публичным образом ghcr.io/astandrik/ydb-qdrant:latest.
Запуск через Docker / docker-compose
- Скачайте образ:
docker pull ghcr.io/astandrik/ydb-qdrant:latest - Запустите через Docker:
docker run -d --name ydb-qdrant -p 8080:8080 ghcr.io/astandrik/ydb-qdrant:latest - Или через docker-compose:
docker-compose up -dс примером конфигурации из README.
Подробнее и все примеры: GitHub README
Использование как Node.js библиотеки
- Установка:
npm install ydb-qdrant - Использование:
import { createYdbQdrantClient } from "ydb-qdrant"; const client = await createYdbQdrantClient({ endpoint: "grpcs://ydb.serverless.yandexcloud.net:2135", database: "/ru-central1/...", defaultTenant: "myapp", // Аутентификация через YDB_*_CREDENTIALS env vars });
См. npm package для подробностей.
Всё-в-одном: локальный YDB + ydb-qdrant (Docker)
- Запустите один контейнер со встроенным локальным YDB:
docker run -d --name ydb-qdrant-local \ -p 8080:8080 -p 8765:8765 \ ghcr.io/astandrik/ydb-qdrant-local:latest - Порты:
8080— API ydb-qdrant,8765— YDB Embedded UI - Укажите клиенту базовый URL:
http://localhost:8080
Идеально для локальной разработки без внешнего кластера YDB. См. GitHub README для подробностей.
API кратко
Назначение
Используйте как базовый URL Qdrant для IDE‑агентов или приложений; векторы хранятся в YDB.Особенности
- Совместимые с Qdrant эндпоинты (коллекции, точки, поиск)
- Два режима поиска: точный (по умолчанию) и приближённый (bit‑quantized)
- Пакетные upsert и delete для массовых операций
- Разделение данных по тенантам через заголовок X‑Tenant‑Id
- Отслеживание последнего доступа к коллекциям для управления тенантами
- Самохостинг или публичный demo‑endpoint
- Также доступен как Node.js‑библиотека (createYdbQdrantClient)
Использование как HTTP‑сервис
curl -X PUT http://ydb-qdrant.tech:8080/collections/mycol \-H 'Content-Type: application/json' \-d '{"vectors":{"size":384,"distance":"Cosine","data_type":"float"}}'curl -X POST http://ydb-qdrant.tech:8080/collections/mycol/points/upsert \-H 'Content-Type: application/json' \-d '{"points":[{"id":"1","vector":[0.1,0.2,...384 vals...]}]}'curl -X POST http://ydb-qdrant.tech:8080/collections/mycol/points/search \-H 'Content-Type: application/json' \-d '{"vector":[0.1,0.2,...],"limit":5,"with_payload":true}'
Использование как Node.js‑пакет
Проверка состояния: GET /health → {"status":"ok"}// Установка: npm install ydb-qdrantimport { createYdbQdrantClient } from "ydb-qdrant";async function main() {// defaultTenant опционален; по умолчанию "default"const client = await createYdbQdrantClient({defaultTenant: "myapp",endpoint: "grpcs://lb.etn01g9tcilcon2mrt3h.ydb.mdb.yandexcloud.net:2135",database: "/ru-central1/b1ge4v9r1l3h1q4njclp/etn01g9tcilcon2mrt3h",});// Смена тенанта динамически (возвращает новый экземпляр клиента)const otherClient = client.forTenant("other-tenant");await client.createCollection("documents", {vectors: {size: 1536,distance: "Cosine",data_type: "float",},});await client.upsertPoints("documents", {points: [{ id: "doc-1", vector: [/* embedding */], payload: { title: "Doc 1" } },],});const result = await client.searchPoints("documents", {vector: [/* query embedding */],top: 10,with_payload: true,});console.log(result.points);}
Рекомендуемые размерности векторов
При создании коллекции необходимо указать размер вектора, соответствующий выбранной модели эмбеддингов. Ниже приведены распространённые модели с их размерностями и типичными сценариями использования:Коммерческие API‑модели
OpenAI
text-embedding-3-small
Размерность1536 (по умолчанию, можно уменьшать до 256–1536)
Сценарии использованияRAG, семантический поиск, универсальные эмбеддинги общего назначения
text-embedding-3-large
Размерность3072 (по умолчанию, можно уменьшать до 256, 512, 1024, 1536, 3072)
Сценарии использованияВысокоточный RAG, многоязычные задачи
text-embedding-ada-002
Размерность1536
Сценарии использованияУстаревшая, но широко используемая модель
OpenAI (Legacy)
text-search-curie-doc-001
Размерность4096
Сценарии использованияУстаревшая модель GPT‑3, снята с поддержки
text-search-davinci-doc-001
Размерность12288
Сценарии использованияУстаревшая модель GPT‑3, снята с поддержки
Cohere
embed-v4.0
Размерность256, 512, 1024, 1536 (по умолчанию)
Сценарии использованияМультимодальность (текст + изображение), RAG, корпоративный поиск
embed-english-v3.0
Размерность1024
Сценарии использованияАнглоязычный текст, семантический поиск, классификация
embed-multilingual-v3.0
Размерность1024
Сценарии использования100+ языков, поиск по длинным документам, кластеризация
gemini-embedding-001
Размерность3072 (настраиваемая)
Сценарии использованияМногоязычные задачи, общий RAG, задачи общего назначения
text-embedding-004
Размерность768
Сценарии использованияЭмбеддинги общего назначения для текста
text-embedding-005
Размерность768
Сценарии использованияУлучшенная версия text-embedding-004
text-multilingual-embedding-002
Размерность768
Сценарии использованияМногоязычные эмбеддинги текста
Open‑source‑модели (HuggingFace)
sentence-transformers/all-MiniLM-L6-v2
Размерность384
Сценарии использованияБыстрый семантический поиск, сценарии с ограниченными ресурсами
BAAI/bge-base-en-v1.5
Размерность768
Сценарии использованияRAG и поиск по документам на английском
BAAI/bge-large-en-v1.5
Размерность1024
Сценарии использованияВысокоточный RAG и поиск по английским текстам
BAAI/bge-m3
Размерность1024
Сценарии использованияМногоязычные сценарии, dense/sparse/multi‑vector
intfloat/e5-base-v2
Размерность768
Сценарии использованияОбщий поиск и ретривал для английского текста
intfloat/e5-large-v2
Размерность1024
Сценарии использованияВысокоточный ретривал для английских данных
intfloat/e5-mistral-7b-instruct
Размерность4096
Сценарии использованияВысокоразмерные векторы для продвинутых RAG‑сценариев
nomic-ai/nomic-embed-text-v1
Размерность768
Сценарии использованияУниверсальные эмбеддинги с открытыми весами
Как выбирать размерность
- Высокие размерности (1024–4096): Лучшая семантическая точность, но большее потребление памяти и вычислительных ресурсов
- Низкие размерности (384–768): Более быстрые запросы и меньшие затраты, подходят для многих сценариев
- Переменная размерность: Некоторые модели (OpenAI v3, Cohere v4) позволяют уменьшать размерность с минимальной потерей точности
- Устаревшие модели: Старые модели OpenAI GPT‑3 (Curie: 4096, Davinci: 12288) считаются устаревшими, но всё ещё могут использоваться