Cambiar tema

Mnemo con Ollama: memoria local, despliegue y control

Easton editorial illustration: portable local memory cartridge, local model terminal dock, SQLite graph index

"El README de GitHub de Mnemo, revisado el 17 de julio de 2026, confirma el posicionamiento, el inicio con Docker + Ollama, la API y variables actuales, la arquitectura Rust, las pruebas y los benchmarks."

Tu modelo de Ollama ya puede responder preguntas, pero cada conversación empieza desde cero. La decisión de proyecto que comentaste ayer, la preferencia que fijaste hoy y la restricción que necesitarás mañana se olvidan.

Ese es el problema de memoria en los LLM locales. Ollama ofrece un servicio de modelo capaz de responder. Qué responde, y si recuerda las restricciones que ya le diste, depende de cuánto contexto repitas manualmente en cada prompt.

Mnemo no intenta rehacer RAG. Usa un grafo de conocimiento y extracción de entidades para gestionar memoria a largo plazo, de modo que tu LLM local recuerde decisiones de proyecto y relaciones entre entidades en lugar de preguntarte otra vez: “¿Para qué sirve esta API?“

1. Qué es Mnemo: posicionamiento y capacidades clave

1.1 Leer el posicionamiento

En “local-first AI memory layer” hay dos partes importantes:

  • local-first: los datos se guardan localmente, no suben a la nube, se pueden migrar y no dependen de la vida de un SaaS concreto
  • memory layer: no es otro RAG ni otro framework de agentes. Solo se ocupa de la memoria: extracción de entidades, construcción del grafo y recuperación semántica

Por ejemplo: preguntas “¿cuál es la URL base de la API de este proyecto?”. Una búsqueda vectorial pura puede devolver varios fragmentos relacionados con “API”, pero no sabe a qué proyecto te refieres. La recuperación por grafo puede seguir la cadena “proyecto -> API -> baseUrl” y devolver el valor de configuración que definiste antes.

La condición es que la extracción de entidades sea correcta. Si el LLM divide mal “URL base de la API” en dos entidades, “API” y “URL base”, el grafo se parte y la recuperación se corta. Ahí empieza la acumulación de ruido.

Con el posicionamiento claro, las capacidades principales se entienden mejor.

1.2 Matriz de capacidades clave

El README de Mnemo enumera cuatro capacidades principales:

  1. persistent knowledge graph (grafo de conocimiento persistente)

    • Entidades y relaciones se guardan en SQLite, no en vectores de un solo uso
    • La estructura del grafo se puede consultar, exportar y migrar
  2. entity extraction (extracción de entidades)

    • Identifica automáticamente entidades en conversaciones, como personas, proyectos, APIs y decisiones
    • No es recuperación vectorial pura. Convierte “¿para qué sirve esta API?” en una estructura entidad-relación consultable
    • La calidad depende de la comprensión del LLM. Un LLM local como llama3 puede identificar mal entidades en conversaciones complejas, y la acumulación de ruido es un riesgo continuo. El README no da una solución automática de limpieza, así que debes revisar la calidad del grafo regularmente
  3. semantic retrieval (recuperación semántica)

    • Combina búsqueda de texto completo en fragmentos, búsqueda de nombres de entidad, expansión del grafo, filtro de relaciones y ranking ponderado
    • Reduce el peso de resultados expandidos para que las coincidencias directas superen relaciones inferidas y el contexto no crezca sin control
  4. graph-first vs pure vector search

La búsqueda vectorial pura pregunta: “¿qué se parece?”. La recuperación por grafo pregunta: “¿qué está relacionado?”. La primera puede devolver ruido semánticamente parecido pero irrelevante. La segunda puede seguir cadenas de relaciones entre entidades.

La comparación lo deja más claro:

DimensiónBúsqueda vectorial puraGrafo de conocimiento de Mnemo
Lógica de recuperaciónRanking por similitudSeguimiento entidad-relación
Riesgo de ruidoAlto, porque algo parecido puede ser irrelevanteMás bajo, porque hay anclas de entidad
ExplicabilidadBaja, los vectores son opacosAlta, el grafo es visible
PortabilidadLos vectores son difíciles de exportarSQLite se puede exportar
Caso adecuadoBúsqueda documentalMemoria de proyecto, relaciones entre entidades

1.3 Stack técnico y licencia

