Семантический поиск по памяти AI: векторы вместо grep Skip to content

Семантический поиск по памяти AI: векторы вместо grep

Семантический поиск по памяти AI: векторы вместо grep

Проблема: память есть, а найти — нельзя

Современные AI-агенты хранят память в markdown-файлах. Это удобно: файлы читаемы человеком, их можно редактировать вручную, они легко копируются и версионируются. Но есть обратная сторона — когда файлов становится десятки или сотни, найти нужную запись превращается в боль.

Вы вспоминаете: «Какое кеширование мы выбрали для API?». Открываете папку memory, листаете файлы. Ctrl+F по слову «кеш» — ничего. Потому что в файле написано «Redis с TTL 300 секунд», а слова «кеш» там нет. Grep молчит. Вы теряете 15 минут на ручной поиск — или сдаётесь и спрашиваете AI заново, теряя контекст.

Это классическая проблема: ключевые слова не совпадают с формулировками. Память написана в одном стиле, а вопрос задан в другом. Традиционный поиск бессилен.

Решение: семантический поиск через векторы

Инструмент memsearch решает эту проблему. Он берёт ваши markdown-файлы памяти, нарезает на фрагменты, превращает каждый фрагмент в вектор (эмбеддинг) и сохраняет в векторную базу данных Milvus. После этого вы можете искать по смыслу, а не по буквам.

Запрос «какое кеширование мы выбрали» найдёт фрагмент про Redis с TTL — потому что векторное пространство понимает семантическую близость. Слова разные, смысл один.

Гибридный поиск: векторы + текст

memsearch использует гибридный ретривер — комбинацию двух подходов:

  • Dense vectors (эмбеддинги) — семантический поиск. Находит фрагменты, близкие по смыслу, даже если формулировки完全不同.
  • BM25 (полнотекстовый поиск) — классический статистический поиск по терминам. Хорош для точных совпадений: имён, артефактов, кода.

Результаты обоих методов объединяются через Reciprocal Rank Fusion (RRF) — алгоритм, который пересчитывает релевантность с учётом позиций в обоих списках. Итог: вы получаете и семантические, и точные совпадения, отсортированные по релевантности.

Это принципиально лучше, чем чистый векторный поиск. Если вы ищете «функция parse_config из utils.py», векторный поиск может вернуть «настройки парсера» — похоже по смыслу, но не то. BM25 точно найдёт нужную функцию. Гибридный подход покрывает оба сценария.

Как устроен рабочий процесс

1. Установка. memsearch — Python-пакет, ставится одной командой. Никаких внешних зависимостей кроме Docker (для Milvus) или локального режима без Docker.

2. Индексация. Указываете путь к папке с markdown-файлами памяти. memsearch нарезает файлы на чанки, вычисляет эмбеддинги и загружает в Milvus. Каждый чанк идентифицируется по SHA-256 хешу содержимого — если файл не изменился, он не переиндексируется. Ноль лишних API-вызовов.

3. Поиск. Запрашиваете на естественном языке. Возвращаете релевантные фрагменты с указанием источника — какого файла и какого абзаца.

4. Автосинхронизация. Запускаете file watcher — и memsearch автоматически переиндексирует изменённые файлы. Память агента обновилась — индекс обновился сам. Никакого ручного вмешательства.

Провайдеры эмбеддингов

memsearch работает с любым провайдером:

  • OpenAI (text-embedding-3-small, text-embedding-3-large)
  • Google (text-embedding-004)
  • Voyage AI (voyage-3)
  • Ollama (локальные модели через API)
  • Полностью локальный режим — без API-ключей, модели запускаются на вашей машине

Для локального режима достаточно установить pip install "memsearch[local]" — всё остальное подтянется автоматически.

Почему markdown остаётся источником истины

Важная деталь: векторный индекс — это кэш, а не основное хранилище. Ваши markdown-файлы никогда не модифицируются. Индекс можно удалить и пересоздать в любой момент. Это значит:

  • Вы можете редактировать память вручную в любом редакторе
  • Файлы работают с git, как обычные текстовые файлы
  • Нет привязки к конкретной базе данных — переехали на другой сервер, проиндексировали заново
  • Память остаётся portable и читаемой человеком

Пример из жизни

У вас агент, который ведёт заметки о проектах. За три месяца накопилось 80+ файлов в папке memory. Вы спрашиваете:

«Какой подход к авторизации мы обсуждали для нового API?»

Без семантического поиска: grep по «авторизация» — может найтись, а может нет. Зависит от того, как именно записали.

С memsearch: поиск по смыслу найдёт фрагмент «JWT с refresh-токенами, срок жизни access — 15 минут» — даже если в файле нет слова «авторизация», а написано «аутентификация» или «auth flow».

Когда это нужно

  • У вас AI-агент с markdown-памятью, которая растёт со временем
  • Вы часто ищете прошлые решения и не можете их найти
  • Вы хотите, чтобы агент мог сам обращаться к своей памяти по смыслу
  • Вам нужна автосинхронизация — память обновилась, индекс обновился

