Все уроки
ДанныеПродвинутый11 мин чтенияПолезно знать

Векторные базы данных

Поиск по смыслу: храните эмбеддинги и быстро находите ближайшие.

  • Embeddings
  • ANN / HNSW
  • pgvector
  • Hybrid search
Шаг 1/5
Пользователь спрашивает: «Какие у нас правила возврата?» Голая LLM ваших документов не видела и уверенно гадает. 90 дней? Мимо.

За 30 секунд

Векторная база данных хранит эмбеддинги — списки чисел, отражающие смысл текста, изображений или других данных, — и находит самые похожие на запрос. Она использует индексы приближённого поиска ближайших соседей (ANN), например HNSW, чтобы искать среди миллионов векторов за миллисекунды. На этом построены семантический поиск, рекомендации и retrieval для AI-ассистентов (RAG). Можно использовать отдельный движок или расширение вроде pgvector.

Не в моём ежедневном стеке — я понимаю принципы и изучу детали, когда это понадобится проекту.

Почему это важно

  • Поиск по ключевым словам не работает, когда люди называют одно и то же разными словами. Эмбеддинги сопоставляют «дешёвые авиабилеты» с «бюджетными перелётами», поэтому семантический поиск ощущается умнее.
  • От этого зависит retrieval-augmented generation (RAG): LLM отвечает по вашим документам, только если вы быстро находите нужные фрагменты.
  • Команды выбирают между добавлением векторов в существующую базу (pgvector, Elasticsearch, Redis) и отдельным движком; правильный выбор зависит от масштаба, фильтров и навыков команды.
  • Он дополняет, а не заменяет поиск по ключевым словам вроде Algolia или BM25 в Elasticsearch: лучшие системы объединяют оба в гибридном поиске.

Как это работает

01Эмбеддинги: смысл как координаты

Модель эмбеддингов превращает фрагмент контента в вектор, например из 1,024 чисел. Представьте огромную карту, где похожие смыслы находятся рядом: «собака» рядом со «щенком» и далеко от «счёта-фактуры». Модель обучена так, чтобы расстояние на этой карте отражало сходство. Вы один раз превращаете документы в эмбеддинги и сохраняете векторы; во время запроса вы кодируете вопрос той же моделью и ищете ближайших соседей. Сходство измеряется косинусным сходством (угол между векторами), скалярным произведением или евклидовым расстоянием (L2). Большинство текстовых моделей выдают нормализованные векторы, поэтому косинус и скалярное произведение ранжируют одинаково.

  • Размерность: сколько чисел в каждом векторе (например, 384, 768, 1024, 1536, 3072).
  • Всегда используйте одну и ту же модель для документов и запросов; векторы разных моделей несравнимы.
  • Смена модели означает пересчёт всех эмбеддингов, поэтому сохраняйте имя и версию модели вместе с каждым вектором.

02Почему точный поиск не масштабируется и как помогает ANN

Точный поиск сравнивает запрос с каждым сохранённым вектором. Для 10,000 векторов это нормально; для 50 миллионов с 1,024 измерениями — слишком медленно. Индексы приближённого поиска ближайших соседей (ANN) жертвуют небольшой точностью ради огромной скорости. HNSW (Hierarchical Navigable Small World) строит многоуровневый граф: верхние уровни — разреженные магистрали, нижние — плотные местные улицы. Поиск начинается сверху, жадно движется к запросу и спускается вниз. IVF (inverted file) кластеризует векторы и ищет только в ближайших кластерах. Качество измеряется recall — долей настоящих ближайших соседей, которую возвращает индекс. Хорошие настройки дают 95–99% recall за несколько миллисекунд.

  • HNSW: лучший баланс recall и скорости, больше памяти, медленнее строится.
  • IVF: меньше памяти и быстрее строится, требует обучения на данных и настройки probes.
  • Квантизация: хранение векторов в меньшем числе бит (int8, binary) для экономии памяти, с пересчётом оценок для точности.

03Начинаем с pgvector в PostgreSQL