Stack técnico:

  • Rust, dividido en cuatro crates que veremos en la siguiente sección
  • SQLite para almacenamiento local, con modo WAL
  • petgraph para el grafo en memoria
  • API de OpenAI, Ollama o Anthropic como backend LLM

Licencia: MIT License. Se puede usar, modificar y redistribuir.

Recordatorios de riesgo:

  • Proyecto temprano, según el README de GitHub del 2026-06-05
  • APIs y arquitectura pueden cambiar
  • No hay validación de producción a gran escala documentada
  • Los datos de rendimiento del README son mediciones propias, no una prueba independiente

2. Arquitectura: cuatro crates en Rust

Mnemo está escrito en Rust y dividido en cuatro crates con responsabilidades claras:

mnemo-core: lógica central

  • Extracción de entidades, construcción del grafo y lógica de recuperación
  • No depende de un backend LLM concreto; define interfaces

mnemo-api: servidor

  • Ofrece la API HTTP, por defecto en el puerto 8080
  • Recibe conversaciones, llama a core y devuelve resultados
  • Health check: curl http://localhost:8080/health

mnemo-cli: herramienta de línea de comandos

  • Depuración, gestión y consultas
  • Llama a la API de Mnemo por HTTP para ingesta, recuperación, inspección de entidades y vaciado completo

mnemo-bench: pruebas de rendimiento

  • Los 122 Rust tests, 21 Python tests y 12 benchmarks mencionados en el README están asociados a esta parte
  • Fuente de las mediciones declaradas

Ventajas de separar en cuatro crates:

  • core se puede probar de forma aislada, sin depender de la API
  • cli facilita la depuración local sin arrancar el servicio
  • bench queda separado y no afecta al código de producción

Inconvenientes:

  • Necesitas la toolchain completa de Rust para compilar, salvo que uses Docker
  • Cuando cambian las APIs entre crates, puede tocar sincronizar varios puntos

3. Instalación y despliegue: tres rutas

Mnemo ofrece tres rutas de despliegue, ordenadas por complejidad:

3.1 Docker + Ollama: la forma más rápida de probar

Requisitos: Docker y Ollama instalados.

# 1. clonar el proyecto
git clone https://github.com/zaydmulani09/mnemo.git
cd mnemo

# 2. arrancar Docker
docker compose up -d

# 3. descargar el modelo dentro de Docker
docker exec mnemo-ollama ollama pull llama3

# 4. health check
curl http://localhost:8080/health

Nota: los comandos pueden cambiar. Usa el README de GitHub como fuente de verdad.

Explicación: Docker compose arranca dos contenedores: mnemo-api, el servidor, y mnemo-ollama, el servicio Ollama. Este último es opcional. Si ya tienes Ollama corriendo localmente, puedes usar solo el contenedor mnemo-api y conectarlo con MNEMO_LLM_BASE_URL=http://host.docker.internal:11434/v1.

Verificar la conexión LLM: cuando el health check devuelve {"status":"ok"}, la API está arrancada, pero la conexión al LLM aún no está probada. Envía una petición de prueba con curl:

curl -X POST http://localhost:8080/ingest \
  -H "Content-Type: application/json" \
  -d '{"content":"El proyecto Atlas usa https://api.example.test como URL base","source":"chat","session_id":"mnemo-trial"}'

Tras escribir, llama a /retrieve para comprobar la recuperación:

curl -X POST http://localhost:8080/retrieve \
  -H "Content-Type: application/json" \
  -d '{"text":"¿Cuál es la URL base de la API de Atlas?","session_id":"mnemo-trial"}'

Si la respuesta contiene entidades, fragmentos de memoria o context_prompt, funcionan extracción y recuperación.

Ventajas:

  • No necesitas toolchain de Rust
  • Docker gestiona dependencias automáticamente
  • Ollama y Mnemo quedan en la misma red compose, así que la red es sencilla

Desventajas:

  • Docker consume recursos
  • Depurar es más incómodo, porque debes entrar al contenedor para inspeccionar SQLite
  • Los logs quedan repartidos en dos contenedores

3.2 Binary: compilación local

Requisitos: toolchain de Rust instalada, incluidos cargo y rustc, y Ollama instalado.

# 1. clonar el proyecto
git clone https://github.com/zaydmulani09/mnemo.git
cd mnemo

# 2. compilar la crate de API
cargo install --path crates/mnemo-api

# 3. configurar la dirección de Ollama
export MNEMO_LLM_BASE_URL=http://localhost:11434/v1

