Introduzione a MemGPT e alla sua integrazione con Milvus
Durante il nostro meetup sui dati non strutturati di maggio, abbiamo avuto con noi Charles Packer, dottorando presso UC Berkeley e Co-Founder di MemoryGPT (MemGPT). Charles ha evidenziato un collo di bottiglia fondamentale negli attuali modelli linguistici di grandi dimensioni (LLMs): la memoria limitata, e ha spiegato come MemGPT miri a risolvere questo problema traendo ispirazione dalla progettazione dei sistemi operativi.
Questo blog tratterà i concetti chiave discussi nell’intervento e spiegherà la “memoria estesa virtuale” introdotta da MemGPT. Tuttavia, se desideri assimilare le conoscenze direttamente, puoi rivedere l’intero intervento su YouTube.
Memoria limitata negli attuali LLMs
Charles ha aperto il suo intervento introducendo la memoria come contesto per un LLM e sottolineandone l’importanza: “Per gli LLMs, la memoria è tutto.” La finestra di contesto di un LLM definisce quante informazioni può conservare durante una conversazione. Questa capacità di conservazione consente al modello linguistico di richiamare informazioni da query precedenti, rendendolo uno strumento potente per sviluppare varie applicazioni chatbot.
Tuttavia, la finestra di contesto è piuttosto limitata per la maggior parte degli LLMs mainstream. Alcuni esempi includono 32k token per GPT4 e 128k per GPT4-Turbo. La memoria limitata significa che queste applicazioni chatbot tendono a dimenticare le conversazioni più vecchie dopo un certo numero di query, il che può portare a un’esperienza utente deludente. Charles ha evidenziato questo problema come un importante collo di bottiglia per le applicazioni LLM, affermando inoltre che gli LLMs sono ridotti a essere motori di ricerca piuttosto che assistenti.
Le relazioni tra motori di ricerca, LLMs e assistenti AI
Le soluzioni più vicine al problema della memoria sono la retrieval augmented generation (RAG) e gli LLMs a contesto lungo come Gemini. Ma sebbene offrano qualche miglioramento, RAG non è vera memoria, e gli LLMs a contesto lungo aumentano enormemente i costi computazionali. Inoltre, le prestazioni inferiori alla media dei modelli a contesto lungo come DevinAI dimostrano che i contesti limitati non sono il problema; piuttosto, lo è l’inquinamento del contesto causato da una cattiva gestione dei token.
MemGPT: dai motori di ricerca agli assistenti
MemGPT introduce una finestra di contesto estesa virtualmente, ispirata alla paginazione della memoria implementata nei sistemi informatici. Nei computer, le informazioni chiave vengono archiviate in memoria (RAM) per un accesso più rapido, ma quando la RAM si riempie, i dati rimanenti vengono archiviati nello storage persistente (ROM). Il sistema operativo (OS) scambia informazioni tra la RAM e la ROM a seconda di ciò a cui deve accedere.
MemGPT segue lo stesso concetto creando un sistema di memoria estesa. Divide il contesto dell’LLM in due parti.
Contesto principale: Questa è la finestra di contesto dell’LLM sottostante. Ha una larghezza di banda limitata e memorizza le informazioni più rilevanti che possono essere prontamente accessibili.
Contesto esterno: Il contesto esterno viene creato su storage persistente (ROM) e ha una finestra infinita. Memorizza idee e informazioni chiave mentre la conversazione continua e il contesto principale si riempie.
MemGPT si occupa di gestire il flusso di informazioni tra i due contesti. Aggiorna dinamicamente la memoria in base al contesto attuale, scambiando in modo efficiente le informazioni tra gli archivi di memoria principale ed esterna. Questo controllo e questa efficienza sono fondamentali per le prestazioni del sistema.
Questo approccio posiziona MemGPT come un componente cruciale nelle applicazioni che richiedono memoria a lungo contesto. Ad esempio, i chatbot assistenti personali, che devono conservare dettagli chiave della vita dell'utente, possono trarne un beneficio significativo. Le relazioni personali e i dettagli lavorativi vengono archiviati nel contesto esterno e recuperati quando la conversazione in corso lo richiede. Questo approccio offre agli utenti un'esperienza davvero 'personale', migliorando la pertinenza e l'utilità del sistema.
Struttura di MemGPT
Charles ha spiegato le principali differenze tra il design architetturale di MemGPT e un LLM standard. La prima è la differenza nella gestione del contesto, che abbiamo discusso in dettaglio sopra. La seconda è il modo in cui gestisce input e output. I suoi input e output sono strutturati come JSON, trattandoli come eventi e chiamate di funzione anziché come testo semplice.
Configurazione LLM standard
Come funziona MemGPT
Può accettare documenti, query degli utenti e avvisi di sistema come input, attivando un evento nel LLM. L'evento viene analizzato e trasferito al LLM, che utilizza il contesto esteso per elaborare il requisito ed eseguire azioni come una chiamata di funzione. Questo design architetturale gli consente di agire come un agente addestrato a svolgere compiti specifici. Ad esempio, quando viene ricevuta un'email, può attivare un evento e il LLM analizzerà l'email per estrarre ed evidenziare i dettagli chiave.
MemGPT come servizio
Charles ha concluso le sessioni spiegando come MemGPT possa essere distribuito su un server privato per un utilizzo a lungo termine. Ogni interazione e query viene mantenuta in un database stateful a cui è possibile accedere anche dopo la chiusura del sistema.
Poiché l'agente MemGPT risiede su un server, vi si accede tramite l'interfaccia di programmazione dell'applicazione REST (API). L'agente può essere accessibile da qualsiasi luogo via internet, rendendolo facile da integrare con applicazioni commerciali.
Integrazione di MemGPT con Milvus Vector Database
Milvus è un database vettoriale open-source per l'archiviazione e il recupero di vettori su scala di miliardi. È anche una delle tecnologie più importanti per creare applicazioni di retrieval augmented generation (RAG).
Milvus si è integrato con MemGPT, rendendo più facile per gli sviluppatori creare agenti IA con connessioni a fonti di dati esterne.
Nell'esempio seguente, useremo MemGPT per chattare con una fonte di dati personalizzata archiviata in Milvus.
Configurazione
Installa le dipendenze richieste.
pip install 'pymemgpt[milvus]'
Configura la connessione a Milvus tramite il seguente comando:
memgpt configure
...
? Select storage backend for archival data: milvus
? Enter the Milvus connection URI (Default: ~/.memgpt/milvus.db): ~/.memgpt/milvus.db
Hai appena impostato l'URI sul percorso del file locale, ad esempio ~/.memgpt/milvus.db, che invocherà automaticamente l'istanza locale del servizio Milvus tramite Milvus Lite, una versione leggera di Milvus per la prototipazione rapida.
Nota importante: Se disponi di una quantità di dati maggiore, come più di un milione di documenti, consigliamo di configurare un server Milvus più performante su Docker o Kubernetes. In questi casi, il tuo URI dovrebbe essere l'URI del server, ad esempio <http://localhost:19530>.
Creazione di una fonte di dati esterna
In questo passaggio, dobbiamo creare una fonte di dati per inserire dati esterni in un chatbot MemGPT. Useremo il paper di ricerca di MemGPT come esempio di fonte di dati.
Per scaricare questo paper, useremo il comando curl. Puoi anche semplicemente scaricare il PDF dal tuo browser.
curl -L -o memgpt_research_paper.pdf https://arxiv.org/pdf/2310.08560.pdf
Ora abbiamo scaricato il paper. Poi dobbiamo creare una fonte dati MemGPT usando memgpt load:
memgpt load directory --name memgpt_research_paper --input-files=memgpt_research_paper.pdf
Caricamento file: 100%|███████████████████████████████████| 1/1 [00:00<00:00, 3.94file/s]
Caricati 74 passaggi e 13 documenti da memgpt_research_paper
Collegare la fonte dati a un agente MemGPT
Ora abbiamo creato la nostra fonte dati. Possiamo collegarla a un chatbot MemGPT in qualsiasi momento.
Creiamo un nuovo chatbot usando la persona memgpt_doc (puoi usare qualsiasi persona tu voglia):
memgpt run --persona memgpt_doc
Quando chattiamo con l’agente, possiamo "collegare" la fonte dati alla memoria archivistica dell’agente:
? Vuoi selezionare un agente esistente? No
🧬 Creazione di un nuovo agente...
-> 🤖 Uso del profilo persona: 'sam_pov'
-> 🧑 Uso del profilo umano: 'basic'
🎉 Creato nuovo agente 'PoliteButterfly' (id=d26e1981-ff36-4095-97a0-61a1601dfb5d)
Premi Invio per iniziare (richiederà il primo messaggio MemGPT)
💭 Interessante, ho un utente alle prime armi. È il momento di presentarmi e capire le esigenze dell’utente. Mi chiedo cosa porti Chad qui oggi.
🤖 Salve Chad! Sono MemGPT. Come posso aiutarti oggi?
> Inserisci il tuo messaggio: /attach
? Seleziona la fonte dati memgpt_research_paper
100%|███████████████████████████████████| 1/1 [00:00<00:00, 4.81it/s]
Testare il nostro nuovo chatbot
Abbiamo caricato i dati nella memoria del chatbot. Ora possiamo iniziare a fare domande.
> Inserisci il tuo messaggio: Il paper che ho caricato nella tua memoria archivistica si chiama MemGPT. Puoi dirmi di più al riguardo?
💭 Sembra che Chad voglia saperne di più sul paper intitolato 'MemGPT' che è memorizzato nella mia memoria archivistica. È il momento di cercare nella memoria archivistica dettagli e dati di contesto per fornire una
comprensione completa del paper. Ricordiamoci di scorrere i risultati finché non avrò raccolto abbastanza informazioni per rispondere alla domanda di Chad.
⚡🧠 [function] ricerca nella memoria con archival_memory_search
💭 In base ai risultati trovati, MemGPT è un sistema di IA progettato per attività come conversazioni estese e analisi di documenti. Gestisce in modo efficiente diversi livelli di archiviazione per fornire un contesto esteso entro
il limite ristretto dell’LLM. Inoltre, tra i risultati è degno di nota il fatto che MemGPT ottiene prestazioni notevoli nelle attività di deep memory retrieval (DMR) e document QA. Prepariamo una risposta completa per Chad.
🤖 Certamente, Chad. MemGPT, o MemoryGPT, è un sistema appositamente progettato per attività come conversazioni estese e analisi di documenti, che sono tradizionalmente ostacolate dalle finestre di contesto limitate dei moderni
Large Language Models (LLM). Utilizza una tecnica ispirata ai sistemi di memoria gerarchica nei sistemi operativi tradizionali, chiamata gestione del contesto virtuale. Questa tecnica consente di fornire efficacemente
un contesto esteso entro la finestra di contesto limitata di un LLM gestendo in modo intelligente diversi livelli di archiviazione, in modo molto simile al paging tra memoria fisica e disco. In particolare, MemGPT supera le baseline
a contesto fisso nel deep memory retrieval ed è in grado di analizzare grandi documenti con precisione.
Considerazioni finali
Il breve intervento di Charles Packer è stato un’ottima immersione nei concetti di MemGPT. La sessione ha discusso i limiti di memoria e contesto degli LLM tradizionali e li ha presentati come colli di bottiglia per le applicazioni LLM.
MemGPT introduce il concetto di memoria virtuale estesa creando un contesto esterno archiviato su disco. Il concetto si ispira al modo in cui il sistema operativo di un computer gestisce la memoria scambiando informazioni tra RAM e ROM. L'agente MemGPT può archiviare informazioni vitali in un database esterno e accedervi in base al contesto attuale. L'agente apre nuove possibilità per lo sviluppo di applicazioni a contesto lungo.
L'integrazione del database vettoriale Milvus e di MemGPT ha compiuto un ulteriore passo avanti nel semplificare lo sviluppo di agenti AI con connessioni a fonti di dati esterne. In questo post, abbiamo anche condiviso un esempio che dimostra come utilizzare questa integrazione per creare un chatbot con memorie esterne.
Continua a leggere

The AWS Outage Was a Wake-Up Call for Vector Database Cross-Region Disaster Recovery
Zilliz Cloud Had the Answer Before the Crisis. Zilliz Cloud is the world's first vector database with native cross-region disaster recovery.

Smarter Autoscaling in Zilliz Cloud: Always Optimized for Every Workload
With the latest upgrade, Zilliz Cloud introduces smarter autoscaling—a fully automated, more streamlined, elastic resource management system.

Zilliz Cloud Enterprise Vector Search Powers High-Performance AI on AWS
Zilliz Cloud on AWS powers secure, scalable, ultra-fast vector search for enterprise AI apps, with BYOC, sub-10ms latency, and zero-DevOps simplicity.