Если у вас уже работает PostgreSQL, pgvector — часто самый простой старт: векторы живут рядом с вашими строками, транзакции, JOIN-ы, бэкапы и контроль доступа достаются бесплатно, а фильтры — обычный SQL. Расширение добавляет тип vector (и halfvec для 16-битного хранения), операторы расстояния (<-> для L2, <=> для косинусного расстояния, <#> для отрицательного скалярного произведения) и индексы HNSW и IVFFlat. Используйте класс операторов, соответствующий вашему расстоянию: индекс, построенный с vector_cosine_ops, помогает только запросам с сортировкой по <=>. Увеличьте hnsw.ef_search для лучшего recall ценой некоторой задержки.

sql
CREATE EXTENSION IF NOT EXISTS vector;
 
CREATE TABLE doc_chunks (
  id         bigserial PRIMARY KEY,
  doc_id     bigint NOT NULL,
  tenant_id  int    NOT NULL,
  content    text   NOT NULL,
  embedding  vector(1024) NOT NULL
);
 
CREATE INDEX ON doc_chunks USING hnsw (embedding vector_cosine_ops)
  WITH (m = 16, ef_construction = 64);
 
SET hnsw.ef_search = 100;
SELECT id, content, 1 - (embedding <=> $1) AS similarity
FROM doc_chunks WHERE tenant_id = 7
ORDER BY embedding <=> $1 LIMIT 10;

04Специализированные векторные базы данных

Специализированные движки вроде Qdrant, Weaviate, Milvus и Pinecone построены вокруг векторного поиска. Они предлагают быстрый поиск с фильтрами, квантизацию, шардирование по узлам, функции multi-tenancy, разреженные векторы для гибридного поиска и managed-облачные варианты. Вы храните точки, состоящие из ID, одного или нескольких векторов и payload (метаданных), по которому фильтруете. Компромисс — ещё одна система, которую нужно запускать, защищать и синхронизировать с основной базой. Практическое правило: до нескольких миллионов векторов при умеренном трафике обычно хватает pgvector или вашего существующего поискового движка; при десятках миллионов векторов, тяжёлой фильтрации или строгих требованиях к задержке специализированный движок оправдывает себя.

bash
# Qdrant: create a collection and search with a filter (HTTP API)
curl -X PUT http://localhost:6333/collections/docs -H 'Content-Type: application/json' \
  -d '{ "vectors": { "size": 1024, "distance": "Cosine" } }'
 
curl -X POST http://localhost:6333/collections/docs/points/query \
  -H 'Content-Type: application/json' -d '{
    "query": [0.01, 0.12, 0.03],
    "filter": { "must": [ { "key": "tenant_id", "match": { "value": 7 } } ] },
    "limit": 10, "with_payload": true
  }'

05Гибридный поиск и реранкинг

Векторы отлично понимают смысл, но слабы на точных токенах: коды товаров, имена, сообщения об ошибках. Поиск по ключевым словам (BM25) — наоборот. Гибридный поиск выполняет оба и объединяет списки, чаще всего через reciprocal rank fusion (RRF): каждый документ получает 1 / (k + rank) в каждом списке, и итоговый порядок определяют суммы. RRF не требует нормализации оценок, поэтому он так популярен. После слияния cross-encoder реранкер может переоценить топ-50–100 кандидатов, читая запрос и документ вместе; он медленнее, но намного точнее, поэтому запускается только на коротком списке.

sql
-- Hybrid in PostgreSQL: full-text + vector, merged with RRF (k = 60)
WITH kw AS (
  SELECT id, row_number() OVER (ORDER BY ts_rank(tsv, q) DESC) AS r
  FROM doc_chunks, websearch_to_tsquery('english', $2) q
  WHERE tsv @@ q ORDER BY r LIMIT 50
), vec AS (
  SELECT id, row_number() OVER (ORDER BY embedding <=> $1) AS r
  FROM doc_chunks ORDER BY embedding <=> $1 LIMIT 50
)
SELECT id, sum(1.0 / (60 + r)) AS score
FROM (SELECT * FROM kw UNION ALL SELECT * FROM vec) s
GROUP BY id ORDER BY score DESC LIMIT 10;

Когда применять

  • Семантический поиск по документам, справочным центрам, тикетам или описаниям товаров.
  • Retrieval для RAG-ассистентов, которые должны отвечать по вашему собственному контенту.
  • Рекомендации и «похожие товары» на основе эмбеддингов контента или поведения.
  • Дедупликация и кластеризация почти одинаковых текстов или изображений.

Когда не стоит

  • Точный поиск по ID, SKU или условиям фильтра; обычный индекс быстрее и точен.
  • Небольшие коллекции из нескольких тысяч элементов, где достаточно точного поиска в памяти или в PostgreSQL.
  • Когда пользователи в основном ищут точные названия и коды; им лучше послужит хороший поиск по ключевым словам.