# 4. arrancar el servicio
mnemo-api

Nota: los comandos pueden cambiar. Usa el README de GitHub como fuente de verdad; esta ruta requiere toolchain de Rust.

Explicación: el tiempo de compilación depende del hardware y de la caché de Cargo. Después, mnemo-api usa mnemo.db en el directorio actual por defecto. Puedes cambiar la ruta con MNEMO_DB_PATH o la configuración TOML.

Verificar la conexión con Ollama: antes de arrancar, confirma que Ollama corre en localhost:11434 y que el modelo se descargó con ollama pull llama3. Luego prueba con curl:

curl -X POST http://localhost:8080/ingest \
  -H "Content-Type: application/json" \
  -d '{"content":"Probar extracción de entidades en Mnemo","source":"cli-check"}'

Ventajas:

  • No depende de Docker
  • Depuración más sencilla, porque es un proceso local y los logs quedan en la misma terminal
  • Puedes usar mnemo-cli directamente contra SQLite local
  • Puerto y ruta de la base se pueden personalizar con variables de entorno

Desventajas:

  • Requiere toolchain completa de Rust
  • Primera compilación lenta
  • La gestión de dependencias puede fallar, por ejemplo si cargo.lock está obsoleto

3.3 OpenAI-compatible: LLM en la nube

Requisitos: tienes una API key de OpenAI, Anthropic u otro backend compatible con OpenAI.

Lista de variables de entorno, verificada con el README de GitHub de 2026-06:

export MNEMO_LLM_BASE_URL=https://api.openai.com/v1
export MNEMO_LLM_API_KEY=sk-...
export MNEMO_LLM_MODEL=gpt-4o-mini
export MNEMO_LLM_PROVIDER=openai

Luego arranca:

mnemo-api

Nota: los nombres de variables pueden cambiar. Usa el README de GitHub como fuente de verdad.

Casos adecuados:

  • Tu equipo local no tiene suficiente cómputo y usas un LLM en la nube
  • Ya tienes cuota de OpenAI API
  • Aceptas que el contenido de conversación se suba a la API cloud. Con un LLM cloud, la ventaja local-first solo cubre el almacenamiento local, no el tráfico de inferencia

Elige una de las tres rutas según tu situación. Luego toca mirar el rendimiento.

4. Rendimiento: mediciones declaradas en el README

El README de Mnemo lista mediciones propias, revisadas de nuevo el 17 de julio de 2026:

Condiciones de prueba:

  • Apple M2, debug build
  • SQLite en modo WAL
  • petgraph en memoria

Datos de rendimiento:

  • Pipeline completo de recuperación: unos 4,2 ms
  • Release build declara ser 3 a 5 veces más rápido, aproximadamente 0,8 a 1,4 ms

Nota: es una medición del README, no una prueba independiente. El rendimiento cambia con hardware, volumen de datos y backend LLM.

Cómo leer estos números:

  • 4,2 ms es tiempo de recuperación, no tiempo de inferencia LLM. La inferencia LLM es el cuello de botella
  • SQLite WAL más un grafo en memoria puede hacer que la recuperación sea rápida
  • Esto mide solo recuperación, no velocidad de conversación

La experiencia real depende de:

  • tiempo de inferencia LLM, mucho más lento que recuperar contexto
  • longitud de la conversación, porque extraer entidades también usa inferencia LLM
  • volumen de datos, porque un grafo más grande puede ralentizar la búsqueda

Sugerencia: ejecuta mnemo-bench en el hardware objetivo. Los números del README son referencia, no promesa.

5. Rasgos local-first y límites

5.1 Ventajas de local-first

La idea central de local-first es sencilla: los datos están en tu máquina.

Ventajas concretas:

  1. Privacidad

    • Conversaciones, entidades y relaciones se guardan en SQLite local
    • No se suben a un SaaS de terceros, siempre que uses un LLM local
  2. Control de datos

    • El archivo SQLite se puede exportar, respaldar y migrar
    • No dependes de la vida de un SaaS; tus datos siguen contigo
  3. Portabilidad

    • Al cambiar de máquina, copias el archivo SQLite
    • No necesitas volver a “entrenar” la memoria
  4. Depuración

    • SQLite es un formato estándar y se puede revisar con cualquier herramienta SQLite
    • La estructura del grafo es visible, no una caja negra vectorial

5.2 Riesgos y límites

