Перейти до основного вмісту

Рушій пам’яті QMD

QMD — це local-first пошуковий сайдкар, який працює поруч із OpenClaw. Він поєднує BM25, векторний пошук і reranking в одному бінарному файлі та може індексувати вміст за межами файлів пам’яті вашого робочого простору.

Що він додає понад вбудоване

  • Reranking і розширення запитів для кращого знаходження релевантних результатів.
  • Індексування додаткових каталогів — документація проєкту, нотатки команди, будь-що на диску.
  • Індексування транскриптів сесій — відновлення попередніх розмов.
  • Повністю локально — працює через Bun + node-llama-cpp, автоматично завантажує моделі GGUF.
  • Автоматичний резервний перехід — якщо QMD недоступний, OpenClaw непомітно повертається до вбудованого рушія.

Початок роботи

Передумови

  • Установіть QMD: bun install -g @tobilu/qmd
  • Збірка SQLite, що дозволяє розширення (brew install sqlite на macOS).
  • QMD має бути в PATH gateway.
  • macOS і Linux працюють одразу. Windows найкраще підтримується через WSL2.

Увімкнення

{
  memory: {
    backend: "qmd",
  },
}
OpenClaw створює автономний домашній каталог QMD у ~/.openclaw/agents/<agentId>/qmd/ і керує життєвим циклом сайдкара автоматично — колекції, оновлення та запуск embedding обробляються за вас.

Як працює сайдкар

  • OpenClaw створює колекції з файлів пам’яті вашого робочого простору та будь-яких налаштованих memory.qmd.paths, а потім запускає qmd update + qmd embed під час запуску і періодично (типово кожні 5 хвилин).
  • Оновлення під час запуску виконується у фоновому режимі, щоб не блокувати старт чату.
  • Пошук використовує налаштований searchMode (типово: search; також підтримує vsearch і query). Якщо якийсь режим не спрацьовує, OpenClaw повторює спробу з qmd query.
  • Якщо QMD повністю відмовляє, OpenClaw повертається до вбудованого рушія SQLite.
Перший пошук може бути повільним — QMD автоматично завантажує моделі GGUF (~2 GB) для reranking і розширення запитів під час першого запуску qmd query.

Індексування додаткових шляхів

Спрямуйте QMD на додаткові каталоги, щоб зробити їх доступними для пошуку:
{
  memory: {
    backend: "qmd",
    qmd: {
      paths: [{ name: "docs", path: "~/notes", pattern: "**/*.md" }],
    },
  },
}
Фрагменти з додаткових шляхів з’являються як qmd/<collection>/<relative-path> у результатах пошуку. memory_get розуміє цей префікс і читає з правильного кореня колекції.

Індексування транскриптів сесій

Увімкніть індексування сесій, щоб відновлювати попередні розмови:
{
  memory: {
    backend: "qmd",
    qmd: {
      sessions: { enabled: true },
    },
  },
}
Транскрипти експортуються як очищені ходи User/Assistant у виділену колекцію QMD в ~/.openclaw/agents/<id>/qmd/sessions/.

Область пошуку

Типово результати пошуку QMD показуються лише в DM-сесіях (не в групах чи каналах). Щоб це змінити, налаштуйте memory.qmd.scope:
{
  memory: {
    qmd: {
      scope: {
        default: "deny",
        rules: [{ action: "allow", match: { chatType: "direct" } }],
      },
    },
  },
}
Коли область забороняє пошук, OpenClaw записує попередження в журнал із похідними channel і chat type, щоб порожні результати було легше налагоджувати.

Цитати

Коли memory.citations має значення auto або on, фрагменти пошуку містять нижній колонтитул Source: <path#line>. Установіть memory.citations = "off", щоб прибрати нижній колонтитул, але все одно передавати шлях агенту внутрішньо.

Коли використовувати

Вибирайте QMD, коли вам потрібно:
  • Reranking для вищої якості результатів.
  • Шукати документацію проєкту або нотатки поза робочим простором.
  • Відновлювати попередні розмови із сесій.
  • Повністю локальний пошук без API keys.
Для простіших налаштувань вбудований рушій добре працює без додаткових залежностей.

Усунення проблем

QMD не знайдено? Переконайтеся, що бінарний файл є в PATH gateway. Якщо OpenClaw працює як сервіс, створіть symlink: sudo ln -s ~/.bun/bin/qmd /usr/local/bin/qmd. Перший пошук дуже повільний? QMD завантажує моделі GGUF під час першого використання. Попередньо прогрійте через qmd query "test" з тими самими каталогами XDG, які використовує OpenClaw. Пошук завершується за тайм-аутом? Збільште memory.qmd.limits.timeoutMs (типово: 4000ms). Для повільнішого обладнання встановіть 120000. Порожні результати в групових чатах? Перевірте memory.qmd.scope — типове значення лише дозволяє DM-сесії. Тимчасові репозиторії, видимі в робочому просторі, спричиняють ENAMETOOLONG або зламане індексування? Обхід каталогів у QMD наразі дотримується поведінки базового сканера QMD, а не вбудованих правил symlink OpenClaw. Тримайте тимчасові monorepo checkout у прихованих каталогах, як-от .tmp/, або поза індексованими коренями QMD, доки QMD не надасть безпечний щодо циклів обхід або явні засоби керування виключеннями.

Конфігурація

Для повної поверхні конфігурації (memory.qmd.*), режимів пошуку, інтервалів оновлення, правил області та всіх інших параметрів див. Довідник із конфігурації пам’яті.