Альтернативы

  • pgvector (PostgreSQL)

    Векторы рядом с реляционными данными, с SQL-фильтрами и транзакциями; для многих команд самый простой старт.

  • Qdrant / Weaviate / Milvus

    Open-source специализированные движки с сильной фильтрацией, квантизацией и масштабированием, self-hosted или managed.

  • Pinecone

    Полностью управляемая serverless векторная база; никакой эксплуатации, оплата по потреблению.

  • Elasticsearch / OpenSearch / Redis

    Добавляют векторный поиск в движок, который у вас, возможно, уже работает, со встроенным поиском по ключевым словам для гибрида.

Лучшие практики

  1. Выбирайте модель эмбеддингов, оценивая её на своих запросах, а не только по месту в рейтинге.
  2. Сохраняйте имя и версию модели с каждым вектором и планируйте полный пересчёт эмбеддингов.
  3. Сопоставляйте класс операторов индекса или метрику с расстоянием, которое ожидает модель (обычно косинус).
  4. Измеряйте recall относительно точного поиска на выборке, прежде чем настраивать параметры вроде ef_search.
  5. Используйте гибридный поиск (ключевые слова плюс векторы) и реранкер для финального топа результатов.
  6. Применяйте фильтры по тенанту и правам доступа внутри векторного запроса, а не только после retrieval.
  7. Храните источник истины в основной базе и синхронизируйте векторы асинхронно и идемпотентно.

Частые ошибки

  • Смешивать в одном индексе векторы двух моделей эмбеддингов, что незаметно даёт бессмысленное ранжирование.
  • Превращать целый длинный документ в один вектор: смысл размывается, и retrieval упускает детали.
  • Фильтровать результаты после векторного поиска топ-10, получая ноль результатов при избирательных фильтрах.
  • Считать векторный поиск точным и вообще не измерять recall или релевантность.
  • Забывать, что память индекса растёт как размерность, умноженная на число векторов, и упираться в RAM в продакшене.

Глубже

06Настройка HNSW: m, ef_construction, ef_search

m — число связей на узел. Большее m улучшает recall на данных высокой размерности, но увеличивает память и время построения; 16 — частое значение по умолчанию, 32–64 — для сложных наборов данных. ef_construction — размер списка кандидатов при построении; чем больше, тем лучше граф и медленнее вставки (типично 64–200). ef_search — список кандидатов во время запроса и главный регулятор в рантайме: больше значит лучше recall и выше задержка, и он должен быть не меньше LIMIT. Настраивайте эмпирически: возьмите 1,000 тестовых запросов, вычислите точных соседей последовательным сканированием, затем перебирайте ef_search и стройте график recall at 10 против p95 задержки. Построение HNSW требует много памяти; в PostgreSQL на время построения увеличьте maintenance_work_mem и max_parallel_maintenance_workers.

sql
-- Build faster with more memory and workers (PostgreSQL)
SET maintenance_work_mem = '4GB';
SET max_parallel_maintenance_workers = 7;
CREATE INDEX CONCURRENTLY idx_chunks_emb
  ON doc_chunks USING hnsw (embedding vector_cosine_ops) WITH (m = 16, ef_construction = 128);
 
-- Filtered queries: keep scanning until enough rows match (pgvector 0.8+)
SET hnsw.iterative_scan = relaxed_order;

07Память, квантизация и пересчёт оценок

Вектор float32 из 1,024 измерений занимает 4 KB. Десять миллионов таких — около 40 GB без учёта накладных расходов индекса, а HNSW хочет держать горячую часть в RAM. Квантизация это уменьшает. Половинная точность (halfvec в pgvector) вдвое сокращает размер почти без потери recall. Скалярная квантизация в int8 сокращает его в четыре раза. Бинарная квантизация хранит один бит на измерение — в 32 раза меньше — и удивительно хорошо работает на многих современных моделях эмбеддингов в сочетании с пересчётом оценок (rescoring): ищите по компактному индексу, скажем, топ-200 кандидатов, затем переранжируйте их по векторам полной точности. Движки вроде Qdrant, Milvus и Elasticsearch реализуют этот паттерн нативно; в pgvector можно проиндексировать бинарное выражение и пересчитать оценки в SQL.

sql
-- pgvector: binary-quantized index with full-precision rescoring
CREATE INDEX ON doc_chunks USING hnsw
  ((binary_quantize(embedding)::bit(1024)) bit_hamming_ops);
 
SELECT id FROM (
  SELECT id, embedding FROM doc_chunks
  ORDER BY binary_quantize(embedding)::bit(1024) <~> binary_quantize($1)
  LIMIT 200
) candidates
ORDER BY embedding <=> $1 LIMIT 10;

