engram

Гибридный поиск

Векторный и полнотекстовый поиск в engram

Гибридный поиск

Engram комбинирует два метода поиска с alpha-weighted scoring для наилучших результатов.

Два метода поиска

Векторный поиск (HNSW cosine)

Основной метод. Использует HNSW (Hierarchical Navigable Small World) граф для приблизительного поиска ближайших соседей по cosine similarity.

Три индекса — каждое поле записи (context, action, result) имеет отдельный HNSW-индекс. Запрос ищется во всех трех индексах параллельно, результаты агрегируются.

Параметры HNSW (настраиваемые в engram.toml):

ПараметрПо умолчаниюОписание
max_connections16Максимум связей на узел (M)
ef_construction200Точность при построении графа
ef_search40Точность при поиске (больше = точнее, медленнее)
dimension1024Размерность вектора (определяется моделью эмбеддинга)

Разреженный поиск (BM25 через FTS5)

Полнотекстовый поиск через SQLite FTS5 с BM25 scoring. Индексирует три текстовых поля записи (context, action, result) через виртуальную таблицу memories_fts.

Эффективен для точного совпадения терминов, аббревиатур и имен собственных, где векторный поиск может быть неточным.

Alpha-weighted scoring

Финальный score каждого результата вычисляется как взвешенная комбинация:

final_score = 0.7 * vector_score + 0.3 * sparse_score
  • 70% вектор — семантическое понимание запроса
  • 30% sparse — точное совпадение терминов

Коэффициенты зафиксированы в search_handler.rs.

HyDE (Hypothetical Document Embeddings)

Для сложных запросов engram использует HyDE — технику улучшения поиска через генерацию гипотетического документа.

Процесс:

  1. LLM получает поисковый запрос
  2. LLM генерирует гипотетическую запись памяти, которая могла бы ответить на запрос
  3. Гипотетическая запись эмбеддируется вместо оригинального запроса
  4. Поиск выполняется по эмбеддингу гипотезы

HyDE улучшает поиск, когда запрос формулируется в терминах проблемы, а релевантные записи описывают решение.

Graceful degradation

При недоступности API эмбеддингов (ошибки сети, невалидный API-ключ) поиск деградирует до FTS5-only:

  • Только BM25 scoring
  • Без векторной компоненты
  • Ответ содержит флаг degraded: true

Кросс-проектный поиск

При указании параметра project поиск:

  1. Ищет в указанном проекте с полным весом
  2. Ищет в других проектах с пониженным score multiplier
  3. Insights (тип insight) не привязаны к проекту и всегда возвращаются

Трехпольное эмбеддирование

Каждая запись хранит три вектора эмбеддинга:

ПолеНазначение
embedding_contextСемантика ситуации
embedding_actionСемантика действия
embedding_resultСемантика результата

Модуль engram-embeddings использует EmbeddingProvider trait из engram-llm-client. Провайдеры: Voyage AI (voyage-code-3, 1024 dim) или deterministic (для тестов).