Saltar al contenido principal

Referencia de configuración de memoria

Esta página enumera todos los parámetros de configuración para la búsqueda de memoria de OpenClaw. Para descripciones conceptuales generales, consulta: Todos los ajustes de búsqueda de memoria se encuentran en agents.defaults.memorySearch en openclaw.json, a menos que se indique lo contrario.

Selección de proveedor

KeyTypeDefaultDescription
providerstringdetectado automáticamenteID del adaptador de embeddings: openai, gemini, voyage, mistral, ollama, local
modelstringpredeterminado del proveedorNombre del modelo de embeddings
fallbackstring"none"ID del adaptador de respaldo cuando falla el principal
enabledbooleantrueHabilita o deshabilita la búsqueda de memoria

Orden de detección automática

Cuando provider no está configurado, OpenClaw selecciona el primero disponible:
  1. local — si memorySearch.local.modelPath está configurado y el archivo existe.
  2. openai — si se puede resolver una clave de OpenAI.
  3. gemini — si se puede resolver una clave de Gemini.
  4. voyage — si se puede resolver una clave de Voyage.
  5. mistral — si se puede resolver una clave de Mistral.
ollama es compatible, pero no se detecta automáticamente (configúralo explícitamente).

Resolución de clave de API

Los embeddings remotos requieren una clave de API. OpenClaw la resuelve a partir de: perfiles de autenticación, models.providers.*.apiKey o variables de entorno.
ProviderEnv varConfig key
OpenAIOPENAI_API_KEYmodels.providers.openai.apiKey
GeminiGEMINI_API_KEYmodels.providers.google.apiKey
VoyageVOYAGE_API_KEYmodels.providers.voyage.apiKey
MistralMISTRAL_API_KEYmodels.providers.mistral.apiKey
OllamaOLLAMA_API_KEY (marcador de posición)
Codex OAuth cubre solo chat/completions y no satisface las solicitudes de embeddings.

Configuración de endpoint remoto

Para endpoints personalizados compatibles con OpenAI o para sobrescribir los valores predeterminados del proveedor:
KeyTypeDescription
remote.baseUrlstringURL base de API personalizada
remote.apiKeystringSobrescribe la clave de API
remote.headersobjectEncabezados HTTP adicionales (combinados con los valores predeterminados del proveedor)
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai",
        model: "text-embedding-3-small",
        remote: {
          baseUrl: "https://api.example.com/v1/",
          apiKey: "YOUR_KEY",
        },
      },
    },
  },
}

Configuración específica de Gemini

KeyTypeDefaultDescription
modelstringgemini-embedding-001También admite gemini-embedding-2-preview
outputDimensionalitynumber3072Para Embedding 2: 768, 1536 o 3072
Cambiar el modelo o outputDimensionality desencadena una reindexación completa automática.

Configuración de embeddings locales

KeyTypeDefaultDescription
local.modelPathstringdescargado automáticamenteRuta al archivo de modelo GGUF
local.modelCacheDirstringpredeterminado de node-llama-cppDirectorio de caché para modelos descargados
Modelo predeterminado: embeddinggemma-300m-qat-Q8_0.gguf (~0.6 GB, se descarga automáticamente). Requiere compilación nativa: pnpm approve-builds y luego pnpm rebuild node-llama-cpp.

Configuración de búsqueda híbrida

Todo en memorySearch.query.hybrid:
KeyTypeDefaultDescription
enabledbooleantrueHabilita la búsqueda híbrida BM25 + vectorial
vectorWeightnumber0.7Peso para las puntuaciones vectoriales (0-1)
textWeightnumber0.3Peso para las puntuaciones BM25 (0-1)
candidateMultipliernumber4Multiplicador del tamaño del conjunto de candidatos

MMR (diversidad)

KeyTypeDefaultDescription
mmr.enabledbooleanfalseHabilita la reclasificación con MMR
mmr.lambdanumber0.70 = máxima diversidad, 1 = máxima relevancia

Decaimiento temporal (recencia)

KeyTypeDefaultDescription
temporalDecay.enabledbooleanfalseHabilita el refuerzo por recencia
temporalDecay.halfLifeDaysnumber30La puntuación se reduce a la mitad cada N días
Los archivos perennes (MEMORY.md, archivos sin fecha en memory/) nunca se degradan.