Local-first tiene ventajas, pero también riesgos:

  1. Acumulación de ruido

    • La extracción de entidades no es perfecta y puede equivocarse
    • Las entidades mal reconocidas afectan recuperaciones futuras
    • Hace falta limpieza periódica, pero Mnemo no ofrece limpieza automática
    • La acumulación de ruido no es exclusiva de Mnemo; afecta a todos los sistemas de memoria automática. La diferencia es que el grafo de Mnemo se ve. Puedes ver entidades ruidosas y relaciones incorrectas. En sistemas vectoriales, el ruido queda escondido dentro de los vectores. Es una ventaja del grafo y también una carga de mantenimiento
  2. Límites de borrado y recuperación

    • La API actual borra una entidad, un fragmento de memoria o todo el contenido con un encabezado de confirmación
    • No ofrece una transacción de alto nivel para deshacer la última escritura o una decisión completa
    • Si un error se extendió a varias entidades y relaciones, usa datos de source o session para delimitar qué borrar antes de restaurar una copia
    • Añade source, session_id y un identificador de auditoría a decisiones importantes, y valida la extracción antes de guardar hechos reales
  3. Estado oculto

    • El grafo puede contener relaciones que no ves de inmediato
    • La recuperación puede devolver resultados sin que quede claro por qué salieron
  4. Límites de uso

    • Con grandes volúmenes, SQLite + grafo en memoria puede sufrir presión
    • El uso compartido entre agentes necesita autorización, aislamiento y operación que Mnemo no aporta por sí solo

5.3 Tabla de decisión: cuándo usarlo y cuándo no

EscenarioEncajeMotivo
Proyecto personal o equipo pequeñoEncajaBajo volumen, alta privacidad, buena portabilidad
Gran volumen de datos, escala GBNo encajaPresión sobre SQLite + grafo en memoria, acumulación de ruido
Colaboración de equipo con varios escritoresCondicionalSe puede compartir una API, pero hay que probar autorización, aislamiento y concurrencia
Requisitos fuertes de privacidadEncajaLos datos no salen de la máquina si el LLM es local
Necesidad de memoria global compartidaNo encajaLocal-first es local y exclusivo, no compartido globalmente
Entorno Ollama existenteEncajaIntegración directa y baja curva de aprendizaje
Sin toolchain de RustCondicionalPuedes usar Docker, pero depurar es menos cómodo

Juicio: si tu caso es “proyecto personal, alta privacidad, Ollama existente y volumen moderado”, Mnemo merece una prueba. Si es “gran volumen, colaboración de equipo y memoria global compartida”, conviene esperar a que madure o evaluar otra solución.

Recomendaciones concretas:

  • Ejecuta primero la ruta Docker en un entorno de prueba y observa estructura del grafo, calidad de extracción de entidades y resultados de recuperación
  • Usa conversaciones de prueba para medir riesgo de ruido. Di cosas irrelevantes a propósito y mira si Mnemo las identifica mal
  • Prepara un plan de limpieza. Aprende pronto la estructura SQLite para saber borrar entidades incorrectas manualmente
  • Sigue las actualizaciones del README. Es un proyecto temprano: APIs, arquitectura y comandos de despliegue pueden cambiar

6. Siguiente paso: navegación de la serie

Si todavía no leíste los artículos anteriores de la serie de LLM locales con Ollama, conviene seguir este orden:

  1. Guía inicial de Ollama: el primer paso para ejecutar un gran modelo de lenguaje localmente

    • Empieza aquí si aún no instalaste Ollama
  2. Llamadas a la API de Ollama: de curl a la interfaz compatible con OpenAI SDK

    • Mnemo usa una API compatible con OpenAI, así que conviene entender la API de Ollama
  3. Ollama Embedding en la práctica: búsqueda vectorial local y RAG

    • Sirve para comparar la búsqueda vectorial pura con la cadena de texto completo, entidades y grafo de Mnemo
  4. Gestión de memoria para AI Agent: memoria a largo plazo y gobernanza del conocimiento

    • Mnemo es una herramienta de capa de memoria; este artículo aborda la gobernanza de memoria de agentes

Después de estos cuatro artículos, instala Mnemo y ejecuta la ruta Docker localmente. El primer resultado útil es ver cómo luce realmente el grafo de conocimiento.

Validar Mnemo con Docker y Ollama en el camino mínimo

