Archivia, comprimi e recupera memorie a lungo termine con compressione semantica senza perdita. Ora con supporto multimodale per testo, immagini, audio e video.
Compatibile con qualsiasi piattaforma AI che supporta MCP (memoria testuale) o integrazione Python (multimodale completo)
|
Claude Desktop |
Cursor |
LM Studio |
Cherry Studio |
Pacchetto PyPI |
+ Qualsiasi Client MCP |
🇨🇳 中文 •
🇯🇵 日本語 •
🇰🇷 한국어 •
🇪🇸 Español •
🇫🇷 Français •
🇩🇪 Deutsch •
🇧🇷 Português
🇷🇺 Русский •
🇸🇦 العربية •
🇮🇹 Italiano •
🇻🇳 Tiếng Việt •
🇹🇷 Türkçe •
🇬🇧 English
🚀 Avvio Rapido • 🌟 Panoramica • 📦 Installazione • 🔌 Server MCP • 📊 Riproduci • 📝 Citazione
- [05/21/2026] 📦 Pacchetto unificato
simplemem— un solo import, instradamento automatico! SimpleMem, Omni-SimpleMem e EvolveMem vivono ora in un unico pacchetto.from simplemem import SimpleMemseleziona automaticamente il backend testuale o multimodale in base al primo metodo chiamato, esimplemem.optimize(...)attiva il ciclo di auto-evoluzione di EvolveMem. Installazione in un solo passaggio conpip install -e .. - [05/14/2026] 🧬 EvolveMem (v3.0) — Memoria Auto-Evolutiva tramite AutoResearch! L'infrastruttura di recupero si auto-evolve ora attraverso una diagnosi a circuito chiuso guidata da LLM. Su LoCoMo, EvolveMem supera la baseline più forte del +25,7% relativo; su MemBench, del +18,9% relativo. Il sistema scopre dimensioni di recupero completamente nuove, non presenti nel design originale. Vedi EvolveMem →
- [04/02/2026] 🧠 Omni-SimpleMem (v2.0) — La Memoria Multimodale è Arrivata! SimpleMem supporta ora la memoria testuale, di immagini, audio e video. Raggiunge nuovo SOTA su LoCoMo (F1=0,613, +47%) e Mem-Gallery (F1=0,810, +51%) rispetto ai risultati precedentemente migliori. Vedi Omni-SimpleMem →
- [02/09/2026] 🚀 Memoria Cross-Sessione — Supera Claude-Mem del 64%! Vedi Documentazione Cross-Session →
- [01/20/2026] 📦 SimpleMem è ora disponibile su PyPI! Installa con
pip install simplemem. Vedi Guida all'Utilizzo del Pacchetto → - [01/14/2026] 🎉 Il Server MCP di SimpleMem è ATTIVO! Ospitato nel cloud su mcp.simplemem.cloud. Vedi Documentazione MCP →
- [01/05/2026] Il paper di SimpleMem è stato pubblicato su arXiv!
- 🚀 Avvio Rapido
- 🌟 Panoramica
- 📦 Installazione
- 🐳 Docker
- 🔌 Server MCP
- 📊 Riproduci i Risultati del Paper
- 🗺️ Roadmap
- 📝 Citazione
Ad alto livello, SimpleMem funziona come un sistema di memoria a lungo termine per agenti basati su LLM. Il flusso di lavoro consiste in tre semplici passaggi:
- Archivia informazioni – I dialoghi o i fatti vengono elaborati e convertiti in memorie strutturate e atomiche.
- Indicizza la memoria – Le memorie archiviate vengono organizzate utilizzando embedding semantici e metadati strutturati.
- Recupera la memoria rilevante – Quando viene effettuata una query, SimpleMem recupera le informazioni archiviate più pertinenti in base al significato anziché alle parole chiave.
Questo design consente agli agenti LLM di mantenere il contesto, richiamare le informazioni passate in modo efficiente ed evitare di elaborare ripetutamente la cronologia ridondante.
SimpleMem viene distribuito come singolo pacchetto simplemem. La modalità predefinita mode="auto" rileva automaticamente quale backend utilizzare in base a ciò che chiami — nessuna configurazione manuale necessaria:
from simplemem import SimpleMem
mem = SimpleMem() # mode="auto" — backend scelto dalla prima chiamataIl primo metodo che chiami determina il backend:
| Prima chiamata | Backend selezionato | Perché |
|---|---|---|
add_dialogue() |
Testuale (SimpleMem) | API basata su dialogo → modalità testo |
add_text() / add_image() / add_audio() / add_video() |
Omni (Omni-SimpleMem) | API multimodale → modalità omni |
|
📝 Auto → Testo (input solo testo) from simplemem import SimpleMem
mem = SimpleMem() # auto mode
# add_dialogue() → text backend auto-selected
mem.add_dialogue(
"Alice",
"Bob, let's meet at Starbucks tomorrow at 2pm",
"2025-11-15T14:30:00",
)
mem.add_dialogue(
"Bob",
"Sure, I'll bring the market analysis report",
"2025-11-15T14:31:00",
)
mem.finalize()
answer = mem.ask("When and where will Alice and Bob meet?")
# → "16 November 2025 at 2:00 PM at Starbucks" |
🧠 Auto → Omni (input multimodale) from simplemem import SimpleMem
mem = SimpleMem() # auto mode
# add_image() → omni backend auto-selected
mem.add_text(
"User loves hiking in the Rocky Mountains.",
tags=["session_id:D1"],
)
mem.add_image("photo.jpg", tags=["session_id:D1"])
mem.add_audio("voice_note.wav", tags=["session_id:D1"])
result = mem.query("What does the user enjoy?", top_k=5)
for item in result.items:
print(item["summary"])
mem.close() |
💡 Suggerimento: La modalità auto sceglie il backend più leggero adatto ai tuoi dati. Puoi comunque usare
mode="text"omode="omni"esplicitamente se preferisci.
Ottimizza gli iperparametri di recupero offline sul tuo set di sviluppo, poi distribuisci la Config risultante per l'inferenza. Questo è un sottile wrapper attorno al ciclo di auto-evoluzione di EvolveMem:
import simplemem
from simplemem import SimpleMem, load_config
# mem è un'istanza SimpleMem finalizzata con memorie già costruite
dev_questions = [
("When is the meeting?", "2pm tomorrow at Starbucks"),
("What should Bob prepare?", "market analysis report"),
]
config = simplemem.optimize(mem, dev_questions, max_rounds=3)
config.save("my_config.json")
# In seguito, distribuisci con la config ottimizzata
config = load_config("my_config.json")
mem = SimpleMem(config=config)EvolveMem esegue un ciclo Valuta → Diagnostica → Proponi → Tutela guidato da LLM sulle tue domande di sviluppo, regolando i flag di recupero globali (top_k, modalità di fusione, verifica delle risposte, cicli di riflessione, ...). Per la versione standalone completa con adattatori benchmark e override per categoria, vedi
EvolveMem/.
Per l'elaborazione di dialoghi su larga scala, abilita la modalità parallela:
from simplemem import create
mem = create(
mode="text",
clear_db=True,
enable_parallel_processing=True, # ⚡ Costruzione memoria parallela
max_parallel_workers=8,
enable_parallel_retrieval=True, # 🔍 Esecuzione query parallela
max_retrieval_workers=4
)💡 Consiglio Pro: L'elaborazione parallela riduce significativamente la latenza per le operazioni batch!
SimpleMem è uno stack di memoria unificato per agenti LLM, costruito su un principio: archiviare memoria semanticamente senza perdita ad alta densità di informazioni, in modo che un agente ricordi di più spendendo molti meno token. Il pacchetto riunisce tre lavori che condividono questo principio ma affrontano parti diverse del problema.
La maggior parte dei sistemi di memoria impone un cattivo compromesso. O accumulano passivamente la cronologia delle interazioni grezze (ridondante, vorace di token) oppure eseguono costosi cicli di ragionamento per filtrare il rumore (lenti, costosi). SimpleMem invece comprime le interazioni attraverso una pipeline a tre stadi:
| Stadio | Cosa fa |
|---|---|
| 1. Compressione Strutturata Semantica | Distilla le interazioni non strutturate in unità di memoria compatte (fatti autonomi con coreference risolte e timestamp assoluti), ciascuna indicizzata attraverso più viste complementari per un recupero flessibile. |
| 2. Sintesi Semantica Online | Unisce il contesto correlato all'interno di una sessione in rappresentazioni astratte unificate, eliminando la ridondanza man mano che la memoria viene costruita anziché al momento della query. |
| 3. Pianificazione del Recupero Consapevole dell'Intento | Inferisce l'intento di ricerca dietro una query per decidere cosa recuperare e assemblare un contesto preciso e compatto. |
Sul benchmark LoCoMo questo offre un guadagno medio di F1 del 26,4% rispetto ai sistemi precedenti, riducendo al contempo il consumo di token al momento dell'inferenza di circa 30 volte. Dettagli sul meccanismo (livelli dell'indice ibrido, esempi di compressione, pianificazione del recupero): Memoria testuale SimpleMem →.
Omni-SimpleMem estende la filosofia "compressione prima di tutto" a quattro modalità, costruita su tre principi: Ingestione Selettiva (filtraggio guidato dall'entropia per modalità), Recupero Progressivo (FAISS + BM25 ibrido con espansione piramidale del budget di token), e Augmentazione con Grafo di Conoscenza (ragionamento multi-hop cross-modale). Anziché essere progettata a mano, la sua architettura è stata scoperta da una pipeline di ricerca autonoma che ha eseguito circa 50 esperimenti su due benchmark, diagnosticando modalità di fallimento, proponendo modifiche architetturali e persino riparando bug della pipeline dei dati senza intervento umano nel ciclo interno. Significativamente, le correzioni dei bug e le modifiche architetturali hanno ciascuna contribuito più di tutta l'ottimizzazione degli iperparametri combinata, portando il sistema da una baseline naïve allo stato dell'arte sia su LoCoMo che su Mem-Gallery. Documentazione completa: Omni-SimpleMem →.
EvolveMem colma un punto cieco condiviso da quasi ogni sistema di memoria: il contenuto archiviato si evolve, ma il macchinario di recupero (funzioni di scoring, strategie di fusione, politiche di generazione delle risposte) rimane congelato dopo il deployment. EvolveMem esegue un processo AutoResearch a circuito chiuso (Valuta → Diagnostica → Proponi → Tutela → Ripeti) in cui un LLM diagnostica i fallimenti per domanda e propone modifiche alla configurazione, tutelate da rollback automatico in caso di regressione e incentivi all'esplorazione durante la stagnazione. Scopre nuove dimensioni di recupero (decomposizione della query, scambio di entità, verifica delle risposte) non presenti nel design originale, migliora LoCoMo del 25,7% relativo rispetto alla baseline più forte, e le sue configurazioni evolute si trasferiscono positivamente tra i benchmark. Documentazione completa: EvolveMem →.
from simplemem import SimpleMem ti offre il nucleo testuale con instradamento automatico verso il backend multimodale, e simplemem.optimize(...) attiva EvolveMem per ottimizzare il recupero sui tuoi dati. Un pacchetto, un modello mentale: comprimi senza perdita, recupera per intento e lascia che il sistema continui a migliorarsi da solo.
- Assicurati di usare Python 3.10+ nel tuo ambiente attivo, non solo installato globalmente.
- Una chiave API compatibile con OpenAI deve essere configurata prima di eseguire qualsiasi costruzione di memoria o recupero, altrimenti l'inizializzazione potrebbe fallire.
- Quando si utilizzano provider non-OpenAI (ad es. Qwen o Azure OpenAI), verifica sia il nome del modello che
OPENAI_BASE_URLinconfig.py. - Per dataset di dialoghi di grandi dimensioni, abilitare l'elaborazione parallela può ridurre significativamente il tempo di costruzione della memoria.
- 🐍 Python 3.10+
- 🔑 API compatibile con OpenAI (OpenAI, Qwen, Azure OpenAI, ecc.)
# 📥 Clona il repository
git clone https://github.com/aiming-lab/SimpleMem.git
cd SimpleMem
# 📦 Installa le dipendenze (versioni bloccate)
pip install -r requirements.txt
# — OPPURE — installa come pacchetto modificabile
pip install -e . # predefinito: testo + multimodale + evolver
pip install -e ".[server]" # + server MCP / HTTP (mcp, fastapi, ...)
pip install -e ".[all]" # tutto, inclusi gli strumenti di sviluppo
# ⚙️ Configura le impostazioni API
cp config.py.example config.py
# Modifica config.py con la tua chiave API e le preferenze# config.py
OPENAI_API_KEY = "your-api-key"
OPENAI_BASE_URL = None # o endpoint personalizzato per Qwen/Azure
LLM_MODEL = "gpt-4.1-mini"
EMBEDDING_MODEL = "Qwen/Qwen3-Embedding-0.6B" # Recupero all'avanguardiaIl Server MCP può essere eseguito in Docker per un ambiente coerente e isolato. I dati (LanceDB e il DB utente) vengono persistiti in un volume host.
# Dalla radice del repository
docker compose up -d- Web UI: http://localhost:8000/
- REST API: http://localhost:8000/api/
- MCP (SSE): http://localhost:8000/mcp/sse?token=<TOKEN>
I dati sono memorizzati in ./data sull'host (creato automaticamente).
- Copia il template dell'ambiente e modificalo:
cp .env.example .env # Modifica .env: imposta JWT_SECRET_KEY, ENCRYPTION_KEY, LLM_PROVIDER, URL dei modelli, ecc. - Esegui con il file env:
docker compose --env-file .env up -d
Quando LLM_PROVIDER=ollama e Ollama gira sulla tua macchina (non in Docker), imposta in .env:
LLM_PROVIDER=ollama
OLLAMA_BASE_URL=http://host.docker.internal:11434/v1Su Linux, host.docker.internal è abilitato automaticamente tramite il file Compose.
docker compose logs -f simplemem # Segui i log
docker compose down # Ferma e rimuovi i container📖 Per l'auto-hosting del server MCP (Docker o bare metal), vedi Documentazione MCP.
SimpleMem è disponibile come servizio di memoria ospitato nel cloud tramite il Model Context Protocol (MCP), abilitando un'integrazione fluida con assistenti AI come Claude Desktop, Cursor e altri client compatibili con MCP.
🌐 Servizio Cloud: mcp.simplemem.cloud — oppure auto-ospita il server MCP localmente usando Docker.
| Funzionalità | Descrizione |
|---|---|
| HTTP Streamable | Protocollo MCP 2025-03-26 con JSON-RPC 2.0 |
| Isolamento Multi-tenant | Tabelle dati per utente con autenticazione tramite token |
| Recupero Ibrido | Ricerca semantica + corrispondenza per parole chiave + filtraggio per metadati |
| Ottimizzato per la Produzione | Tempi di risposta più rapidi con integrazione OpenRouter |
{
"mcpServers": {
"simplemem": {
"url": "https://mcp.simplemem.cloud/mcp",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}📖 Per istruzioni di configurazione dettagliate e guida all'auto-hosting, vedi Documentazione MCP
Riproduci i numeri di LoCoMo / MemBench / Mem-Gallery dai paper. Ogni pilastro ha il proprio runner di benchmark nella propria directory. Installa prima i supplementi per i benchmark: pip install -e ".[benchmark]".
Esegui dalla radice del repository:
python test_locomo10.py # benchmark LoCoMo completo
python test_locomo10.py --num-samples 5 # sottoinsieme rapido
python test_locomo10.py --result-file my_results.jsonEsegui dalla directory EvolveMem/ (vedi EvolveMem/README.md):
cd EvolveMem
python run_evolution.py --data data/locomo10.json --max-rounds 7
python run_benchmark.py locomo --sample 0 --initial weak --max-rounds 3
python run_benchmark.py membench --agent FirstAgent --max-rounds 3Esegui dalla directory OmniSimpleMem/ (vedi OmniSimpleMem/README.md):
cd OmniSimpleMem
python benchmarks/locomo/run_locomo.py --data-path /path/to/locomo10.json --model gpt-4oCapacità attuali per canale di integrazione:
| Capacità | Python (pip install) |
Server MCP (Claude Desktop, Cursor, ...) |
|---|---|---|
| Memoria testuale | ✅ | ✅ |
| Multimodale (immagine / audio / video) | ✅ | ⬜ pianificato |
Recupero auto-evolutivo optimize() |
✅ | ⬜ pianificato |
Lavori pianificati per colmare il divario (il server MCP è un servizio testuale multi-tenant standalone; queste sono funzionalità reali, non correzioni alla documentazione):
- Multimodale via MCP. Aggiungere strumenti
memory_add_image/memory_add_audio/memory_add_video. Richiede un percorso di caricamento file (base64 o URL, poiché MCP non può passare percorsi di file locali), un adattamento multi-tenant del backend di archiviazione Omni-SimpleMem e l'accesso ai modelli vision/audio lato server. - EvolveMem via MCP. Esporre
optimize()come strumento MCP. Più trattabile del multimodale (testo in ingresso, config JSON in uscita, nessun trasporto di file), ma il retriever MCP attualmente supporta solosemantic_top_k/keyword_top_kdelle ~10 dimensioni che EvolveMem evolve. Richiede l'estensione del retriever MCP per supportare le restanti impostazioni (structured top_k, modalità/pesi di fusione, scambio di entità, decomposizione delle query, verifica delle risposte), un adattatore per eseguire il ciclo di evoluzione sulle memorie archiviate di un tenant, la persistenza della config per tenant e l'esecuzione asincrona (il ciclo è pesante per LLM e andrebbe in timeout su una richiesta sincrona). - Docker eredita entrambi automaticamente una volta che il server MCP li supporta (aggiungere le dipendenze multimodali all'immagine e un volume di archiviazione Omni).
Per il multimodale completo e il recupero auto-evolutivo oggi, usa l'API Python (vedi Avvio Rapido).
Se utilizzi SimpleMem nella tua ricerca, cita:
@article{simplemem2026,
title={SimpleMem: Efficient Lifelong Memory for LLM Agents},
author={Liu, Jiaqi and Su, Yaofeng and Xia, Peng and Zhou, Yiyang and Han, Siwei and Zheng, Zeyu and Xie, Cihang and Ding, Mingyu and Yao, Huaxiu},
journal={arXiv preprint arXiv:2601.02553},
year={2026},
url={https://arxiv.org/abs/2601.02553}
}@article{evolvemem2026,
title={EvolveMem: Self-Evolving Memory Architecture via AutoResearch for LLM Agents},
author={Liu, Jiaqi and Ye, Xinyu and Xia, Peng and Zheng, Zeyu and Xie, Cihang and Ding, Mingyu and Yao, Huaxiu},
journal={arXiv preprint arXiv:2605.13941},
year={2026},
url={https://arxiv.org/abs/2605.13941}
}@article{omnisimplemem2026,
title = {Omni-SimpleMem: Autoresearch-Guided Discovery of Lifelong Multimodal Agent Memory},
author = {Liu, Jiaqi and Ling, Zipeng and Qiu, Shi and Liu, Yanqing and Han, Siwei and Xia, Peng and Tu, Haoqin and Zheng, Zeyu and Xie, Cihang and Fleming, Charles and Ding, Mingyu and Yao, Huaxiu},
journal = {arXiv preprint arXiv:2604.01007},
year = {2026},
}Questo progetto è concesso in licenza sotto la Licenza MIT — vedi il file LICENSE per i dettagli.
Desideriamo ringraziare i seguenti progetti e team:
- 🔍 Modello di Embedding: Qwen3-Embedding - Prestazioni di recupero all'avanguardia
- 🗄️ Database Vettoriale: LanceDB - Archiviazione colonnare ad alte prestazioni
- 📊 Benchmark: LoCoMo - Framework di valutazione della memoria a contesto lungo