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 obtener vistas conceptuales generales, consulte: Todos los ajustes de búsqueda de memoria se encuentran en agents.defaults.memorySearch en openclaw.json, a menos que se indique lo contrario. Si busca el interruptor de función de memoria activa y la configuración del subagente, se encuentran en plugins.entries.active-memory en lugar de memorySearch. La memoria activa usa un modelo de dos puertas:
  1. el plugin debe estar habilitado y apuntar al id del agente actual
  2. la solicitud debe ser una sesión de chat persistente e interactiva elegible
Consulte Memoria activa para ver el modelo de activación, la configuración propiedad del plugin, la persistencia de transcripciones y el patrón de implementación segura.

Selección de proveedor

KeyTypeDefaultDescription
providerstringdetectado automáticamenteID del adaptador de embeddings: openai, gemini, voyage, mistral, bedrock, ollama, local
modelstringpredeterminado del proveedorNombre del modelo de embeddings
fallbackstring"none"ID del adaptador de respaldo cuando falla el principal
enabledbooleantrueHabilitar o deshabilitar 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.
  6. bedrock — si la cadena de credenciales del SDK de AWS se resuelve (rol de instancia, claves de acceso, perfil, SSO, identidad web o configuración compartida).
ollama es compatible, pero no se detecta automáticamente (configúrelo explícitamente).

Resolución de claves de API

Los embeddings remotos requieren una clave de API. Bedrock usa la cadena de credenciales predeterminada del SDK de AWS en su lugar (roles de instancia, SSO, claves de acceso).
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
Bedrockcadena de credenciales de AWSNo se necesita clave de API
OllamaOLLAMA_API_KEY (marcador de posición)
Codex OAuth solo cubre 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.apiKeystringSobrescribir la clave de API
remote.headersobjectEncabezados HTTP adicionales (fusionados 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 es compatible con 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 de Bedrock

Bedrock usa la cadena de credenciales predeterminada del SDK de AWS — no se necesitan claves de API. Si OpenClaw se ejecuta en EC2 con un rol de instancia habilitado para Bedrock, solo configure el proveedor y el modelo:
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "bedrock",
        model: "amazon.titan-embed-text-v2:0",
      },
    },
  },
}
KeyTypeDefaultDescription
modelstringamazon.titan-embed-text-v2:0Cualquier ID de modelo de embeddings de Bedrock
outputDimensionalitynumberpredeterminado del modeloPara Titan V2: 256, 512 o 1024

Modelos compatibles

Los siguientes modelos son compatibles (con detección de familia y valores predeterminados de dimensiones):
Model IDProviderDefault DimsConfigurable Dims
amazon.titan-embed-text-v2:0Amazon1024256, 512, 1024
amazon.titan-embed-text-v1Amazon1536
amazon.titan-embed-g1-text-02Amazon1536
amazon.titan-embed-image-v1Amazon1024
amazon.nova-2-multimodal-embeddings-v1:0Amazon1024256, 384, 1024, 3072
cohere.embed-english-v3Cohere1024
cohere.embed-multilingual-v3Cohere1024
cohere.embed-v4:0Cohere1536256-1536
twelvelabs.marengo-embed-3-0-v1:0TwelveLabs512
twelvelabs.marengo-embed-2-7-v1:0TwelveLabs1024
Las variantes con sufijo de rendimiento (por ejemplo, amazon.titan-embed-text-v1:2:8k) heredan la configuración del modelo base.

Autenticación

La autenticación de Bedrock usa el orden estándar de resolución de credenciales del SDK de AWS:
  1. Variables de entorno (AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY)
  2. Caché de tokens de SSO
  3. Credenciales de token de identidad web
  4. Archivos compartidos de credenciales y configuración
  5. Credenciales de metadatos de ECS o EC2
La región se resuelve a partir de AWS_REGION, AWS_DEFAULT_REGION, la baseUrl del proveedor amazon-bedrock, o usa us-east-1 de forma predeterminada.

Permisos de IAM

El rol o usuario de IAM necesita:
{
  "Effect": "Allow",
  "Action": "bedrock:InvokeModel",
  "Resource": "*"
}
Para aplicar el principio de privilegio mínimo, limite InvokeModel al modelo específico:
arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0

Configuración de embeddings locales

KeyTypeDefaultDescription
local.modelPathstringdescargado automáticamenteRuta al archivo del modelo GGUF
local.modelCacheDirstringvalor predeterminado de node-llama-cppDirectorio de caché para los 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 bajo memorySearch.query.hybrid:
KeyTypeDefaultDescription
enabledbooleantrueHabilitar 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.enabledbooleanfalseHabilitar la reclasificación MMR
mmr.lambdanumber0.70 = máxima diversidad, 1 = máxima relevancia

Decaimiento temporal (recencia)

KeyTypeDefaultDescription
temporalDecay.enabledbooleanfalseHabilitar el impulso 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 ven afectados por el decaimiento.

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 workspace. Los directorios se exploran 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, use 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 workspace 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)