Ejemplo completo

{
  agents: {
    defaults: {
      memorySearch: {
        query: {
          hybrid: {
            vectorWeight: 0.7,
            textWeight: 0.3,
            mmr: { enabled: true, lambda: 0.7 },
            temporalDecay: { enabled: true, halfLifeDays: 30 },
          },
        },
      },
    },
  },
}

Rutas de memoria adicionales

KeyTypeDescription
extraPathsstring[]Directorios o archivos adicionales para indexar
{
  agents: {
    defaults: {
      memorySearch: {
        extraPaths: ["../team-docs", "/srv/shared-notes"],
      },
    },
  },
}
Las rutas pueden ser absolutas o relativas al espacio de trabajo. Los directorios se analizan de forma recursiva en busca de archivos .md. El manejo de enlaces simbólicos depende del backend activo: el motor integrado ignora los enlaces simbólicos, mientras que QMD sigue el comportamiento del escáner QMD subyacente. Para la búsqueda de transcripciones entre agentes con alcance por agente, usa agents.list[].memorySearch.qmd.extraCollections en lugar de memory.qmd.paths. Esas colecciones adicionales siguen la misma forma { path, name, pattern? }, pero se combinan por agente y pueden conservar nombres compartidos explícitos cuando la ruta apunta fuera del espacio de trabajo actual. Si la misma ruta resuelta aparece tanto en memory.qmd.paths como en memorySearch.qmd.extraCollections, QMD conserva la primera entrada y omite el duplicado.

Memoria multimodal (Gemini)

Indexa imágenes y audio junto con Markdown usando Gemini Embedding 2:
KeyTypeDefaultDescription
multimodal.enabledbooleanfalseHabilita la indexación multimodal
multimodal.modalitiesstring[]["image"], ["audio"] o ["all"]
multimodal.maxFileBytesnumber10000000Tamaño máximo de archivo para indexación
Solo se aplica a archivos en extraPaths. Las raíces de memoria predeterminadas siguen siendo solo Markdown. Requiere gemini-embedding-2-preview. fallback debe ser "none". Formatos compatibles: .jpg, .jpeg, .png, .webp, .gif, .heic, .heif (imágenes); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (audio).

Caché de embeddings

KeyTypeDefaultDescription
cache.enabledbooleanfalseAlmacena en caché los embeddings de fragmentos en SQLite
cache.maxEntriesnumber50000Máximo de embeddings en caché
Evita volver a generar embeddings para texto sin cambios durante la reindexación o las actualizaciones de transcripciones.

Indexación por lotes

KeyTypeDefaultDescription
remote.batch.enabledbooleanfalseHabilita la API de embeddings por lotes
remote.batch.concurrencynumber2Trabajos por lotes en paralelo
remote.batch.waitbooleantrueEspera a que finalice el lote
remote.batch.pollIntervalMsnumberIntervalo de sondeo
remote.batch.timeoutMinutesnumberTiempo de espera del lote
Disponible para openai, gemini y voyage. El procesamiento por lotes de OpenAI suele ser más rápido y más económico para rellenos masivos grandes.

Búsqueda de memoria de sesión (experimental)

Indexa transcripciones de sesiones y muéstralas mediante memory_search:
KeyTypeDefaultDescription
experimental.sessionMemorybooleanfalseHabilita la indexación de sesiones
sourcesstring[]["memory"]Agrega "sessions" para incluir transcripciones
sync.sessions.deltaBytesnumber100000Umbral de bytes para reindexación
sync.sessions.deltaMessagesnumber50Umbral de mensajes para reindexación
La indexación de sesiones es opcional y se ejecuta de forma asíncrona. Los resultados pueden estar ligeramente desactualizados. Los registros de sesión viven en disco, así que trata el acceso al sistema de archivos como el límite de confianza.

Aceleración vectorial SQLite (sqlite-vec)

KeyTypeDefaultDescription
store.vector.enabledbooleantrueUsa sqlite-vec para consultas vectoriales
store.vector.extensionPathstringincluidoSobrescribe la ruta de sqlite-vec
Cuando sqlite-vec no está disponible, OpenClaw recurre automáticamente a la similitud del coseno en proceso.

Almacenamiento del índice

