Add LLM long-term memory system
- Implement LLMMemory module with SQLite + FTS5 - Add conversation tracking with context awareness - Track NPC reputation and interactions - Integrate memory with LLMBrain for contextual replies - Add comprehensive test suite (13 tests) - Update settings with memory_db_path config
This commit is contained in:
1 parent
bd211b6036
commit
69ba824bc8
11 files changed
+979
-13
No files matched your search
+117
@@ -0,0 +1,117 @@
|
||||
in questo vorrei proporre:
|
||||
Interessante! Questo approccio esiste già ed è chiamato Memvid - una libreria Python open-source che implementa esattamente il flusso che descrivi. Vediamo se ha senso per il tuo automapper MUD.
|
||||
|
||||
C'è già: Memvid
|
||||
Memvid è un progetto GitHub (8.1k stars) che codifica chunk di testo in QR code, li salva come frame in un file MP4 e usa un indice FAISS per la ricerca semantica. Il flusso è identico al tuo:
|
||||
|
||||
text
|
||||
Text → chunk → embed → QR code → Frame MP4 (H.264/H.265)
|
||||
Query → embed → FAISS cosine similarity → frame seek → decode QR → return text
|
||||
Benefici confermati
|
||||
Vantaggio Dettaglio Fonte
|
||||
Compressione 50-100x I codec video moderni comprimono pattern ripetitivi (i QR) meglio di qualsiasi algoritmo custom
|
||||
|
||||
Sub-100ms retrieval Seek diretto al frame tramite indice, O(1), poi decodifica QR
|
||||
Zero infrastruttura Solo Python + MP4, niente cluster DB, niente Docker
|
||||
|
||||
Portabilità totale Copia memoria.mp4 su un altro sistema, funziona ovunque
|
||||
|
||||
Offline-first Dopo l'encoding, tutto funziona senza internet
|
||||
|
||||
Benchmark reali
|
||||
100MB di testo → 1-2MB video
|
||||
|
||||
|
||||
Ricerca su 1M chunk in <100ms (MacBook Pro 2021)
|
||||
|
||||
|
||||
RAM costante: ~500MB indipendentemente dalla dimensione
|
||||
|
||||
|
||||
Il problema per il tuo use case
|
||||
L'automapper di un MUD ha una caratteristica critica: aggiornamenti continui mentre esplori. E qui Memvid mostra i limiti:
|
||||
|
||||
|
||||
Write Amplification
|
||||
I file MP4 sono append-only. Se stai esplorando una nuova stanza nel MUD e vuoi aggiungerla alla mappa, non puoi semplicemente "inserire" un frame nel mezzo. Devi:
|
||||
|
||||
Decodificare tutto il video esistente
|
||||
|
||||
Aggiungere il nuovo chunk
|
||||
|
||||
Re-encodare l'intero MP4
|
||||
|
||||
Questo è killer per un'esperienza real-time dove ogni nuova stanza dovrebbe essere memorizzata immediatamente.
|
||||
|
||||
Sync tra indice e video
|
||||
L'indice FAISS è un JSON separato che mappa embedding → numero frame. Se il video viene rigenerato, l'indice deve essere rigenerato. In uno scenario MUD con esplorazione continua, staresti re-encodando ogni volta che muovi il personaggio in una stanza nuova.
|
||||
|
||||
Soluzione ibrida suggerita
|
||||
Per l'automapper MUD, ti propongo un archivio a due livelli:
|
||||
|
||||
Layer 1: Memoria attiva (SQLite/grafico in-memory)
|
||||
Durante l'esplorazione: usa SQLite o un grafo NetworkX in RAM
|
||||
|
||||
Ogni nuova stanza viene inserita immediatamente
|
||||
|
||||
Navigazione, pathfinding, ricerca in tempo reale
|
||||
|
||||
Layer 2: Memoria storica (Memvid)
|
||||
Periodicamente (alla fine sessione, o ogni X stanze): "congela" lo stato esplorato
|
||||
|
||||
Dump del grafo → Memvid MP4
|
||||
|
||||
Questo diventa l'archivio storico della mappa del mondo MUD
|
||||
|
||||
Per ricerche semantiche ("dove era quell'NPC goblin?"), query su Memvid
|
||||
|
||||
Vantaggio di questo ibrido
|
||||
Real-time: SQLite per l'esplorazione attiva, nessun lag
|
||||
|
||||
Archivio: Memvid per storage storico compresso e portatile
|
||||
|
||||
Ricerca semantica: "Trova tutte le stanze con descrizione 'foresta oscura'" usando l'embedding dei testi delle stanze salvate in Memvid
|
||||
|
||||
Altra alternativa: "Delta encoding" in arrivo
|
||||
Memvid v2 promette delta encoding per aggiornamenti incrementali senza re-encoding totale, ma per ora è in sviluppo. Nel frattempo, il pattern "SQLite attivo + Memvid storico" è il più pragmatico.
|
||||
|
||||
|
||||
Conclusione
|
||||
Il metodo QR-in-MP4 è valido e funziona (Memvid lo dimostra), ma per un automapper MUD serve un ibrido: grafo attivo in SQLite per l'esplorazione real-time, con periodico "snapshot" in Memvid per archiviazione compressa e ricerca semantica storica. Vuoi che approfondiamo l'architettura di questo ibrido?
|
||||
### Modulo 6: Progression Optimizer (il min-maxer)
|
||||
|
||||
La logica di crescita del personaggio.
|
||||
|
||||
- **Grinding spot finder**: Identificare zone dove il rapporto EXP/ora è ottimale per il livello corrente
|
||||
- **Equip optimizer**: Confrontare gear basato su stat bonus
|
||||
- **Skill rotation**: Scegliere quali abilità usare in combattimento in base a mana cost / damage / cooldown
|
||||
|
||||
|
||||
## Flusso di gioco simulato
|
||||
|
||||
```
|
||||
1. CONNESSIONE → Telnet al server, autenticazione
|
||||
2. CREAZIONE → Roll stats, scegli classe, setup iniziale
|
||||
3. EXPLORING → Inizia mappando la città di partenza, memorizza shop/inn/quest-giver
|
||||
4. COMBATTIMENTO → Trova mob appropriato al livello, combatte, accumula EXP
|
||||
5. QUESTING → Accetta quest, pianifica esecuzione, completa, riscatta reward
|
||||
6. LOOP → Torna a 4-5 fino al level up, poi espandi aree esplorabili
|
||||
```
|
||||
|
||||
|
||||
## Stack tecnico suggerito
|
||||
|
||||
- **Backend**: Python con `asyncio` per la gestione Telnet non-bloccante
|
||||
- **Parser**: Regex + NLP (spaCy/LLM) per interpretare le descrizioni
|
||||
- **Grafo**: NetworkX per l'auto-mapping
|
||||
- **AI Decision**: Può essere una serie di regole (expert system) oppure integrare un LLM locale (Llama via Ollama) per decisioni più "intuitive"
|
||||
- **Storage**: SQLite per mappare le stanze e SQLite/JSON per il progresso del personaggio
|
||||
|
||||
|
||||
## Sfide interessanti
|
||||
|
||||
- **Ambiguità testuali**: I MUD hanno descrizioni in prosa, non dati strutturati. Estrarre "questo è un mob ostile" vs "questo è un NPC friendly" richiede parsing intelligente.
|
||||
- **Anti-cheat**: Molti MUD hanno sistemi di rilevamento bot. Il tuo "giocatore simulato" deve mimare comportamenti umani (tempi di reazione variabili, pause, errori di battitura occasionali).
|
||||
- **Memoria a lungo termine**: Dopo settimane di gioco, il grafo del mondo diventa enorme. Serve una buona strategia di storage/indexing.
|
||||
|
||||
Vuoi approfondire un modulo specifico? Ad esempio, il sistema di auto-mapping è probabilmente il più complesso da implementare in modo robusto. Oppure preferisci discutere l'architettura di decisione (rule-based vs LLM-based)?
|
||||
Reference in new issue
Block a user