Indexe imágenes y audio junto con Markdown usando Gemini Embedding 2:
KeyTypeDefaultDescription
multimodal.enabledbooleanfalseHabilitar la indexación multimodal
multimodal.modalitiesstring[]["image"], ["audio"] o ["all"]
multimodal.maxFileBytesnumber10000000Tamaño máximo de archivo para indexación
Solo se aplica a los archivos en extraPaths. Las raíces de memoria predeterminadas siguen siendo solo de 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

ClaveTipoPredeterminadoDescripción
cache.enabledbooleanfalseAlmacenar en caché 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

ClaveTipoPredeterminadoDescripción
remote.batch.enabledbooleanfalseHabilitar la API de embeddings por lotes
remote.batch.concurrencynumber2Trabajos por lotes en paralelo
remote.batch.waitbooleantrueEsperar a que termine 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 el más rápido y económico para grandes backfills.

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

Indexe transcripciones de sesión y muéstrelas a través de memory_search:
ClaveTipoPredeterminadoDescripción
experimental.sessionMemorybooleanfalseHabilitar la indexación de sesiones
sourcesstring[]["memory"]Agregue "sessions" para incluir transcripciones
sync.sessions.deltaBytesnumber100000Umbral de bytes para reindexar
sync.sessions.deltaMessagesnumber50Umbral de mensajes para reindexar
La indexación de sesiones es opcional y se ejecuta de forma asíncrona. Los resultados pueden quedar ligeramente desactualizados. Los registros de sesión se almacenan en disco, así que trate el acceso al sistema de archivos como el límite de confianza.

Aceleración vectorial de SQLite (sqlite-vec)

ClaveTipoPredeterminadoDescripción
store.vector.enabledbooleantrueUsar sqlite-vec para consultas vectoriales
store.vector.extensionPathstringintegradoSobrescribir la ruta de sqlite-vec
Cuando sqlite-vec no está disponible, OpenClaw recurre automáticamente a la similitud de coseno en proceso.

Almacenamiento del índice

ClaveTipoPredeterminadoDescripción
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

Configure memory.backend = "qmd" para habilitarlo. Todos los ajustes de QMD se encuentran en memory.qmd:
ClaveTipoPredeterminadoDescripción
commandstringqmdRuta del ejecutable de QMD
searchModestringsearchComando de búsqueda: search, vsearch, query
includeDefaultMemorybooleantrueIndexar automáticamente MEMORY.md + memory/**/*.md
paths[]arrayRutas adicionales: { name, path, pattern? }
sessions.enabledbooleanfalseIndexar transcripciones de sesión
sessions.retentionDaysnumberRetención de transcripciones
sessions.exportDirstringDirectorio de exportación
OpenClaw prefiere las formas actuales de colecciones de QMD y consultas de MCP, pero mantiene las versiones anteriores de QMD funcionando mediante retroceso a las marcas heredadas de colección --mask y a nombres anteriores de herramientas MCP cuando es necesario. Las sobrescrituras de modelo de QMD permanecen del lado de QMD, no en la configuración de OpenClaw. Si necesita sobrescribir globalmente los modelos de QMD, configure variables de entorno como QMD_EMBED_MODEL, QMD_RERANK_MODEL y QMD_GENERATE_MODEL en el entorno de ejecución del gateway.

Programación de actualizaciones

ClaveTipoPredeterminadoDescripción
update.intervalstring5mIntervalo de actualización
update.debounceMsnumber15000Debounce de cambios de archivos
update.onBootbooleantrueActualizar al iniciar
update.waitForBootSyncbooleanfalseBloquear el inicio hasta que termine la actualización
update.embedIntervalstringCadencia separada 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

ClaveTipoPredeterminadoDescripción
limits.maxResultsnumber6Máximo de resultados de búsqueda
limits.maxSnippetCharsnumberLimitar la longitud del fragmento
limits.maxInjectedCharsnumberLimitar el total de caracteres inyectados
limits.timeoutMsnumber4000Tiempo de espera de búsqueda

Alcance

Controla qué sesiones pueden recibir resultados de búsqueda de QMD. El 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, incluido agent:<id>:.

Citas

memory.citations se aplica a todos los backends:
ValorComportamiento
auto (predeterminado)Incluir el pie Source: <path#line> en los fragmentos
onIncluir siempre el pie
offOmitir el pie (la ruta sigue pasándose al agente internamente)

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. Dreaming se ejecuta como un barrido programado y usa fases internas light/deep/REM como detalle de implementación. Para el comportamiento conceptual y los comandos con barra, consulte Dreaming.

Ajustes del usuario

ClaveTipoPredeterminadoDescripción
enabledbooleanfalseHabilitar o deshabilitar completamente Dreaming
frequencystring0 3 * * *Cadencia cron opcional para el barrido completo de Dreaming

Ejemplo

{
  plugins: {
    entries: {
      "memory-core": {
        config: {
          dreaming: {
            enabled: true,
            frequency: "0 3 * * *",
          },
        },
      },
    },
  },
}
Notas:
  • Dreaming escribe el estado de la máquina en memory/.dreams/.
  • Dreaming escribe la salida narrativa legible para humanos en DREAMS.md (o dreams.md existente).
  • La política y los umbrales de las fases light/deep/REM son comportamiento interno, no configuración orientada al usuario.