Как использовать metadata filters в векторной базе?
Answer from AI
sobes.tech AI
Что хотят услышать интервьюеры:
Метаданные используют для сужения поиска до релевантного подмножества векторов: по источнику, языку, дате, tenant’у, типу документа и т.д. Обычно фильтр применяется до или вместе с nearest neighbor search, чтобы снизить шум и улучшить качество retrieval. Важно понимать, что фильтрация по метаданным — это не замена semantic search, а способ ограничить область поиска.
Определение:
Metadata filters в векторной базе — это условия по атрибутам записи, которые позволяют искать не по всему индексу, а только среди документов с подходящими свойствами. Метаданные обычно хранятся вместе с embedding’ом: например, source, category, lang, created_at, tenant_id. Фильтр можно комбинировать с векторным запросом, чтобы получать результаты, соответствующие и смыслу, и бизнес-условиям.
Пример использования:
Например, в RAG-системе нужно искать ответы только по документам конкретного клиента и только на русском языке. Тогда запрос ищет семантически похожие фрагменты, но отбирает их лишь из записей, где tenant_id = "acme" и lang = "ru".
query_text = "Как настроить доступ к API?"
query_embedding = embed(query_text)
results = vector_db.search(
vector=query_embedding,
top_k=5,
filter={
"tenant_id": "acme",
"lang": "ru",
"doc_type": "manual"
}
)
Пояснение кода:
Код не требует сложной логики: сначала текст запроса преобразуется в embedding, затем векторная база ищет ближайшие векторы, но только среди записей, удовлетворяющих фильтру. В примере поиск ограничен документами клиента acme, русскоязычными и относящимися к типу manual. Это уменьшает вероятность вернуть нерелевантный контент из других клиентов, языков или типов документов.
Ключевые моменты:
- Metadata filters ограничивают область поиска, но не заменяют семантическое сравнение embeddings.
- Их используют для мультитенантности, ACL/доступов, языков, временных окон, типов документов и других бизнес-ограничений.
- Фильтр может повышать качество retrieval и снижать latency за счет меньшего числа кандидатов.
- Важно, как векторная БД реализует фильтрацию: до ANN-поиска, после него или в гибридном режиме — это влияет на производительность и recall.
- Слишком строгий фильтр может “обрезать” хорошие результаты, поэтому условия нужно подбирать аккуратно.
- Для продакшена полезно хранить метаданные в нормализованном виде и заранее продумывать индексы под частые фильтры.