08Свежесть векторов: загрузка и пересчёт эмбеддингов

Векторы — производные данные. Относитесь к созданию эмбеддингов как к pipeline: когда документ меняется, событие (строка outbox или задача в очереди) запускает разбиение на чанки и создание эмбеддингов, а результат записывается через upsert по стабильному ID, например doc_id плюс номер чанка, с удалением устаревших чанков того же документа. Делайте задачи идемпотентными и с ограничением частоты, потому что у API эмбеддингов есть квоты. Обновление модели требует плана миграции: создайте новую колонку или коллекцию для новой модели, заполните её в фоне, сравните бок о бок, переключите чтение за флагом, затем удалите старые векторы. HNSW-индексы немного деградируют при интенсивных обновлениях и удалениях; планируйте периодическую переиндексацию (REINDEX CONCURRENTLY в PostgreSQL) или полагайтесь на оптимизатор движка.

09Безопасность и приватность эмбеддингов

Эмбеддинги не анонимны. Исследования показали, что текст можно частично восстановить по его эмбеддингу, поэтому относитесь к векторам так же бережно, как к исходному контенту. Обеспечивайте контроль доступа во время запроса: фильтры по тенанту и правам внутри поиска, row-level security в PostgreSQL или отдельные коллекции для строгой изоляции. Отправляя контент во внешний API эмбеддингов, проверьте условия обработки данных и не отправляйте секреты или лишние персональные данные. Удаление документа должно удалять и его векторы — это важно для удаления данных по GDPR. Наконец, найденный контент при использовании в RAG может содержать prompt injection, поэтому считайте извлечённый текст в промпте недоверенными данными.

Реальные ситуации

01

Семантический поиск для справочного центра

Проблема

В справочном центре SaaS 3,000 статей. Пользователи ищут своими словами, и поиск по ключевым словам ничего не возвращает для половины запросов.

Как решить

Начните просто: включите pgvector в существующем PostgreSQL. Разбейте статьи на чанки по несколько сотен токенов с сохранением заголовков, создайте эмбеддинги одной моделью и сохраните doc_id, текст чанка и версию модели. Создайте HNSW-индекс с косинусными операторами. Постройте гибридный поиск: полнотекстовый поиск PostgreSQL плюс векторный поиск, объединённые через RRF, как в уроке. Соберите 100 реальных запросов из логов поиска, разметьте правильные статьи и сравните долю запросов без результатов и recall at 5 до и после. Пересчитывайте эмбеддинги изменённых статей задачей в очереди при публикации. Новая база данных при таком масштабе не нужна.

02

Поиск с фильтрами возвращает слишком мало результатов

Проблема

Маркетплейс ищет по 20 миллионам эмбеддингов объявлений с фильтрами по городу и категории. Для маленьких городов запросы часто возвращают два-три результата вместо двадцати.

Как решить

ANN-индекс сначала возвращает ближайших кандидатов, а фильтр затем отбрасывает большинство из них. В pgvector 0.8+ включите итеративное сканирование через SET hnsw.iterative_scan = relaxed_order и при необходимости увеличьте hnsw.max_scan_tuples. Для очень избирательных фильтров позвольте планировщику использовать B-tree индекс по городу и вычислить точное расстояние по небольшому подмножеству, либо создайте частичные HNSW-индексы для крупных категорий. В специализированном движке вроде Qdrant создайте payload-индексы по городу и категории, чтобы фильтрация шла во время обхода графа. Проверяйте recall-тестами на запросах по маленьким городам, а не только по глобальным средним.

03

Обновление модели эмбеддингов

Проблема

Команда хочет перейти на более новую модель эмбеддингов с лучшим мультиязычным качеством. У них 8 миллионов чанков, закодированных старой моделью, и поиск должен продолжать работать.

Как решить

Добавьте новую колонку (или коллекцию) для векторов новой модели со своей размерностью и индексом; никогда не смешивайте их. Заполняйте её в фоне воркером с ограничением частоты, начиная с самого нового и самого просматриваемого контента. Пока идёт заполнение, новые и изменённые документы получают оба эмбеддинга. Проведите офлайн-оценку на размеченном наборе запросов и теневое сравнение на живых запросах. Когда новая модель выигрывает, переключите чтение за feature flag, следите за click-through и долей запросов без результатов, оставьте старые векторы на окно для отката, затем удалите старую колонку и индекс, чтобы освободить память.

