Что он добавляет по сравнению со встроенным движком
- Переранжирование и расширение запросов для лучшей полноты поиска.
- Индексирование дополнительных каталогов — документация проекта, заметки команды, любые файлы на диске.
- Индексирование транскриптов сессий — поиск по прошлым разговорам.
- Полностью локально — работает с официальным Plugin провайдера llama.cpp и автоматически загружает модели GGUF.
- Автоматический резервный вариант — если QMD недоступен, OpenClaw прозрачно переключается на встроенный движок.
Начало работы
Предварительные требования
- Установите QMD:
npm install -g @tobilu/qmdилиbun install -g @tobilu/qmd - Сборка SQLite, разрешающая расширения (
brew install sqliteна macOS). - QMD должен быть в
PATHGateway. - macOS и Linux работают без дополнительной настройки. Windows лучше всего поддерживается через WSL2.
Включение
~/.openclaw/agents/<agentId>/qmd/ и автоматически управляет жизненным циклом сайдкара
— коллекции, обновления и запуски embedding выполняются за вас.
Он предпочитает текущие формы коллекций QMD и MCP-запросов, но при необходимости
все еще переключается на альтернативные флаги шаблонов коллекций и старые имена MCP-инструментов.
Согласование при запуске также пересоздает устаревшие управляемые коллекции по их
каноническим шаблонам, когда более старая коллекция QMD с тем же именем все еще
присутствует.
Как работает сайдкар
- OpenClaw создает коллекции из файлов памяти вашей рабочей области и любых
настроенных
memory.qmd.paths, затем запускаетqmd update, когда менеджер QMD открывается, и периодически после этого (по умолчанию каждые 5 минут). Эти обновления выполняются через подпроцессы QMD, а не через обход файловой системы внутри процесса. Семантические режимы также запускаютqmd embed. - Коллекция рабочей области по умолчанию отслеживает
MEMORY.mdи деревоmemory/.memory.mdв нижнем регистре не индексируется как корневой файл памяти. - Собственный сканер QMD игнорирует скрытые пути и распространенные каталоги зависимостей/сборки,
такие как
.git,.cache,node_modules,vendor,distиbuild. Запуск Gateway по умолчанию не инициализирует QMD, поэтому холодный старт не импортирует runtime памяти и не создает долгоживущий наблюдатель до первого использования памяти. - Если вы все же хотите инициализировать QMD при запуске Gateway, задайте
memory.qmd.update.startupкакidleилиimmediate. Сmemory.qmd.update.onBoot: trueзапуск выполняет начальное обновление. СonBoot: falseзапуск пропускает это немедленное обновление, но все равно открывает долгоживущий менеджер, когда настроены интервалы обновления или embedding, чтобы QMD мог владеть своим обычным наблюдателем и таймерами. - Поиски используют настроенный
searchMode(по умолчанию:search; также поддерживаютсяvsearchиquery).searchиспользует только BM25, поэтому OpenClaw пропускает проверки готовности семантических векторов и обслуживание embedding в этом режиме. Если режим завершается ошибкой, OpenClaw повторяет попытку сqmd query. - Когда
searchModeравенquery, задайтеmemory.qmd.rerankкакfalse, чтобы использовать гибридный путь запросов QMD без переранжировщика. OpenClaw передает--no-rerankв прямой CLI-путь QMD иrerank: falseв MCP-инструмент запросов QMD. Для этой опции требуется QMD 2.1 или новее. - В выпусках QMD, которые объявляют фильтры по нескольким коллекциям, OpenClaw группирует коллекции из одного источника в один вызов поиска QMD. Более старые выпуски QMD сохраняют совместимый резервный путь с поиском по каждой коллекции.
- Если QMD полностью отказывает, OpenClaw переключается на встроенный движок SQLite.
Повторные попытки в ходе чат-ходов ненадолго откладываются после ошибки открытия, чтобы
отсутствующий бинарный файл или сломанная зависимость сайдкара не создавали шквал повторов;
openclaw memory statusи одноразовые CLI-проверки все равно напрямую перепроверяют QMD.
Первый поиск может быть медленным — QMD автоматически загружает модели GGUF (~2 ГБ) для
переранжирования и расширения запросов при первом запуске
qmd query.Производительность поиска и совместимость
OpenClaw поддерживает совместимость пути поиска QMD как с текущими, так и со старыми установками QMD. При запуске OpenClaw один раз на менеджер проверяет текст справки установленного QMD. Если бинарный файл объявляет поддержку нескольких фильтров коллекций, OpenClaw ищет по всем коллекциям из одного источника одной командой:memory + sessions все равно дают диверсификатору результатов входные данные из обоих
источников.
Более старые сборки QMD принимают только один фильтр коллекции. Когда OpenClaw обнаруживает одну
из таких сборок, он сохраняет путь совместимости и ищет по каждой коллекции
отдельно, прежде чем объединять результаты и удалять дубликаты.
Чтобы вручную проверить установленный контракт, выполните:
Переопределение моделей
Переменные окружения моделей QMD передаются без изменений из процесса Gateway, поэтому вы можете настраивать QMD глобально без добавления новой конфигурации OpenClaw:Индексирование дополнительных путей
Укажите QMD дополнительные каталоги, чтобы сделать их доступными для поиска:qmd/<collection>/<relative-path> в
результатах поиска. memory_get понимает этот префикс и читает из правильного
корня коллекции.
Индексирование транскриптов сессий
Включите индексирование сессий, чтобы искать по прошлым разговорам. QMD нужны и общий источник сессийmemorySearch, и экспортер транскриптов QMD:
~/.openclaw/agents/<id>/qmd/sessions/. Установка только
memorySearch.experimental.sessionMemory не экспортирует транскрипты в QMD.
Попадания по сессиям по-прежнему фильтруются через
tools.sessions.visibility. Видимость по умолчанию
tree не раскрывает несвязанные сессии того же агента. Если сессия,
диспетчеризованная Gateway, должна быть доступна для поиска из отдельной DM-сессии, задайте
tools.sessions.visibility: "agent" намеренно.
Область поиска
По умолчанию результаты поиска QMD показываются в прямых и канальных сессиях (не в группах). Настройтеmemory.qmd.scope, чтобы изменить это:
Цитаты
Когдаmemory.citations равно auto или on, фрагменты поиска включают нижний колонтитул
Source: <path#line>. Задайте memory.citations = "off", чтобы не добавлять этот колонтитул,
при этом путь все равно будет передаваться агенту внутри системы.
Когда использовать
Выбирайте QMD, когда вам нужно:- Переранжирование для более качественных результатов.
- Искать документацию проекта или заметки за пределами рабочей области.
- Вспоминать прошлые разговоры сессий.
- Полностью локальный поиск без API-ключей.
Устранение неполадок
QMD не найден? Убедитесь, что бинарный файл находится вPATH Gateway. Если OpenClaw
запущен как сервис, создайте символическую ссылку:
sudo ln -s ~/.bun/bin/qmd /usr/local/bin/qmd.
Если qmd --version работает в вашей оболочке, но OpenClaw все еще сообщает
spawn qmd ENOENT, у процесса Gateway, скорее всего, другой PATH, чем у вашей
интерактивной оболочки. Закрепите бинарный файл явно:
command -v qmd в окружении, где установлен QMD, затем повторно проверьте
через openclaw memory status --deep.
Первый поиск очень медленный? QMD загружает модели GGUF при первом использовании. Прогрейте
с помощью qmd query "test", используя те же каталоги XDG, которые использует OpenClaw.
Много подпроцессов QMD во время поиска? По возможности обновите QMD. OpenClaw использует
один процесс для поисков по нескольким коллекциям из одного источника только тогда, когда установленный
QMD объявляет поддержку нескольких фильтров -c; иначе он сохраняет старый
резервный путь с поиском по каждой коллекции для корректности.
QMD только с BM25 все еще пытается собрать llama.cpp? Задайте
memory.qmd.searchMode = "search". OpenClaw считает этот режим только лексическим,
не запускает проверки статуса векторов QMD или обслуживание embedding и оставляет
семантические проверки готовности для настроек vsearch или query.
Поиск завершается по тайм-ауту? Увеличьте memory.qmd.limits.timeoutMs (по умолчанию: 4000ms).
Для более медленного оборудования задайте 120000.
Пустые результаты в групповых чатах? Проверьте memory.qmd.scope — по умолчанию разрешены только
прямые и канальные сессии.
Поиск корневой памяти внезапно стал слишком широким? Перезапустите Gateway или дождитесь
следующего согласования при запуске. OpenClaw пересоздает устаревшие управляемые коллекции
по каноническим шаблонам MEMORY.md и memory/, когда обнаруживает конфликт
с тем же именем.
Временные репозитории, видимые из рабочей области, вызывают ENAMETOOLONG или ломают индексирование?
Обход QMD сейчас следует поведению базового сканера QMD, а не
встроенным правилам OpenClaw для символических ссылок. Держите временные checkout монорепозиториев в
скрытых каталогах вроде .tmp/ или вне индексируемых корней QMD, пока QMD не предоставит
безопасный к циклам обход или явные элементы управления исключениями.
Конфигурация
Полную поверхность конфигурации (memory.qmd.*), режимы поиска, интервалы обновления,
правила области и все прочие настройки см. в
справочнике по конфигурации памяти.