Обзор памяти
Как работает память.
Встроенный движок
Серверная часть SQLite по умолчанию.
Движок QMD
Локальный вспомогательный процесс.
Поиск по памяти
Конвейер поиска и его настройка.
Active Memory
Субагент памяти для интерактивных сеансов.
agents.defaults.memorySearch файла openclaw.json (или в переопределении agents.list[].memorySearch для отдельного агента).
Если вы ищете переключатель функции Active Memory и конфигурацию субагента, они находятся в разделе
plugins.entries.active-memory, а не memorySearch.Active Memory использует модель с двумя условиями:- плагин должен быть включён и нацелен на идентификатор текущего агента
- запрос должен относиться к допустимому интерактивному постоянному сеансу чата
Выбор провайдера
Если
provider не задан, OpenClaw использует эмбеддинги OpenAI. Явно задайте provider,
чтобы использовать Bedrock, DeepInfra, Gemini, GitHub Copilot, Mistral, Ollama,
Voyage, локальную модель GGUF или конечную точку /v1/embeddings, совместимую с OpenAI.
Устаревшие конфигурации, в которых всё ещё указано provider: "auto", разрешаются в openai.
Если provider не задан, присутствует устаревший provider: "auto" или
provider: "none" намеренно выбирает режим только FTS, извлечение из памяти всё равно может
использовать лексическое ранжирование FTS, когда эмбеддинги недоступны.
Для явно указанных нелокальных провайдеров используется безопасный отказ. Если для memorySearch.provider задан
конкретный провайдер с удалённой серверной частью, например Bedrock, DeepInfra, Gemini, GitHub
Copilot, LM Studio, Mistral, Ollama, OpenAI, Voyage или пользовательский провайдер,
совместимый с OpenAI, и этот провайдер недоступен во время выполнения, memory_search
возвращает результат о недоступности вместо неявного перехода к извлечению только через FTS. Исправьте
конфигурацию провайдера или аутентификации, переключитесь на доступного провайдера либо задайте
provider: "none", если хотите намеренно использовать извлечение только через FTS.
Пользовательские идентификаторы провайдеров
memorySearch.provider может указывать на пользовательскую запись models.providers.<id> для специализированных адаптеров провайдера памяти, таких как ollama, или для API моделей, совместимых с OpenAI, таких как openai-responses / openai-completions. OpenClaw определяет владельца api этого провайдера для адаптера эмбеддингов, сохраняя пользовательский идентификатор провайдера для обработки конечной точки, аутентификации и префикса модели. Это позволяет конфигурациям с несколькими GPU или узлами выделить для эмбеддингов памяти конкретную локальную конечную точку:
Определение ключа API
Для удалённых эмбеддингов требуется ключ API. Вместо него Bedrock использует стандартную цепочку учётных данных AWS SDK (роли экземпляров, SSO, ключи доступа или ключ API Bedrock).OAuth Codex распространяется только на чат и завершения и не подходит для запросов эмбеддингов.
Конфигурация удалённой конечной точки
Используйтеprovider: "openai-compatible" для универсального сервера
/v1/embeddings, совместимого с OpenAI, который не должен наследовать глобальные учётные данные чата OpenAI.
string
Пользовательский базовый URL API.
string
Переопределение ключа API.
object
Дополнительные заголовки HTTP (объединяются со значениями провайдера по умолчанию).
Конфигурация для отдельных провайдеров
Gemini
Gemini
Типы входных данных, совместимые с OpenAI
Типы входных данных, совместимые с OpenAI
Конечные точки эмбеддингов, совместимые с OpenAI, могут включать зависящие от провайдера поля запроса Изменение этих значений влияет на идентичность кеша эмбеддингов при пакетной индексации провайдером; после этого следует переиндексировать память, если вышестоящая модель по-разному обрабатывает эти метки.
input_type. Это полезно для асимметричных моделей эмбеддингов, которым требуются разные метки для эмбеддингов запросов и документов.Bedrock
Bedrock
Конфигурация эмбеддингов Bedrock
Bedrock использует стандартную цепочку учётных данных AWS SDK и проверяемый OpenClaw токен-носитель, поэтому ключи API не хранятся в конфигурации. Если OpenClaw работает на EC2 с ролью экземпляра, имеющей доступ к Bedrock, просто задайте провайдера и модель:Поддерживаемые модели (с определением семейства и размерами по умолчанию):
Варианты с суффиксом пропускной способности (например,
amazon.titan-embed-text-v1:2:8k) и идентификаторы профилей инференса с префиксом региона (например, us.amazon.titan-embed-text-v2:0) наследуют конфигурацию базовой модели.Регион: определяется в следующем порядке: переопределение memorySearch.remote.baseUrl, конфигурация models.providers.amazon-bedrock.baseUrl, AWS_REGION, AWS_DEFAULT_REGION, затем значение по умолчанию us-east-1.Аутентификация: OpenClaw сначала проверяет AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY или AWS_BEARER_TOKEN_BEDROCK, а затем переходит к стандартной цепочке поставщиков учётных данных AWS SDK по умолчанию:- Переменные среды (
AWS_ACCESS_KEY_ID+AWS_SECRET_ACCESS_KEY), если также не заданаAWS_PROFILE - SSO (только когда настроены поля SSO)
- Общие файлы учётных данных и конфигурации (
fromIni, включаяAWS_PROFILE) - Процесс получения учётных данных (
credential_processв файле конфигурации AWS) - Учётные данные на основе токена веб-идентификации
- Учётные данные из метаданных экземпляра ECS или EC2
InvokeModel конкретной моделью:Локально (GGUF + llama.cpp)
Локально (GGUF + llama.cpp)
Сначала установите официальный поставщик llama.cpp:
openclaw plugins install @openclaw/llama-cpp-provider.
Модель по умолчанию: embeddinggemma-300m-qat-Q8_0.gguf (~0,6 ГБ, загружается автоматически). Для рабочих копий исходного кода по-прежнему требуется разрешение на нативную сборку: pnpm approve-builds, затем pnpm rebuild node-llama-cpp.Используйте автономный CLI, чтобы проверить тот же путь поставщика, который использует Gateway:local.contextSize также учитываются при автоматическом распределении слоёв на GPU в node-llama-cpp, чтобы веса модели и запрошенный контекст эмбеддингов помещались вместе. После загрузки среды выполнения openclaw memory status --deep сообщает последние известные сведения о бэкенде llama.cpp, устройстве, выгрузке, запрошенном контексте и памяти с временными метками; пассивная проверка состояния не загружает модель.Явно задайте provider: "local" для локальных эмбеддингов GGUF. hf: и ссылки на модели по HTTP(S) поддерживаются в явных локальных конфигурациях (через механизм разрешения моделей node-llama-cpp), но не изменяют поставщика по умолчанию.Тайм-аут встроенного создания эмбеддингов
number
Переопределяет тайм-аут для встроенных пакетов создания эмбеддингов при индексировании памяти.Если значение не задано, используется значение поставщика по умолчанию: 600 секунд для локальных или самостоятельно размещённых поставщиков, таких как
local, ollama и lmstudio, и 120 секунд для размещённых поставщиков. Увеличьте это значение, если локальные пакеты создания эмбеддингов, ограниченные производительностью CPU, работают исправно, но медленно.Поведение индексирования
Все параметры находятся вmemorySearch.sync, если не указано иное:
number
Размер фрагмента в токенах, используемый при разделении источников памяти перед созданием эмбеддингов (по умолчанию: 400).
number
Перекрытие в токенах между соседними фрагментами для сохранения контекста вблизи границ разделения (по умолчанию: 80).
Изменение
chunking.tokens или chunking.overlap меняет границы фрагментов и делает недействительным идентификатор существующего индекса (см. предупреждение в разделе выбора поставщика).Конфигурация гибридного поиска
Все параметры находятся вmemorySearch.query:
И в
memorySearch.query.hybrid:
- MMR (разнообразие)
- Временное затухание (давность)
Полный пример
Дополнительные пути памяти
.md. Обработка символических ссылок зависит от активного бэкенда: встроенный механизм пропускает символические ссылки, а QMD следует поведению базового сканера QMD.
Для поиска по транскриптам других агентов в области конкретного агента используйте agents.list[].memorySearch.qmd.extraCollections вместо memory.qmd.paths. Эти дополнительные коллекции имеют ту же структуру { path, name, pattern? }, но объединяются отдельно для каждого агента и могут сохранять явно заданные общие имена, если путь указывает за пределы текущей рабочей области. Если один и тот же разрешённый путь присутствует и в memory.qmd.paths, и в memorySearch.qmd.extraCollections, QMD сохраняет первую запись и пропускает дубликат.
Мультимодальная память (Gemini)
Индексируйте изображения и аудио вместе с Markdown с помощью Gemini Embedding 2:Применяется только к файлам в
extraPaths. Стандартные корневые каталоги памяти по-прежнему поддерживают только Markdown. Требуется gemini-embedding-2-preview. Значением fallback должно быть "none"..jpg, .jpeg, .png, .webp, .gif, .heic, .heif (изображения); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (аудио).
Кеш эмбеддингов
Предотвращает повторное создание эмбеддингов для неизменённого текста при переиндексировании или обновлении расшифровок. Оставьте
maxEntries незаданным для неограниченного кеша; задайте его, если рост занимаемого места на диске важнее максимальной скорости переиндексирования. Если значение задано, после превышения кешем лимита сначала удаляются самые старые записи по времени последнего обновления.
Пакетное индексирование
Доступно для
gemini, openai и voyage. Пакетная обработка OpenAI обычно быстрее и дешевле всего для массового заполнения больших объёмов данных.
remote.nonBatchConcurrency управляет параллельными вызовами создания эмбеддингов, используемыми локальными или самостоятельно размещёнными провайдерами, а также облачными провайдерами, когда их API пакетной обработки не задействованы. При индексировании без пакетной обработки Ollama по умолчанию использует 1, чтобы не перегружать небольшие локальные серверы; на более мощных машинах задайте большее значение.
Этот параметр не связан с sync.embeddingBatchTimeoutSeconds, который управляет тайм-аутом параллельных вызовов создания эмбеддингов.
Поиск в памяти сеансов (экспериментальная функция)
Индексируйте расшифровки сеансов и предоставляйте их черезmemory_search:
Результаты из расшифровок сеансов также подчиняются
tools.sessions.visibility. Стандартная область видимости
tree предоставляет доступ только к текущему сеансу и созданным им сеансам. Чтобы
из другого сеанса, например личной переписки, получить данные из несвязанного сеанса того же агента,
запущенного через Gateway, намеренно расширьте область видимости до agent (или до all, только
если также требуется поиск между агентами и это разрешено политикой взаимодействия агентов).
В приведённых ниже примерах эти параметры находятся в agents.defaults. Можно также
применить эквивалентные параметры memorySearch в переопределении для отдельного агента, если
индексировать расшифровки сеансов и выполнять по ним поиск должен только один агент.
Для получения данных из Gateway в личной переписке в рамках одного агента:
- Встроенный бэкенд
- Бэкенд QMD
agents.defaults.memorySearch.experimental.sessionMemory и
sources: ["sessions"] сами по себе не экспортируют расшифровки в QMD. Также задайте
memory.qmd.sessions.enabled: true.
Ускорение векторных операций SQLite (sqlite-vec)
Если sqlite-vec недоступен, OpenClaw автоматически использует вычисление косинусного сходства внутри процесса.
Хранилище индекса
Встроенные индексы памяти хранятся в базе данных OpenClaw SQLite каждого агента по адресуagents/<agentId>/agent/openclaw-agent.sqlite.
Конфигурация бэкенда QMD
Задайтеmemory.backend = "qmd", чтобы включить его. Все параметры QMD находятся в memory.qmd:
searchMode: "search" использует только лексический поиск/BM25. В этом режиме OpenClaw не выполняет проверки готовности семантических векторов или обслуживание эмбеддингов QMD, в том числе во время memory status --deep; vsearch и query по-прежнему требуют готовности векторов и эмбеддингов QMD.
rerank: false изменяет только режим QMD query и требует QMD 2.1 или новее. В режиме прямого CLI OpenClaw передаёт --no-rerank; в режиме MCP на базе mcporter он передаёт rerank: false унифицированному инструменту запросов QMD. Оставьте параметр незаданным, чтобы использовать стандартное поведение QMD для повторного ранжирования запросов.
OpenClaw предпочитает актуальные структуры коллекций QMD и запросов MCP, но сохраняет совместимость со старыми выпусками QMD, при необходимости пробуя совместимые флаги шаблонов коллекций и прежние имена инструментов MCP. Когда QMD заявляет о поддержке нескольких фильтров коллекций, поиск по коллекциям одного источника выполняется одним процессом QMD; старые сборки QMD продолжают использовать путь совместимости с отдельным процессом для каждой коллекции. Под одним источником понимается совместная группировка постоянных коллекций памяти — стандартных файлов памяти и пользовательских путей, — а коллекции расшифровок сеансов остаются отдельной группой, чтобы при диверсификации источников по-прежнему использовались оба входа.
Переопределения моделей QMD задаются на стороне QMD, а не в конфигурации OpenClaw. Если требуется глобально переопределить модели QMD, задайте переменные среды, например
QMD_EMBED_MODEL, QMD_RERANK_MODEL и QMD_GENERATE_MODEL, в среде выполнения Gateway.Интеграция с mcporter
Все параметры находятся вmemory.qmd.mcporter. Направляет поисковые запросы QMD через долгоживущий MCP-демон mcporter вместо запуска qmd для каждого запроса, сокращая накладные расходы на холодный запуск больших моделей.
Требуется установленный
mcporter, доступный через PATH, а также настроенный сервер mcporter, запускающий qmd mcp. Оставьте эту функцию отключённой для более простых локальных конфигураций, в которых допустимы затраты на запуск отдельного процесса для каждого запроса.
Расписание обновлений
Расписание обновлений
Ограничения
Ограничения
Область действия
Область действия
Определяет, какие сеансы могут получать результаты поиска QMD. Схема совпадает с Поставляемая конфигурация по умолчанию разрешает только личные/прямые сообщения, запрещая группы и другие типы каналов.
session.sendPolicy:match.keyPrefix сопоставляется с нормализованным ключом сеанса; match.rawKeyPrefix сопоставляется с исходным ключом, включая agent:<id>:.Ссылки на источники
Ссылки на источники
memory.citations применяется ко всем бэкендам:update.onBoot имеет значение true и периодическое обновление или векторизация не настроены, при запуске для начального обновления используется одноразовый менеджер, который затем закрывается. Если настроен интервал обновления или векторизации, при запуске открывается долгоживущий менеджер QMD, управляющий наблюдателем и таймерами интервалов; update.onBoot: false пропускает только немедленное начальное обновление.
Полный пример QMD
Dreaming
Dreaming настраивается вplugins.entries.memory-core.config.dreaming, а не в agents.defaults.memorySearch.
Dreaming выполняется как один запланированный проход, а внутренние фазы light/deep/REM являются деталями реализации.
Описание концептуального поведения и команд с косой чертой см. в разделе Dreaming.
Пользовательские настройки
Пример
- Dreaming записывает машинное состояние в
memory/.dreams/. - Dreaming записывает удобочитаемый повествовательный результат в
DREAMS.md(или существующийdreams.md). dreaming.modelиспользует существующий механизм доверия для субагентов плагина; перед включением задайтеplugins.entries.memory-core.subagent.allowModelOverride: true.- Dream Diary повторяет попытку один раз с моделью сеанса по умолчанию, если настроенная модель недоступна. Ошибки доверия или списка разрешённых моделей регистрируются в журнале и не приводят к скрытым повторным попыткам.
- Политика и пороговые значения фаз light/deep/REM являются внутренним поведением, а не пользовательской конфигурацией.