Шпаргалка

Включить pgvector
CREATE EXTENSION IF NOT EXISTS vector;
Косинусный HNSW-индекс
CREATE INDEX ON items USING hnsw (embedding vector_cosine_ops);
Ближайшие по косинусному расстоянию
SELECT id FROM items ORDER BY embedding <=> $1 LIMIT 10;
Выше recall во время запроса
SET hnsw.ef_search = 100;
Запросы с фильтрами продолжают сканирование
SET hnsw.iterative_scan = relaxed_order;
Хранение с половинной точностью
embedding halfvec(1024) -- index with halfvec_cosine_ops
Оценка RRF для одного списка
score = 1.0 / (60 + rank)
Коллекция Qdrant
PUT /collections/docs { "vectors": { "size": 1024, "distance": "Cosine" } }
Точный baseline для recall-тестов
SET enable_indexscan = off; -- then run the same ORDER BY query

Вопросы и ответы

Q1Что такое эмбеддинг?

Эмбеддинг — это список чисел фиксированной длины, представляющий смысл некоторого контента и полученный обученной моделью. Модель располагает похожие элементы рядом в этом векторном пространстве, поэтому «сбросить пароль» и «я забыл логин» оказываются рядом даже без общих слов. Эмбеддинги сравнивают косинусным сходством, скалярным произведением или евклидовым расстоянием. Сравнивать можно только эмбеддинги одной и той же модели и версии. Это мост между неструктурированным контентом и быстрым математическим поиском, на нём работают семантический поиск, рекомендации, кластеризация и RAG.

Q2Нужна ли мне специализированная векторная база данных?

На старте чаще всего нет. Если вы уже используете PostgreSQL, pgvector справится с миллионами векторов с HNSW-индексами, SQL-фильтрами, транзакциями и вашими существующими бэкапами. Elasticsearch, OpenSearch и Redis тоже поддерживают векторный поиск. Специализированный движок вроде Qdrant, Milvus, Weaviate или Pinecone имеет смысл при десятках или сотнях миллионов векторов, тяжёлом поиске с фильтрами, строгой задержке при высокой конкурентности или при потребности в функциях вроде продвинутой квантизации и multi-vector поиска. Цена — ещё одна система, которую нужно эксплуатировать и синхронизировать. Я бы начал с того, что есть, измерил и переходил, когда цифры это оправдывают.

Q3Как работает HNSW?

HNSW строит многоуровневый граф, где каждый вектор — узел, связанный со своими близкими соседями. Верхние уровни содержат мало узлов с длинными связями, как автомагистрали; нижние — больше узлов с короткими связями, как местные улицы, а самый нижний уровень содержит все векторы. Поиск начинается с точки входа на верхнем уровне, жадно переходит к соседу, ближайшему к запросу, затем спускается на уровень ниже и повторяет, заканчивая локальным поиском на нижнем уровне. Параметры m (связей на узел) и ef_construction управляют качеством построения и памятью; ef_search управляет балансом recall и скорости во время запроса.

Q4Что такое гибридный поиск и зачем он нужен?

Гибридный поиск объединяет поиск по ключевым словам, обычно BM25, с векторным сходством и сливает результаты. Каждый метод ошибается по-своему: векторы понимают перефразирования, но могут упустить точные термины вроде кодов товаров или имён, а поиск по ключевым словам находит точные токены, но упускает синонимы и намерение. Если запустить оба и объединить через reciprocal rank fusion, в большинстве оценок результаты получаются устойчивее, чем у каждого по отдельности. Многие движки поддерживают это нативно: Elasticsearch и OpenSearch, Weaviate, Qdrant с разреженными векторами или PostgreSQL, если объединить полнотекстовый поиск и pgvector в одном запросе. Реранкер на объединённом топе ещё больше повышает точность.

Q5Как работать с фильтрами, например по данным тенанта, в векторном поиске?

Фильтр должен быть частью поиска, а не применяться после него. Если взять топ-10 ближайших векторов и затем убрать результаты других тенантов, можно остаться ни с чем. Специализированные движки применяют фильтры по payload во время обхода графа и индексируют для этого поля payload. В pgvector используйте WHERE; начиная с версии 0.8, итеративное сканирование индекса (hnsw.iterative_scan) продолжает поиск, пока достаточно строк не пройдёт фильтр, а для очень избирательных фильтров лучше может подойти B-tree индекс или частичный индекс на тенанта. Для строгой изоляции можно использовать отдельные коллекции или партиции на тенанта ценой большего числа объектов.

