Enter password to access
Write → Store → Retrieve → Decay → Reactivate
"The Hippocampus"
Compare new vs existing
"Neural Fingerprint"
768-dim Matryoshka via Gemini
"Synaptic Consolidation"
Atomic UPSERT
"Synapse Formation"
Cosine > 0.7 → bidirectional
"The Amygdala"
100% LLM — Plutchik 8 + Arousal/Valence
Reciprocal Rank Fusion (k=60)
2-hop BFS through memory graph
Structured response by lanes + general overlay
Background LLM process analyzes newly stored memories to discover missing latent connections.
Adjusts memory reliability based on repeated exposure or conflicting information.
"No somos lo que recordamos, sino cómo lo recordamos."
"We are not what we remember, but how we remember it."
Este documento explica el sistema de memoria de Mnemosyne: sin código, con analogías al cerebro humano, describiendo cada proceso como una función cognitiva.
Los chatbots y agentes de IA carecen de algo que cualquier humano da por sentado: la capacidad de recordar. Cada conversación es un lienzo en blanco. Mnemosyne nace para resolver esto: es un sistema de memoria persistente, por usuario, que permite a un agente conversacional recordar, olvidar, reactivar y conectar recuerdos de forma análoga al cerebro humano.
El diseño se apoya en tres pilares de la ciencia cognitiva:
Así como el cerebro humano no tiene una sola "memoria" sino múltiples sistemas (episódica, semántica, procedural, de trabajo), Mnemosyne divide la información en cinco carriles funcionales:
| Carril | Analogía Cognitiva | Ejemplo |
|---|---|---|
| facts_prefs | Memoria semántica | "El usuario es alérgico a la penicilina" |
| short_term | Memoria de corto plazo | "En esta sesión preguntó por dietas" |
| working_set | Memoria de trabajo | "Está construyendo una app en TypeScript" |
| long_term | Memoria episódica consolidada | "Tuvo una apendicectomía en 2023" |
| mid_term | Cues de rehydratación | Tarjetas resumen para temas en transición |
La asignación a cada carril la decide el agente que interactúa con el usuario, no el sistema de memoria. Mnemosyne almacena y gestiona; el agente clasifica.
La memoria humana no es un gran saco: recordamos cosas en contexto. Mnemosyne replica esto con "context buckets": compartimentos temáticos que aíslan la memoria por dominio.
Un usuario puede tener el bucket health_wellness (donde se recuerda que tiene asma leve), learning_python (donde se recuerda que prefiere tutoriales prácticos), y work_project_alpha (donde se recuerda que su deadline es el viernes).
Hay memorias que no pertenecen a ningún contexto específico, sino a la identidad misma del usuario: su nombre, profesión, empresa, preferencias universales. Estas memorias se marcan como "generales" y se almacenan en un bucket especial. Cuando el sistema recupera memorias de cualquier contexto, siempre incluye este overlay general como un sustrato de identidad permanente.
Es el equivalente al autoconcepto en psicología: la información sobre quién eres que acompaña todo lo que piensas, independientemente del tema. Preguntar sobre tu proyecto de trabajo activa tus memorias de trabajo y tu identidad general.
Cada memoria tiene un tipo epistémico que indica su naturaleza como conocimiento:
Cuando un agente conversacional quiere "recordar" algo sobre el usuario, la información pasa por un pipeline de tres fases que reproduce el proceso de codificación de la memoria humana.
Antes de almacenar una nueva memoria, el sistema hace exactamente lo que hace el hipocampo: comparar lo nuevo con lo existente.
Embedding — Cada memoria recibe una "huella neuronal": un vector de 768 dimensiones que captura su significado. Memorias con significados similares quedan cerca en el espacio geométrico.
Curación — Con esta huella, el sistema busca memorias existentes en el bucket actual y en el bucket general (búsqueda cross-bucket). Usa dos estrategias simultáneas: búsqueda por palabras clave y búsqueda por significado. Ambas listas se fusionan.
Analogía cerebral: Cuando alguien te dice su número de teléfono nuevo, tu cerebro actualiza el existente (UPDATE), debilitando el antiguo. Si te dicen que algo que creías es falso, lo contradices (DELETE). La curación replica estos procesos.
La memoria se almacena de forma atómica — todo o nada. En este momento se establece:
Una vez almacenada, tres procesos se ejecutan simultáneamente:
Linking — Busca memorias con similitud semántica alta (> 0.7) y crea enlaces bidireccionales. Máximo 20 enlaces por memoria, podando los más débiles. Estos enlaces semánticos son la base del grafo de memoria.
Etiquetado Emocional — Extracción 100% LLM (Gemini) de las 8 categorías de Plutchik con intensidad, más arousal (activación fisiológica) y valence (valencia positiva/negativa) según el modelo circumplejo de Russell.
Modulación por Arousal — El arousal (la intensidad emocional, no la emoción en sí) modula tres aspectos críticos, replicando los hallazgos de McGaugh sobre cómo las experiencias emocionalmente intensas se recuerdan mejor:
d_eff = d × (1 - 0.4 × arousal) — un recuerdo con alto arousal (rabia, éxtasis, terror) decae más lentamente que uno neutro.score × (1 + 0.3 × arousal) — memorias emocionalmente intensas aparecen antes en los resultados.delta × (1 + 0.5 × arousal).Cuando el agente necesita contexto para responder al usuario, Mnemosyne ejecuta un pipeline de recuperación que combina múltiples estrategias para encontrar los recuerdos más relevantes.
Canal Semántico — Similitud coseno en espacio 768-dim. Encuentra "alergia" cuando se pregunta "¿puedo recetarle penicilina?". Captura el significado.
Canal Léxico — Full-text search. Captura acrónimos, nombres propios, números exactos, palabras técnicas — lo que el significado solo no atraparía.
Canal de Señal — Devuelve las memorias más activas (score de activación ACT-R) y confiables (confidence), independientemente de coincidencia textual. Son los recuerdos "que están en la punta de la lengua".
Los tres canales se fusionan con Reciprocal Rank Fusion: score = Σ 1/(60+rank). Una memoria que aparece bien posicionada en los tres canales se eleva al tope. Una que solo aparece en uno sigue siendo considerada.
Analogía cerebral: Es como cuando un olor, un sonido y un contexto visual convergen para evocar un recuerdo específico. Cuantas más "pistas" coinciden, más vívido es el recuerdo.
El sistema detecta la complejidad de la consulta y ajusta cuántas memorias recupera:
Las mejores memorias encontradas se usan como "semillas" para explorar el grafo de conexiones. Desde cada semilla, el sistema navega hasta 2 saltos de distancia, recorriendo los enlaces descubiertos por la consolidación.
La activación se atenúa con cada salto (×0.8) y se modula por la fuerza del enlace. Los enlaces que resultan útiles se refuerzan automáticamente — mecanismo hebbiano: "las neuronas que disparan juntas se conectan más fuerte".
Intención MAGMA — La exploración del grafo se adapta a la intención de la pregunta:
Siempre se ejecuta una segunda ronda de recuperación contra el bucket "general" usando su propio pipeline RRF de 3 canales. Las memorias generales se devuelven en sección separada, asegurando que el agente siempre sepa quién es el usuario independientemente del contexto de la conversación.
Este es el principio más importante del sistema: el acto de recordar fortalece el recuerdo. Cuando una memoria es recuperada en respuesta a una consulta — incluso si estaba en estado Dream o Forgotten — se reactiva automáticamente a Core. Se le añade un nuevo timestamp de acceso y se resetea su temporizador de decaimiento.
Analogía cerebral: Es exactamente lo que ocurre con la práctica de recuperación (retrieval practice) en neurociencia. Un recuerdo olvidado que se evoca con esfuerzo se consolida más fuertemente que uno que nunca fue desafiado. Por eso preguntar "¿recuerdas los buenos días que me diste?" reactiva no solo ese recuerdo sino todos los que el sistema recuperó para construir la respuesta.
Core → Dream → Forgotten → Archive
(activo) (latente) (olvidado) (archivo profundo)
El sistema de memoria tiene un DecayWorker que corre automáticamente en segundo plano. Su ritmo se adapta a la escala de tiempo configurada: en modo normal, cada hora; en modo acelerado (para pruebas), cada pocos segundos.
B = ln( Σ t_j^(-d) ) + boost_asociativo + ruido
Donde t_j es el tiempo desde cada acceso previo (se guardan hasta 50 timestamps), d es la tasa de decaimiento (0.5, modulada por arousal). El boost asociativo viene del grafo de enlaces — memorias con vecinos activos decaen más lentamente (solo se propagan contribuciones positivas). El ruido estocástico modela la variabilidad natural de la memoria.
Cuando la activación cae por debajo de umbrales específicos, la memoria transiciona:
Un recuerdo solo puede caer un nivel por tick — nunca salta de Core directamente a Archive.
Una memoria archivada no está perdida. Cualquiera de estos mecanismos la devuelve a Core:
La confianza de una memoria no es estática — evoluciona con cada interacción según el modelo CARA (Confidence through Accumulative Reinforcement and Attenuation):
Estos deltas se amplifican por arousal: una confirmación dicha con entusiasmo refuerza más (+0.15) que una neutra (+0.10). Cada ajuste se registra en un historial auditable con timestamp, acción, delta, arousal y justificación.
Cada 60 segundos, el Consolidation Worker — el equivalente al sueño REM del sistema — examina memorias no consolidadas y descubre conexiones profundas que no son evidentes en el momento de la escritura:
| Tipo | Subtipos | Ejemplo |
|---|---|---|
| Causal | leads_to, because_of, enables, prevents | "Aprendió TypeScript" → "Construyó la app" |
| Temporal | precedes, succeeds, concurrent | "Empezó en marzo" → "Terminó en junio" |
| Entity | refers_to, mentioned_in | "Trabaja en Kopernica" ↔ "Proyecto Alpha de Kopernica" |
| Emotional | shares_emotion, contrasts_emotion, evolves_from | "Estresado por el deadline" ↔ "Aliviado al terminar" |
Analogía cerebral: Durante el sueño REM, el hipocampo "replays" experiencias del día y el neocórtex forma conexiones a largo plazo. El consolidation worker hace exactamente eso: revisa memorias recientes y descubre que "el estrés por el deadline" y "la alegría de entregar a tiempo" están conectados emocionalmente, o que "aprender TypeScript" fue la causa de "poder construir la app".
Toda la memoria está aislada por usuario mediante Row-Level Security de PostgreSQL. Un usuario nunca puede ver, buscar ni modificar memorias de otro. Es como si cada usuario tuviera su propio cerebro completamente independiente.
| Aspecto | Chatbot Tradicional | Mnemosyne |
|---|---|---|
| Persistencia | Ninguna o solo última sesión | Memoria permanente por usuario |
| Organización | Texto plano o key-value | 5 carriles + contextos + overlay general + tipos epistémicos |
| Búsqueda | Keyword match | 3 canales (semántico + léxico + señal) con RRF + profundidad adaptativa |
| Olvido | Manual o nunca | Decay automático ACT-R (background worker) |
| Reactivación | No existe | 4 mecanismos (acceso, confirmación, update, re-escritura) |
| Conexiones | No existe | Grafo con 4 tipos de enlace + spreading activation + intención MAGMA |
| Emociones | No existe | 8 categorías Plutchik + arousal/valence (modula decay, retrieval, encoding, confianza) |
| Consolidación | No existe | Worker asíncrono LLM cada 60s (análogo al sueño REM) |
| Confianza | Estática | CARA evolutiva con historial auditable |
| Identidad cruzada | No existe | General overlay: el "yo" del usuario presente en todo contexto |
This document explains Mnemosyne's memory system: no code, with analogies to the human brain, describing each process as a cognitive function.
Chatbots and AI agents lack something every human takes for granted: the ability to remember. Every conversation is a blank canvas. Mnemosyne was born to solve this: it's a persistent, per-user memory system that allows a conversational agent to remember, forget, reactivate, and connect memories analogously to the human brain.
The design rests on three pillars of cognitive science:
Just as the human brain doesn't have a single "memory" but multiple systems (episodic, semantic, procedural, working), Mnemosyne divides information into five functional lanes:
| Lane | Cognitive Analogy | Example |
|---|---|---|
| facts_prefs | Semantic memory | "The user is allergic to penicillin" |
| short_term | Short-term memory | "Asked about diets in this session" |
| working_set | Working memory | "Is building a TypeScript app" |
| long_term | Consolidated episodic memory | "Had an appendectomy in 2023" |
| mid_term | Rehydration cues | Summary cards for transitioning topics |
Lane assignment is decided by the agent interacting with the user, not by the memory system. Mnemosyne stores and manages; the agent classifies.
Human memory isn't a big bag: we remember things in context. Mnemosyne replicates this with "context buckets": thematic compartments that isolate memory by domain.
A user might have the bucket health_wellness (where mild asthma is remembered), learning_python (where a preference for hands-on tutorials is stored), and work_project_alpha (where a Friday deadline is tracked).
Some memories don't belong to any specific context but to the user's identity itself: their name, profession, company, universal preferences. These memories are marked as "general" and stored in a special bucket. When the system retrieves memories from any context, it always includes this general overlay as a permanent identity substrate.
It's the equivalent of self-concept in psychology: information about who you are that accompanies everything you think about, regardless of topic. Asking about your work project activates your work memories and your general identity.
Each memory carries an epistemic type indicating its nature as knowledge:
When a conversational agent wants to "remember" something about the user, the information passes through a three-phase pipeline that reproduces the human memory encoding process.
Before storing a new memory, the system does exactly what the hippocampus does: compare the new with the existing.
Embedding — Each memory receives a "neural fingerprint": a 768-dimensional vector that captures its meaning. Memories with similar meanings end up close in geometric space.
Curation — With this fingerprint, the system searches for existing memories in the current bucket and in the general bucket (cross-bucket search). It uses two simultaneous strategies: keyword search and meaning-based search. Both lists are fused.
Brain analogy: When someone tells you their new phone number, your brain updates the existing one (UPDATE), weakening the old one. If you're told something you believed is false, you contradict it (DELETE). Curation replicates these processes.
The memory is stored atomically — all or nothing. At this point the following are established:
Once stored, three processes run simultaneously:
Linking — Searches for memories with high semantic similarity (> 0.7) and creates bidirectional links. Maximum 20 links per memory, pruning the weakest. These semantic links form the foundation of the memory graph.
Emotion Tagging — 100% LLM-based extraction (Gemini) of Plutchik's 8 categories with intensity, plus arousal (physiological activation) and valence (positive/negative) following Russell's circumplex model.
Arousal Modulation — Arousal (emotional intensity, not the emotion itself) modulates four critical aspects, replicating McGaugh's findings on how emotionally intense experiences are better remembered:
d_eff = d × (1 - 0.4 × arousal) — a high-arousal memory (rage, ecstasy, terror) decays more slowly than a neutral one.score × (1 + 0.3 × arousal) — emotionally intense memories appear first in results.delta × (1 + 0.5 × arousal).When the agent needs context to respond to the user, Mnemosyne runs a retrieval pipeline that combines multiple strategies to find the most relevant memories.
Semantic Channel — Cosine similarity in 768-dim space. Finds "allergy" when asked "can I prescribe penicillin?". Captures meaning.
Lexical Channel — Full-text search. Captures acronyms, proper nouns, exact numbers, technical terms — what meaning alone wouldn't catch.
Signal Channel — Returns the most active (ACT-R activation score) and reliable (confidence) memories, regardless of textual match. These are the memories "on the tip of your tongue".
The three channels are fused with Reciprocal Rank Fusion: score = Σ 1/(60+rank). A memory that ranks well across all three channels rises to the top. One that only appears in one channel is still considered.
Brain analogy: It's like when a smell, a sound, and a visual context converge to evoke a specific memory. The more "cues" that match, the more vivid the recall.
The system detects query complexity and adjusts how many memories to retrieve:
The top memories found are used as "seeds" to explore the connection graph. From each seed, the system navigates up to 2 hops, traversing links discovered by consolidation.
Activation attenuates with each hop (×0.8) and is modulated by link strength. Links that prove useful are automatically reinforced — Hebbian mechanism: "neurons that fire together wire together".
MAGMA Intent — Graph exploration adapts to the question's intent:
A second retrieval round is always executed against the "general" bucket using its own 3-channel RRF pipeline. General memories are returned in a separate section, ensuring the agent always knows who the user is regardless of conversation context.
This is the system's most important principle: the act of remembering strengthens the memory. When a memory is retrieved in response to a query — even if it was in Dream or Forgotten state — it's automatically reactivated to Core. A new access timestamp is added and its decay timer resets.
Brain analogy: This is exactly what happens with retrieval practice in neuroscience. A forgotten memory that's evoked with effort consolidates more strongly than one that was never challenged. That's why asking "do you remember when I said good morning?" reactivates not just that memory but all memories the system retrieved to build the response.
Core → Dream → Forgotten → Archive
(active) (latent) (forgotten) (deep archive)
The memory system has a DecayWorker that runs automatically in the background. Its pace adapts to the configured time scale: in normal mode, every hour; in accelerated mode (for testing), every few seconds.
B = ln( Σ t_j^(-d) ) + associative_boost + noise
Where t_j is the time since each prior access (up to 50 timestamps are stored), d is the decay rate (0.5, modulated by arousal). The associative boost comes from the link graph — memories with active neighbors decay more slowly (only positive contributions propagate). Stochastic noise models natural memory variability.
When activation falls below specific thresholds, the memory transitions:
A memory can only drop one level per tick — it never jumps from Core directly to Archive.
An archived memory isn't lost. Any of these mechanisms returns it to Core:
A memory's confidence isn't static — it evolves with each interaction following the CARA model (Confidence through Accumulative Reinforcement and Attenuation):
These deltas are amplified by arousal: an enthusiastic confirmation reinforces more (+0.15) than a neutral one (+0.10). Each adjustment is recorded in an auditable history with timestamp, action, delta, arousal, and justification.
Every 60 seconds, the Consolidation Worker — the system's equivalent of REM sleep — examines unconsolidated memories and discovers deep connections that aren't evident at write time:
| Type | Subtypes | Example |
|---|---|---|
| Causal | leads_to, because_of, enables, prevents | "Learned TypeScript" → "Built the app" |
| Temporal | precedes, succeeds, concurrent | "Started in March" → "Finished in June" |
| Entity | refers_to, mentioned_in | "Works at Kopernica" ↔ "Kopernica's Project Alpha" |
| Emotional | shares_emotion, contrasts_emotion, evolves_from | "Stressed about deadline" ↔ "Relieved after finishing" |
Brain analogy: During REM sleep, the hippocampus "replays" the day's experiences and the neocortex forms long-term connections. The consolidation worker does exactly this: it reviews recent memories and discovers that "deadline stress" and "the joy of delivering on time" are emotionally connected, or that "learning TypeScript" caused "being able to build the app".
All memory is isolated per user via PostgreSQL Row-Level Security. A user can never see, search, or modify another user's memories. It's as if each user has their own completely independent brain.
| Aspect | Traditional Chatbot | Mnemosyne |
|---|---|---|
| Persistence | None or last session only | Permanent per-user memory |
| Organization | Plain text or key-value | 5 lanes + contexts + general overlay + epistemic types |
| Search | Keyword match | 3 channels (semantic + lexical + signal) with RRF + adaptive depth |
| Forgetting | Manual or never | Automatic ACT-R decay (background worker) |
| Reactivation | Doesn't exist | 4 mechanisms (access, confirmation, update, re-write) |
| Connections | Doesn't exist | Graph with 4 link types + spreading activation + MAGMA intent |
| Emotions | Doesn't exist | 8 Plutchik categories + arousal/valence (modulates decay, retrieval, encoding, confidence) |
| Consolidation | Doesn't exist | Async LLM worker every 60s (REM sleep analogue) |
| Confidence | Static | Evolutionary CARA with auditable history |
| Cross-context identity | Doesn't exist | General overlay: the user's "self" present in every context |