Векторный поиск
Векторный поиск — это основной механизм, обеспечивающий семантическое извлечение памяти в PRX-Memory. Вместо сопоставления ключевых слов векторный поиск сравнивает математическое сходство между эмбеддингами запроса и воспоминаний для поиска концептуально связанных результатов.
Принцип работы
- Эмбеддинг запроса: Запрос извлечения отправляется настроенному провайдеру эмбеддингов, который возвращает вектор.
- Вычисление сходства: Вектор запроса сравнивается со всеми сохранёнными векторами воспоминаний с помощью косинусного сходства.
- Оценка: Каждое воспоминание получает оценку сходства от -1.0 до 1.0 (выше — более похожее).
- Ранжирование: Результаты сортируются по оценке и объединяются с другими сигналами (лексическое сопоставление, важность, актуальность).
graph TB
QUERY["Запрос извлечения<br/>'SQL injection prevention'"]
QEMBED["Эмбеддинг запроса<br/>[0.12, -0.03, 0.87, ...]"]
subgraph Storage["Сохранённые векторы воспоминаний"]
M1["Воспоминание 1<br/>[0.11, -0.02, 0.85, ...]<br/>сходство: 0.97"]
M2["Воспоминание 2<br/>[0.45, 0.12, -0.33, ...]<br/>сходство: 0.23"]
M3["Воспоминание 3<br/>[0.09, -0.05, 0.82, ...]<br/>сходство: 0.94"]
end
RESULTS["Ранжированные результаты<br/>1. Воспоминание 1 (0.97)<br/>2. Воспоминание 3 (0.94)<br/>3. Воспоминание 2 (0.23)"]
QUERY --> QEMBED
QEMBED --> M1
QEMBED --> M2
QEMBED --> M3
M1 --> RESULTS
M2 --> RESULTS
M3 --> RESULTSКосинусное сходство
PRX-Memory использует косинусное сходство в качестве метрики расстояния. Косинусное сходство измеряет угол между двумя векторами, игнорируя их величину:
similarity(A, B) = (A . B) / (|A| * |B|)| Оценка | Значение |
|---|---|
| 0.95–1.0 | Почти идентичный смысл |
| 0.80–0.95 | Высокая связанность |
| 0.60–0.80 | Умеренная связанность |
| < 0.60 | Вероятно не связаны |
Комбинированное ранжирование
Векторное сходство — один из сигналов в многосигнальном ранжировании PRX-Memory. Итоговая оценка объединяет:
| Сигнал | Вес | Описание |
|---|---|---|
| Векторное сходство | Высокий | Семантическая релевантность из сравнения эмбеддингов |
| Лексическое сопоставление | Средний | Пересечение ключевых слов между запросом и текстом воспоминания |
| Оценка важности | Средний | Назначенная пользователем или вычисленная системой важность |
| Актуальность | Низкий | Более свежие воспоминания получают небольшой бонус |
Точные веса зависят от конфигурации извлечения и от того, включены ли эмбеддинги и реранкинг.
Производительность
Бенчмарк на 100 тыс. записей показывает:
| Метрика | Значение |
|---|---|
| Размер набора данных | 100 000 записей |
| Задержка p95 | 122.683 мс |
| Порог | < 300 мс |
| Метод | Лексический + важность + актуальность (без сетевых вызовов) |
INFO
Этот бенчмарк измеряет только путь ранжирования при извлечении, без сетевых вызовов эмбеддинга или реранкинга. Сквозная задержка зависит от времени отклика провайдера.
Соображения по масштабированию
| Размер набора данных | Рекомендуемый подход |
|---|---|
| < 10 000 | Полный перебор косинусного сходства (JSON или SQLite-бэкенд) |
| 10 000–100 000 | SQLite с векторным сканированием в памяти |
| > 100 000 | LanceDB с ANN-индексированием |
Для наборов данных, превышающих 100 000 записей, включите LanceDB-бэкенд для приближённого поиска ближайших соседей (ANN), обеспечивающего сублинейное время запроса.
Следующие шаги
- Движок эмбеддингов — как генерируются векторы
- Реранкинг — улучшение точности второго этапа
- Бэкенды хранения — выбор подходящего бэкенда хранения