Saltar al contenido principal
memory_search encuentra notas relevantes de tus archivos de memoria, incluso cuando la redacción difiere del texto original. Divide la memoria en fragmentos pequeños y los busca con embeddings, palabras clave o ambos.

Inicio rápido

OpenClaw usa embeddings de OpenAI de forma predeterminada. Para usar otro proveedor, configúralo explícitamente:
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai", // or "gemini", "voyage", "mistral", "bedrock", "local", "ollama", "lmstudio", "github-copilot", "openai-compatible"
      },
    },
  },
}
provider también puede hacer referencia a una entrada personalizada models.providers.<id> (por ejemplo ollama-5080), siempre que esa entrada establezca api en "ollama" u otro id de proveedor con un adaptador de embeddings de memoria. Para embeddings locales sin clave de API, instala el Plugin oficial de proveedor llama.cpp y configura provider: "local":
openclaw plugins install @openclaw/llama-cpp-provider
Los checkouts de código fuente aún necesitan aprobación de compilación nativa: pnpm approve-builds, y luego pnpm rebuild node-llama-cpp. Algunos endpoints de embeddings compatibles con OpenAI requieren etiquetas input_type asimétricas, como "query" para búsquedas y "document"/"passage" para fragmentos indexados. Configúralas con queryInputType y documentInputType; consulta Referencia de configuración de memoria.

Proveedores compatibles

ProveedorIDRequiere clave de APINotas
BedrockbedrockNoUsa la cadena de credenciales de AWS
DeepInfradeepinfraModelo predeterminado BAAI/bge-m3
GeminigeminiAdmite indexación de imágenes/audio
GitHub Copilotgithub-copilotNoUsa tu suscripción de Copilot
LocallocalNoModelo GGUF, descarga automática de ~0.6 GB
LM StudiolmstudioNoServidor local/autohospedado
Mistralmistral
OllamaollamaNoServidor local/autohospedado
OpenAIopenaiPredeterminado
Compatible con OpenAIopenai-compatibleNormalmenteEndpoint genérico /v1/embeddings
Voyagevoyage

Cómo funciona la búsqueda

OpenClaw ejecuta dos rutas de recuperación en paralelo y fusiona los resultados:
  • Búsqueda vectorial coincide con significado similar (“host de Gateway” coincide con “la máquina que ejecuta OpenClaw”).
  • Búsqueda por palabras clave BM25 coincide con términos exactos (IDs, cadenas de error, claves de configuración).
Si solo una ruta está disponible, la otra se ejecuta sola. Modo solo FTS. Configura provider: "none" para deshabilitar intencionalmente los embeddings y buscar solo con palabras clave. Dejar provider sin definir o configurado en "auto" también vuelve a la clasificación solo por palabras clave si no hay autenticación de embeddings configurada, sin generar errores, y lo mismo hace provider: "local" (el proveedor GGUF/llama.cpp) cuando falla. Proveedor explícito no disponible. Si nombras cualquier otro proveedor explícitamente (por ejemplo openai, ollama, gemini) y deja de estar disponible en el momento de la solicitud (autenticación incorrecta, fallo de red), memory_search informa que la memoria no está disponible en lugar de degradarse silenciosamente a resultados solo FTS. Esto mantiene visible un proveedor configurado roto. Configura provider: "none" para una recuperación deliberada solo FTS, o corrige la configuración del proveedor/autenticación para restaurar la clasificación semántica.

Mejorar la calidad de búsqueda

Dos características opcionales ayudan con un historial grande de notas.

Decaimiento temporal

Las notas antiguas pierden gradualmente peso de clasificación para que la información reciente aparezca primero. Con la vida media predeterminada de 30 días, una nota del mes pasado puntúa al 50% de su peso original. MEMORY.md y otros archivos sin fecha bajo memory/ son permanentes y nunca decaen; solo decaen los archivos con fecha memory/YYYY-MM-DD.md.
Activa esto si tu agente tiene meses de notas diarias y la información obsoleta sigue clasificándose por encima del contexto reciente.

MMR (diversidad)

Reduce resultados redundantes. Si cinco notas mencionan todas la misma configuración de router, MMR garantiza que los resultados principales cubran temas diferentes en lugar de repetirse.
Activa esto si memory_search sigue devolviendo fragmentos casi duplicados de diferentes notas diarias.

Activar ambos

{
  agents: {
    defaults: {
      memorySearch: {
        query: {
          hybrid: {
            mmr: { enabled: true },
            temporalDecay: { enabled: true },
          },
        },
      },
    },
  },
}

Memoria multimodal

Con gemini-embedding-2-preview, puedes indexar imágenes y audio junto con Markdown. Esto solo se aplica a archivos bajo memorySearch.extraPaths; las raíces de memoria predeterminadas (MEMORY.md, memory/*.md) permanecen solo Markdown. Las consultas de búsqueda siguen siendo texto, pero coinciden con contenido visual y de audio. Consulta Referencia de configuración de memoria para la configuración.

Búsqueda en memoria de sesión

Opcionalmente, indexa transcripciones de sesión para que memory_search pueda recordar conversaciones anteriores. Esto es opcional: configura experimental.sessionMemory: true y agrega "sessions" a sources (el valor predeterminado de sources es ["memory"]). Los resultados de sesión obedecen tools.sessions.visibility: el valor predeterminado "tree" solo expone la sesión actual y las sesiones que esta generó. Para recordar una sesión no relacionada del mismo agente desde una sesión diferente (por ejemplo, una sesión despachada por Gateway desde un DM), amplía la visibilidad a "agent". Al usar el backend QMD, configura también memory.qmd.sessions.enabled: true para que las transcripciones se exporten a la colección QMD; experimental.sessionMemory y sources por sí solos no exportan transcripciones a QMD. Consulta referencia de configuración.

Solución de problemas

¿Sin resultados? Ejecuta openclaw memory status para revisar el índice. Si está vacío, ejecuta openclaw memory index --force. ¿Solo coincidencias por palabras clave? Es posible que tu proveedor de embeddings no esté configurado. Revisa openclaw memory status --deep. ¿Los embeddings locales agotan el tiempo de espera? ollama, lmstudio y local usan un tiempo de espera de lote en línea más largo de forma predeterminada. Si el host simplemente es lento, configura agents.defaults.memorySearch.sync.embeddingBatchTimeoutSeconds y vuelve a ejecutar openclaw memory index --force. ¿No se encuentra texto CJK? Reconstruye el índice FTS con openclaw memory index --force.

Relacionado