Valida arranque del servicio, conexión al modelo, escritura de memoria, recuperación, persistencia y limpieza en un entorno temporal antes de conectarlo a tu agente principal.

⏱️ Estimated time: 1-2 hours

  1. 1

    Step 1: Clonar el repositorio y arrancar compose

    Clona el repositorio mnemo según el README de GitHub, ejecuta `docker compose up -d` y confirma que los contenedores mnemo-api y mnemo-ollama arrancan.
  2. 2

    Step 2: Descargar un modelo de prueba

    Dentro del contenedor, ejecuta `docker exec mnemo-ollama ollama pull llama3`, o elige el modelo recomendado por el README actual.
  3. 3

    Step 3: Comprobar la salud de la API

    Solicita `http://localhost:8080/health`. Confirma primero que el servicio responde antes de depurar la conexión LLM.
  4. 4

    Step 4: Escribir una memoria de prueba

    Usa el SDK Python o el ejemplo de API del README para escribir una memoria de proyecto. No lo conectes al proyecto real el primer día.
  5. 5

    Step 5: Verificar recuperación y persistencia tras reiniciar

    Pregunta por la memoria en lenguaje natural, reinicia los contenedores y consulta de nuevo. Los datos SQLite no deben perderse.
  6. 6

    Step 6: Ensayar borrado y expiración

    Escribe a propósito una memoria incorrecta y prueba a borrarla, marcarla como expirada o reconstruir el grafo. Las respuestas posteriores no deberían usar el hecho antiguo.

FAQ

¿La memoria no crecerá hasta convertirse en basura?
Puede pasar. Mnemo extrae entidades automáticamente y el LLM puede identificarlas mal. El ruido se acumula. Para reducirlo, revisa el grafo con mnemo-cli o herramientas SQLite y define reglas de filtrado de entidades. El README no ofrece una solución completa de limpieza automática, así que la calidad del grafo sigue necesitando mantenimiento humano.
¿En qué es mejor Mnemo que la búsqueda vectorial?
La diferencia principal es la recuperación por grafo combinada con ranking de similitud. La búsqueda vectorial encuentra fragmentos parecidos y puede devolver texto similar pero irrelevante. Un grafo de conocimiento sigue relaciones entre entidades, da anclajes, se explica mejor y sirve más para decisiones de proyecto y relaciones entre entidades. A cambio, una mala extracción contamina el grafo y construirlo todavía requiere inferencia LLM.
¿Puedo revertir si Mnemo guarda algo incorrecto?
La API actual permite borrar entidades y fragmentos de memoria, además de vaciar todo con un endpoint confirmado. No ofrece una reversión transaccional de la última escritura. Conserva source y session_id, y ensaya borrado selectivo, copias de seguridad y recuperación durante el piloto.
¿Qué backends LLM admite Mnemo?
El README indica que puede conectarse a Ollama, OpenAI, Anthropic u otra API compatible con OpenAI. Si usas un LLM en la nube, el contenido de la conversación se envía a esa API. La ventaja local-first cubre el almacenamiento local, no el tráfico de inferencia en la nube.
¿Pueden varios agentes compartir una misma base de memoria?
Varios agentes pueden leer y escribir mediante un mismo servicio API de Mnemo. El README no promete aislamiento multiusuario, límites de autorización ni comportamiento con alta concurrencia. Prueba aislamiento de sesiones, conflictos de escritura y acceso a datos sensibles, y evita que varios procesos modifiquen directamente el archivo de base de datos.
¿Cómo se migran los datos de Mnemo?
Detén las escrituras, respalda la base SQLite, cópiala a la nueva máquina y arranca Mnemo con una configuración compatible. Después comprueba `/health`, el número de entidades, las relaciones del grafo y consultas representativas. Como el README no garantiza compatibilidad de la base entre versiones, conserva una copia restaurable antes de actualizar.

12 min de lectura · Publicado el: 18 jul 2026 · Actualizado el: 27 jul 2026

Ruta de lectura de la serieParte 1 de 1

Guía de Ollama local LLM

Estás leyendo el primer artículo de esta serie. Continúa con el siguiente o abre el hub para ver toda la ruta.

Ver hub de la serie

Anterior

Estás al inicio de esta serie.

Siguiente

Este es el artículo más reciente de la serie por ahora.

Artículos relacionados

Comentarios

Inicia sesión con GitHub para dejar un comentario

Easton BlogEaston Blog