KeyTypeDefaultDescription
store.pathstring~/.openclaw/memory/{agentId}.sqliteUbicación del índice (admite el token {agentId})
store.fts.tokenizerstringunicode61Tokenizador FTS5 (unicode61 o trigram)

Configuración del backend de QMD

Configura memory.backend = "qmd" para habilitarlo. Todos los ajustes de QMD se encuentran en memory.qmd:
KeyTypeDefaultDescription
commandstringqmdRuta del ejecutable de QMD
searchModestringsearchComando de búsqueda: search, vsearch, query
includeDefaultMemorybooleantrueIndexa automáticamente MEMORY.md + memory/**/*.md
paths[]arrayRutas adicionales: { name, path, pattern? }
sessions.enabledbooleanfalseIndexa transcripciones de sesión
sessions.retentionDaysnumberRetención de transcripciones
sessions.exportDirstringDirectorio de exportación

Programación de actualizaciones

KeyTypeDefaultDescription
update.intervalstring5mIntervalo de actualización
update.debounceMsnumber15000Antirrebote para cambios de archivos
update.onBootbooleantrueActualiza al iniciar
update.waitForBootSyncbooleanfalseBloquea el inicio hasta que termine la actualización
update.embedIntervalstringCadencia independiente para embeddings
update.commandTimeoutMsnumberTiempo de espera para comandos de QMD
update.updateTimeoutMsnumberTiempo de espera para operaciones de actualización de QMD
update.embedTimeoutMsnumberTiempo de espera para operaciones de embeddings de QMD

Límites

KeyTypeDefaultDescription
limits.maxResultsnumber6Máximo de resultados de búsqueda
limits.maxSnippetCharsnumberLimita la longitud del fragmento
limits.maxInjectedCharsnumberLimita el total de caracteres inyectados
limits.timeoutMsnumber4000Tiempo de espera de búsqueda

Alcance

Controla qué sesiones pueden recibir resultados de búsqueda de QMD. Mismo esquema que session.sendPolicy:
{
  memory: {
    qmd: {
      scope: {
        default: "deny",
        rules: [{ action: "allow", match: { chatType: "direct" } }],
      },
    },
  },
}
El valor predeterminado es solo DM. match.keyPrefix coincide con la clave de sesión normalizada; match.rawKeyPrefix coincide con la clave sin procesar, incluida agent:<id>:.

Citas

memory.citations se aplica a todos los backends:
ValueBehavior
auto (predeterminado)Incluye el pie Source: <path#line> en los fragmentos
onSiempre incluye el pie
offOmite el pie (la ruta igualmente se pasa internamente al agente)

Ejemplo completo de QMD

{
  memory: {
    backend: "qmd",
    citations: "auto",
    qmd: {
      includeDefaultMemory: true,
      update: { interval: "5m", debounceMs: 15000 },
      limits: { maxResults: 6, timeoutMs: 4000 },
      scope: {
        default: "deny",
        rules: [{ action: "allow", match: { chatType: "direct" } }],
      },
      paths: [{ name: "docs", path: "~/notes", pattern: "**/*.md" }],
    },
  },
}

Dreaming (experimental)

Dreaming se configura en plugins.entries.memory-core.config.dreaming, no en agents.defaults.memorySearch. Para detalles conceptuales y comandos de chat, consulta Dreaming.
KeyTypeDefaultDescription
modestring"off"Preajuste: off, core, rem o deep
cronstringpredeterminado del preajusteSobrescribe la expresión cron para la programación
timezonestringzona horaria del usuarioZona horaria para la evaluación de la programación
limitnumberpredeterminado del preajusteMáximo de candidatos para promover por ciclo
minScorenumberpredeterminado del preajustePuntuación ponderada mínima para promoción
minRecallCountnumberpredeterminado del preajusteUmbral mínimo del conteo de recuperación
minUniqueQueriesnumberpredeterminado del preajusteUmbral mínimo del conteo de consultas distintas

Valores predeterminados del preajuste

ModeCadenceminScoreminRecallCountminUniqueQueries
offDeshabilitado
coreDiario a las 3 AM0.7532
remCada 6 horas0.8543
deepCada 12 horas0.8033

Ejemplo

{
  plugins: {
    entries: {
      "memory-core": {
        config: {
          dreaming: {
            mode: "core",
            timezone: "America/New_York",
          },
        },
      },
    },
  },
}