Weaviate — открытая (open-source) векторная СУБД и управляемый облачный сервис, предназначенные для семантического поиска, RAG-систем и приложений на эмбеддингах. Weaviate объединяет хранение векторов, ANN-поиск и гибридный dense+sparse подход с богатыми метаданными/фильтрами, а также модульной интеграцией с моделями эмбеддингов и переранжировщиками.
Связанные страницы: Vector index, Retriever, Cost optimization LLM, Model serving, Evals, Pinecone.
Где Weaviate уместен в стеке ИИ
- RAG (retrieval-augmented generation): хранение эмбеддингов чанков и быстрый top-k отбор релевантов для LLM.
- Семантический поиск: по базам знаний, тикетам, логам, каталогу товаров, коду.
- Индивидуальная «память» ассистентов: векторные заметки с фильтрами по времени/тегам/пользователям.
- Антидубли/кластеризация: поиск похожих объектов (описания, изображения через мультимодальные эмбеддинги).
Ключевая ценность — гибкость и контроль: можно развернуть on-prem, в облаке команды или использовать управляемый сервис.
Базовые понятия и модель данных
- Коллекция (класс) — логическая таблица объектов. У каждого объекта есть схема: набор свойств (атрибутов) и один или несколько векторных представлений.
- Объект — запись с id, набором свойств и вектором(ами).
- Вектор(ы) — эмбеддинги от выбранной модели. Возможны несколько векторных пространств для одной коллекции.
- Метаданные/фильтры — ключ-значение поля со строгими типами для отбора кандидатов до сравнения векторов.
- Модули — плагины для получения эмбеддингов, гибридного sparse-сигнала, переранжирования (reranker), Q&A и др.
| Примитив | Назначение | Комментарий |
|---|---|---|
| Коллекция | Группа однотипных объектов | Схема свойств + конфиг индекса |
| Объект | Документ/чанк/знание | id, свойства, один или несколько векторов |
| Вектор | Семантическое представление | Размерность зависит от модели эмбеддинга |
| Метаданные | Фильтрация кандидатов | Язык, дата, продукт, права доступа |
| Модуль | Интеграция модели/функции | text2vec/clip, sparse, reranker и др. |
Поисковые режимы: dense, sparse и гибрид
- Dense (векторный) поиск — классический ANN по косинусу/евклиду/другим метрикам; хорош, когда значение несут смысловые связи.
- Sparse (ключевые слова) — разрежённые векторы/лексические признаки; полезны для терминов, артикулов, имён собственных.
- Гибридный dense+sparse — объединение семантики и точных терминов. В проде часто даёт лучший Recall@k и NDCG на смешанных корпусах.
Рекомендация: при наличии терминов/артикулов, технических обозначений включайте гибрид; в чистых текстовых знаниях достаточно dense + переранжирование.
Паттерн RAG с Weaviate
- Подготовка корпуса: чистка, дедуп, чанкинг (обычно 400–1200 токенов, перекрытие 50–150), метаданные (источник, дата, язык, права).
- Эмбеддинги: выберите модель (моно/мультиязычную), нормализуйте векторы при необходимости.
- Запись: upsert объектов в коллекцию: vector + properties.
- Запрос: эмбеддинг запроса → top-k поиск с фильтрами по метаданным.
- Переранжирование: кросс-энкодер/ранжировщик на 20–200 кандидатах → 5–10 лучших чанков.
- Генерация: подайте чанки в LLM, требуйте цитирования источников и проверяйте faithfulness (см. Evals).
- Эксплуатация: мониторинг латентности/качества, инкрементальные обновления, кэш top-k для частых запросов.
Метаданные и фильтры: «срезаем воду» ещё до ANN
- Фильтруйте по разделу/языку/дате/типу до векторного сравнения — это экономит миллисекунды и токены в контексте (см. FinOps).
- Нормализуйте значения: фиксированные списки, единые форматы времени, аккуратные теги доступа.
- Продумайте схему заранее: не храните в метаданных гигантские массивы/строки — это бьёт по памяти и фильтрации.
Производительность и SLO
- Латентность: меряйте p50/p95/p99 поиска отдельно от времени переранжирования. Для интерактивного RAG ищите 100–300 мс на ANN + фильтры.
- Throughput: планируйте RPS, пики и параллелизм запросов. Трассируйте «запрос → ретрив → генерация» на уровне запроса.
- Recall@k/NDCG: держите «золотой» набор запросов и регулярно гоняйте offline-evals (см. Evals).
Экономика и эксплуатация (FinOps)
- Размерность векторов выбирайте под модель эмбеддингов — не «с запасом».
- k держите умеренным (5–10); «про запас 20+» обычно лишь раздувает латентность и контекст у LLM.
- Кэш: храните эмбеддинги вопросов и top-k результатов для частых запросов. Инвалидируйте при переиндексации.
- Инкрементальные апдейты вместо «редких крупных» заливок — сглаживают пиковые затраты и скачки качества.
Расширенные приёмы оптимизации — на странице Cost optimization LLM.
Сравнение с альтернативами
| Решение | Плюсы | Минусы | Когда выбрать |
|---|---|---|---|
| Weaviate (OS/облако) | Гибкость схемы, гибридный поиск, on-prem и managed-режимы, модули | Операционная сложность on-prem, тюнинг индекса на совести команды | Нужен контроль и гибкость, но сохранив простой API |
| Pinecone (managed) | SLA и «просто работает», фильтры/гибрид, быстрый выход в прод | Стоимость, вендор-лок-ин, «скрытая кухня» индексов | Если важны скорость и минимальный DevOps |
| Milvus/Weaviate-like self-host | Глубокая настройка и контроль | Нужен сильный SRE/observability, отказоустойчивость на вас | Крупные объёмы on-prem/air-gapped |
| pgvector/Elasticsearch | Интеграция с существующим стеком | Лимиты по масштабу/скорости | Малые объёмы, унификация в одной БД |
Примечание: выбор часто гибридный — «горячий» слой в Weaviate/managed, «холодные» архивы в объектном хранилище.
Лучшие практики внедрения
- Делайте дедуп перед индексацией; не тащите шаблонные «хвосты» документов.
- Применяйте гибрид на корпусах с терминами/артикулами; добавляйте переранжирование для «узких» вопросов.
- Разносите языки/домены по коллекциям либо явно маркируйте lang/domain и фильтруйте на запросе.
- Ведите версионирование эмбеддингов: новая модель → новый индекс/namespace; смешение эмбеддингов ухудшает Recall@k.
- Для приватных данных используйте строгие фильтры прав, не подмешивайте чужие пространства.
- Наблюдаемость: метрики p95, hit-rate кэшей, доля «пустых» выдач, тревоги на падение Recall@k.
Ограничения и риски
- Смешение эмбеддингов разных моделей в одной коллекции снижает качество — держите согласованность.
- Слабые метаданные → много «шумных» кандидатов, растут k и контекст у LLM.
- Отсутствие переранжирования на неоднозначных запросах — модель берёт релевантные, но не лучшие чанки.
- Нулевая наблюдаемость — улучшения «на глаз» вместо метрик.
Мини-чек-лист запуска в прод
- Цели: p95 поиска, Recall@k, доля ответов с цитатами у LLM.
- Схема метаданных: язык, дата, раздел/продукт, права доступа.
- Выбор модели эмбеддингов и размерности; подготовка «золотого» набора запросов.
- Чанкинг 400–1200 токенов, перекрытие 50–150; дедуп, нормализация.
- Кэш эмбеддингов и top-k; лимит k по сценариям.
- Переранжирование «по требованию»; гибридный поиск, если корпус терминный.
- Мониторинг: латентность, hit-rate, Recall@k/NDCG, «пустые» выдачи.
- Процедура переиндексации при смене модели эмбеддингов.
FAQ
Можно ли хранить несколько векторов на объект?
Да, это помогает обслуживать разные задачи/языки, но усложняет схему и хранение. Следите за согласованностью и выбором пространства при запросе.
Нужен ли гибридный поиск всегда?
Нет. Если корпус «чисто семантический», достаточно dense + переранжирование. Гибрид полезен для терминов, артикулов, имён собственных.
Как понять, что пора переиндексировать?
Падение Recall@k/NDCG на эталонном наборе, смена модели эмбеддингов, массовое обновление корпуса.
Как контролировать стоимость?
Умеренный k, фильтры метаданных до ANN, кэш эмбеддингов и top-k, инкрементальные апдейты. См. Cost optimization LLM.
Чем Weaviate отличается от Pinecone?
Weaviate даёт больше контроля (вплоть до self-host), модульность и гибрид «из коробки». Pinecone — быстрее в прод с управляемой эксплуатацией, но с менее прозрачной «кухней» индекса.
Мини-глоссарий
- ANN — приближённый поиск ближайших соседей.
- Эмбеддинг — векторное представление текста/объекта.
- Гибридный поиск — комбинирование dense и sparse сигналов.
- Переранжирование — доранжирование топ-кандидатов «тяжёлой» моделью.
- Recall@k / NDCG — полнота и качество ранжирования.
