Ir al contenido

Referencia de configuración de memoria

Esta página enumera cada control de configuración para la búsqueda de memoria de OpenClaw. Para vistas conceptuales, consulte:

Todos los ajustes de búsqueda de memoria residen bajo agents.defaults.memorySearch en openclaw.json a menos que se indique lo contrario.


ClaveTipoPredeterminadoDescripción
providerstringautodetectadoID del adaptador de incrustación: openai, gemini, voyage, mistral, ollama, local
modelstringpredeterminado del proveedorNombre del modelo de incrustación
fallbackstring"none"ID del adaptador de reserva cuando falla el principal
enabledbooleantrueHabilitar o deshabilitar la búsqueda de memoria

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 (establézcalo explícitamente).

Las incrustaciones remotas requieren una clave API. OpenClaw la resuelve desde: perfiles de autenticación, models.providers.*.apiKey o variables de entorno.

ProveedorVar. de entornoClave de configuración
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 incrustación.


Para puntos de conexión personalizados compatibles con OpenAI o para anular los valores predeterminados del proveedor:

ClaveTipoDescripción
remote.baseUrlstringURL base de API personalizada
remote.apiKeystringAnular clave API
remote.headersobjectEncabezados HTTP adicionales (combinados con los predeterminados del proveedor)
{
agents: {
defaults: {
memorySearch: {
provider: "openai",
model: "text-embedding-3-small",
remote: {
baseUrl: "https://api.example.com/v1/",
apiKey: "YOUR_KEY",
},
},
},
},
}

ClaveTipoPredeterminadoDescripción
modelstringgemini-embedding-001También admite gemini-embedding-2-preview
outputDimensionalitynumber3072Para Embedding 2: 768, 1536 o 3072


ClaveTipoPredeterminadoDescripción
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, descargado automáticamente). Requiere compilación nativa: pnpm approve-builds y luego pnpm rebuild node-llama-cpp.


Todo bajo memorySearch.query.hybrid:

ClaveTipoPredeterminadoDescripción
enabledbooleantrueHabilitar 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 grupo de candidatos
ClaveTipoPredeterminadoDescripción
mmr.enabledbooleanfalseActivar la reordenación MMR
mmr.lambdanumber0.70 = máxima diversidad, 1 = máxima relevancia
ClaveTipoPredeterminadoDescripción
temporalDecay.enabledbooleanfalseActivar el impulso de 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 sufren decaimiento.

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

ClaveTipoDescripción
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 escanean recursivamente 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 ámbito de agente, utilice agents.list[].memorySearch.qmd.extraCollections en lugar de memory.qmd.paths. Esas colecciones adicionales siguen la misma forma { path, name, pattern? }, pero se fusionan 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 mantiene la primera entrada y omite el duplicado.


Indexar imágenes y audio junto con Markdown usando Gemini Embedding 2:

ClaveTipoPredeterminadoDescripción
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 permanecen solo en 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).


ClaveTipoPredeterminadoDescripción
cache.enabledbooleanfalseCaché de fragmentos de embeddings en SQLite
cache.maxEntriesnumber50000Máximo de embeddings en caché

Evita volver a incrustar texto sin cambios durante la reindexación o actualizaciones de transcripciones.


ClaveTipoPredeterminadoDescripción
remote.batch.enabledbooleanfalseHabilitar API de incrustación por lotes
remote.batch.concurrencynumber2Trabajos por lotes paralelos
remote.batch.waitbooleantrueEsperar a que se complete el lote
remote.batch.pollIntervalMsnumberIntervalo de sondeo
remote.batch.timeoutMinutesnumberTiempo de espera del lote

Disponible para openai, gemini y voyage. El proceso por lotes de OpenAI es típicamente el más rápido y económico para rellenos masivos.


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

Sección titulada «Búsqueda de memoria de sesión (experimental)»

Indexe las transcripciones de sesión y muéstrelas a través de memory_search:

ClaveTipoPredeterminadoDescripción
experimental.sessionMemorybooleanfalseHabilitar la indexación de sesiones
sourcesstring[]["memory"]Añada "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 estar ligeramente desactualizados. Los registros de sesión residen en el disco, por lo que debe tratar el acceso al sistema de archivos como el límite de confianza.


ClaveTipoPredeterminadoDescripción
store.vector.enabledbooleantrueUsar sqlite-vec para consultas vectoriales
store.vector.extensionPathstringincluidoAnular la ruta de sqlite-vec

Cuando sqlite-vec no está disponible, OpenClaw recurre automáticamente a la similitud de coseno en proceso.


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

Establezca memory.backend = "qmd" para habilitar. Todas las configuraciones de QMD residen en memory.qmd:

ClaveTipoPredeterminadoDescripción
commandstringqmdRuta del ejecutable QMD
searchModestringsearchComando de búsqueda: search, vsearch, query
includeDefaultMemorybooleantrueAutoíndice 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
ClaveTipoPredeterminadoDescripción
update.intervalstring5mIntervalo de actualización
update.debounceMsnumber15000Debouncing de cambios de archivo
update.onBootbooleantrueActualizar al inicio
update.waitForBootSyncbooleanfalseBloquear el inicio hasta que se complete la actualización
update.embedIntervalstringCadencia de incrustación separada
update.commandTimeoutMsnumberTiempo de espera para comandos QMD
ClaveTipoPredeterminadoDescripción
limits.maxResultsnumber6Máx. resultados de búsqueda
limits.maxSnippetCharsnumberLimitar la longitud del fragmento
limits.maxInjectedCharsnumberLimitar el total de caracteres inyectados
limits.timeoutMsnumber4000Tiempo de espera de búsqueda

Controla qué sesiones pueden recibir resultados de búsqueda QMD. Mismo esquema que session.sendPolicy:

{
memory: {
qmd: {
scope: {
default: "deny",
rules: [{ action: "allow", match: { chatType: "direct" } }],
},
},
},
}

El valor predeterminado es solo MD (DM). match.keyPrefix coincide con la clave de sesión normalizada; match.rawKeyPrefix coincide con la clave sin procesar incluyendo agent:<id>:.

memory.citations se aplica a todos los backends:

ValorComportamiento
auto (predeterminado)Incluir pie de página Source: <path#line> en fragmentos
onIncluir siempre pie de página
offOmitir pie de página (la ruta aún se pasa internamente al agente)
{
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" }],
},
},
}