Q6Как выбрать модель эмбеддингов?

Начните с требований: языки, тип контента (код, юридические тексты, данные о товарах), максимальная длина входа, хостинг (API или self-hosted ради приватности) и стоимость. Составьте шорт-лист из нескольких моделей по публичным бенчмаркам вроде MTEB, затем оцените их на своих данных: соберите от 50 до 200 реальных запросов с документами, которые должны находиться, и измерьте recall at 10 и MRR для каждой модели. Учитывайте размерность: более длинные векторы могут быть точнее, но стоят памяти; многие современные модели поддерживают укороченные векторы (Matryoshka embeddings) с небольшой потерей качества. Что бы вы ни выбрали, сохраняйте версию модели, чтобы потом можно было мигрировать.

Вопросы уровня senior

S1pgvector или специализированная векторная база для 50 миллионов векторов?

С pgvector это возможно, но компромиссы обостряются. 50 миллионов float-векторов размерности 1,024 — это около 200 GB в сыром виде; с halfvec или бинарной квантизацией плюс пересчётом оценок индекс может поместиться в RAM большой машины, и вы сохраняете SQL, транзакции и единую схему бэкапов. Но построение HNSW занимает часы, высокая интенсивность записи усложняет обслуживание, а PostgreSQL масштабируется вертикально, так что очень высокая конкурентность запросов означает read-реплики. Специализированный движок шардирует автоматически, фильтрует во время обхода через payload-индексы, имеет встроенную квантизацию и многоуровневое хранение — ценой второй системы и pipeline синхронизации. Я бы провёл бенчмарк обоих на реальных данных с реалистичными фильтрами и целевыми p95 задержки и recall, а затем решил по стоимости и удобству эксплуатации.

S2Как оценить retrieval-систему от начала до конца?

Разделяйте качество retrieval и качество генерации. Для retrieval соберите размеченный набор реальных запросов с релевантными чанками и измеряйте recall at k, MRR или nDCG для каждой конфигурации: размер чанка, модель эмбеддингов, веса гибрида, реранкер. Отдельно измеряйте recall индекса относительно точного поиска, чтобы понимать, откуда промахи — от ANN-индекса или от эмбеддингов. Отслеживайте задержку на p95 и p99 и стоимость запроса. В онлайне мониторьте долю запросов без результатов, click-through или принятие ответов и выборочно разбирайте неудачи. Храните набор для оценки в системе контроля версий и запускайте его в CI при любых изменениях, чтобы смена модели или чанкинга не могла незаметно ухудшить результаты.

S3Как спроектировать multi-tenant векторный поиск со строгой изоляцией?

Есть три уровня. Общий индекс с фильтром по тенанту — самый эффективный: один граф HNSW, tenant_id как индексированный payload или условие WHERE и row-level security как второй барьер. Утечка возможна только при отсутствии фильтров, поэтому обеспечивайте их в слое доступа к данным и тестируйте. Партиционированное хранение, например партиции PostgreSQL для крупных тенантов или tenant-aware шардирование в Qdrant, делает граф каждого тенанта меньше, а фильтрацию — дешевле. Коллекция или база на тенанта даёт самую сильную изоляцию и простое удаление, но тысячи мелких индексов тратят память и усложняют эксплуатацию. Распространённая схема — общее хранилище для мелких тенантов и выделенные партиции или коллекции для крупных или регулируемых.

Глоссарий

Эмбеддинг
Список чисел, представляющий смысл контента и полученный обученной моделью.
Косинусное сходство
Сходство, измеряемое углом между двумя векторами; 1 означает одинаковое направление.
ANN
Приближённый поиск ближайших соседей: быстрый поиск, который может упустить нескольких настоящих соседей.
HNSW
Многоуровневый графовый индекс для ANN-поиска с отличной скоростью и recall.
Recall
Доля настоящих ближайших соседей, которую индекс действительно возвращает.
Квантизация
Хранение векторов в меньшем числе бит для экономии памяти, обычно с небольшой потерей точности.
Гибридный поиск
Объединение результатов поиска по ключевым словам и векторного поиска в один ранжированный список.
Реранкер
Модель, которая переоценивает короткий список кандидатов, читая запрос и документ вместе.
Чанкинг
Разбиение документов на небольшие фрагменты, чтобы каждый эмбеддинг отражал сфокусированный смысл.

Есть идея продукта?Давайте создадим его.

Расскажите о своей идее, продукте или команде. Обычно отвечаю в течение одного рабочего дня.