Если память агента — это десятки файлов и сотни записей, ручной поиск не масштабируется. Семантический поиск решает задачу раз и навсегда.

Установка за 5 минут

# Установка
pip install memsearch

# Конфигурация (интерактивный мастер)
memsearch config init

# Индексация памяти
memsearch index ~/path/to/memory/

# Поиск
memsearch search "какое кеширование мы выбрали?"

# Автосинхронизация
memsearch watch ~/path/to/memory/

Для полностью локального режима (без API-ключей):

pip install "memsearch[local]"
memsearch config set embedding.provider local
memsearch index ~/path/to/memory/

Итого

memsearch превращает неструктурированную кучу markdown-файлов в интеллектуальную поисковую систему. Векторный семантический поиск + BM25 полнотекстовый поиск + RRF ранжирование. Автосинхронизация через file watcher. Ноль модификаций исходных файлов. Работает с любым провайдером эмбеддингов, включая полностью локальный.

Память AI-агента должна быть не только читаемой, но и находимой.

Скачать скилл (Markdown)
# Семантический поиск по памяти

Встроенная система памяти OpenClaw хранит всё в виде markdown-файлов — но по мере роста памяти на протяжении недель и месяцев найти одно конкретное решение с прошлого вторника становится невозможно. Поиска нет, только прокрутка файлов.

Этот сценарий добавляет **векторный семантический поиск** поверх существующих markdown-файлов памяти OpenClaw с помощью [memsearch](https://github.com/zilliztech/memsearch), чтобы вы могли мгновенно находить любое прошлое воспоминание по смыслу, а не только по ключевым словам.

## Что делает этот скилл

- Индексирует все ваши markdown-файлы памяти OpenClaw в векторную базу данных (Milvus) одной командой
- Ищет по смыслу: «какое кеширующее решение мы выбрали?» находит нужную запись, даже если слово «кеширование» в ней не встречается
- Гибридный поиск (плотные векторы + полнотекстовый BM25) с переранжированием RRF для наилучших результатов
- Хеширование содержимого SHA-256 означает, что неизменённые файлы никогда не переиндексируются — нулевые затраты на API-вызовы
- Файловый наблюдатель автоматически переиндексирует при изменениях файлов памяти, поэтому индекс всегда актуален
- Работает с любым провайдером эмбеддингов: OpenAI, Google, Voyage, Ollama или полностью локально (без API-ключа)

## Проблема

Память OpenClaw хранится в виде обычных markdown-файлов. Это отлично для переносимости и читаемости человеком, но в ней нет поиска. По мере роста памяти вам приходится либо искать по файлам через grep (только по ключевым словам, пропускает семантические совпадения), либо загружать целые файлы в контекст (тратит токены на нерелевантное содержимое). Вам нужен способ спросить «что я решил по поводу X?» и получить точный релевантный фрагмент, независимо от формулировки.

## Необходимые скиллы

- Скиллы OpenClaw не требуются — memsearch — это автономный Python CLI/библиотека
- Python 3.10+ с pip или uv

## Как настроить

1. Установите memsearch:
```bash
pip install memsearch
```

2. Запустите интерактивный мастер настройки:
```bash
memsearch config init
```

3. Проиндексируйте директорию памяти OpenClaw:
```bash
memsearch index ~/path/to/your/memory/
```

4. Ищите по памяти по смыслу:
```bash
memsearch search "what caching solution did we pick?"
```

5. Для живой синхронизации запустите файловый наблюдатель — он автоматически индексирует при каждом изменении файла:
```bash
memsearch watch ~/path/to/your/memory/
```

6. Для полностью локальной установки (без API-ключей) установите локальный провайдер эмбеддингов:
```bash
pip install "memsearch[local]"
memsearch config set embedding.provider local
memsearch index ~/path/to/your/memory/
```

## Ключевые выводы

- **Markdown остаётся основным источником данных.** Векторный индекс — это просто производный кеш, который можно перестроить в любой момент командой `memsearch index`. Ваши файлы памяти никогда не изменяются.
- **Умная дедупликация экономит деньги.** Каждый фрагмент идентифицируется хешем содержимого SHA-256. Повторный запуск `index` встраивает только новый или изменённый контент, поэтому вы можете запускать его так часто, как хотите, без лишних затрат на API-вызовы эмбеддингов.
- **Гибридный поиск превосходит чисто векторный.** Объединение семантического сходства (плотные векторы) с сопоставлением по ключевым словам (BM25) через Reciprocal Rank Fusion находит как запросы по смыслу, так и точные совпадения.

## Ссылки

- [memsearch GitHub](https://github.com/zilliztech/memsearch) — библиотека, лежащая в основе этого сценария
- [Документация memsearch](https://zilliztech.github.io/memsearch/) — полная справка по CLI, Python API и архитектуре
- [OpenClaw](https://github.com/openclaw/openclaw) — архитектура памяти, вдохновившая memsearch
- [Milvus](https://milvus.io/) — векторная база данных для хранения индексов