Abbiamo testato quattro server di memoria MCP (Model Context Protocol) per misurare quali effettivamente conservano e recuperano il contesto tra le sessioni degli agenti di intelligenza artificiale. Utilizzando ReAct Agent di LangChain, abbiamo connesso ciascun server, eseguito conversazioni multi-sessione standardizzate e assegnato un punteggio in base all'accuratezza delle operazioni di memoria.
Abbiamo anche realizzato una demo funzionante che collega Claude e Cursor tramite OpenMemory MCP, un livello di memoria condivisa che mantiene il contesto tra i due strumenti. La demo mostra come funziona la memoria nella pratica: cosa viene memorizzato, quando viene recuperato e come il contesto determina quali informazioni vengono visualizzate .
Risultati e metodologia del benchmark del server di memoria MCP
Abbiamo valutato l'efficacia con cui i modelli linguistici di grandi dimensioni (LLM) gestiscono la conoscenza in conversazioni multi-sessione, preservano il contesto conversazionale e recuperano informazioni importanti utilizzando sistemi di memoria esterni. Abbiamo valutato quattro implementazioni distinte di server MCP: Handrails 1 , Grafico della conoscenza 2 , Memoria di base 3 e Zine 4 .
Lo scopo del nostro benchmark è misurare la capacità di un server MCP di:
- Ricordare accuratamente il materiale durante le pause della sessione, evitando di porre le stesse domande due volte.
- Eseguire le operazioni di memoria appropriate (lettura, scrittura, aggiornamento ed eliminazione) al momento opportuno.
- Modifica le risposte tenendo conto del contesto utente e dei dati sulle preferenze salvati in precedenza.
Esempi di interazioni in MCP dal set di dati
1- Problema di installazione del pacchetto: questo esempio verifica come il sistema gestisce una situazione in cui un utente sta tentando di installare un software e riscontra dei problemi. Ecco una descrizione dettagliata dell'interazione:
- Sessione 1: "Ho problemi con l'installazione del pacchetto 25."
- Sessione 2: "Ho provato ad eseguire apt install ma ho ricevuto un messaggio di accesso negato."
- Sessione 2 (continuazione): "Ha funzionato! Grazie" (dopo il suggerimento di sudo)
Comportamento previsto: Il sistema dovrebbe tenere traccia del fatto che sudo ha risolto il problema di installazione, per poterlo utilizzare in futuri casi simili.
2- Test di adattamento delle competenze dell'utente: questo esempio si concentra su come il sistema adatta le sue risposte in base al livello di esperienza dell'utente. Ecco una descrizione dell'interazione:
- Sessione 1: "Ho bisogno di aiuto con la mia domanda di sussidi. È la prima volta che mi trovo in questa situazione."
- Pausa di sessione
- Sessione 2: "Grazie, ma ora non riesco ad accedere."
Comportamento previsto: l'agente dovrebbe ricordare che l'utente è un principiante e fornire spiegazioni più semplici anziché procedure di risoluzione dei problemi complesse.
Operazioni di memoria
Ogni dialogo prevede specifiche operazioni di memoria eseguite dal server, che testano la sua capacità di memorizzare/scrivere , recuperare/leggere , aggiornare e liberare la memoria.
- Scrivi: Salva le informazioni iniziali sul dispositivo, i sintomi e il livello di competenza dell'utente.
- Lettura: Recupera il contesto precedente alla ripresa delle sessioni.
- Aggiornamento: Monitora l'esito della soluzione (successo o fallimento).
- Elimina: Rimuovi le informazioni obsolete.
Come funziona il benchmark
Il nostro benchmark utilizza il framework di agenti ReAct di LangChain e OpenAI di GPT-4 come modello di base. Testiamo individualmente ciascun server MCP (Knowledge Graph, Basic Memory, Handrail, Zine).
Ogni scenario viene eseguito per verificare la persistenza della memoria del sistema e la gestione dei dialoghi multi-sessione. Abbiamo testato la memoria del sistema tramite:
- Validazione e caricamento dei set di dati: carica le conversazioni da più sessioni in formato JSON e verifica la struttura principale.
- Inizializzazione dell'agente:
- Collega il server MCP a un agente ReAct e configura un prompt di sistema specifico per le operazioni di memoria sull'agente.
- Utilizza una lista di strumenti consentiti per limitare le operazioni alle funzioni di memoria pertinenti.
- Elaborazione a turno : mantiene la cronologia della conversazione gestendo ogni sessione separatamente e indica chiaramente le pause tra le sessioni per valutare la continuità.
- Applicazione delle operazioni di memoria:
- Implementa misure di sicurezza conformi alle migliori pratiche, come la prevenzione dei duplicati tramite la richiesta di verifica prima della scrittura e la garanzia che la memoria venga letta dopo le interruzioni di sessione.
- Offre la possibilità di ripetere l'operazione in caso di attivazione dei guardrail.
- Analisi delle chiamate agli strumenti:
- Tutte le chiamate agli strumenti vengono estratte e categorizzate (lettura, scrittura, aggiornamento, eliminazione).
- Analizza le tendenze della sequenza degli utensili al di là dei confini delle sessioni e all'interno dei turni.
- Monitora le modifiche tra vari tipi di operazioni, come scrittura-aggiornamento e lettura-scrittura.
- Valutazione e punteggio:
- Confronta le operazioni previste dalle annotazioni del dataset con le operazioni osservate.
- Determina l'accuratezza di ogni turno e combina i dati provenienti da numerose conversazioni.
- Misura in particolare i comportamenti di lettura successiva alla ripresa del lavoro e di lettura prima della scrittura.
- Analisi degli errori: registra registri dettagliati passo passo con informazioni operative, classifica gli errori, tiene traccia delle tendenze di guasto e produce report e riepiloghi delle prestazioni.
- Output: Genera file CSV con dati di benchmark e report riassuntivi con metriche chiave, rendendo le informazioni di facile lettura.
Il nostro parametro chiave è l'accuratezza operativa , che misura la percentuale di turni in cui il modello esegue le operazioni di memoria previste.
Il problema dell'assenza di memoria condivisa tra gli strumenti
È comune utilizzare strumenti come Claude per generare idee. In genere, parto da questo piano e passo da uno strumento all'altro. Tuttavia, senza una memoria condivisa, i diversi strumenti di intelligenza artificiale non ricordano le decisioni passate, le scelte architetturali precedenti o le sfumature del codice sorgente.
Ciò solleva diversi problemi:
- Il contesto si perde tra gli strumenti: quando apporti modifiche in uno strumento, come ad esempio l'aggiornamento di un piano o la modifica dello stack tecnologico in Claude , Cursor non è a conoscenza di tali modifiche quando passi a quest'ultimo. Devi reinserire manualmente tutti i dettagli. Ad esempio, ogni volta che torni al progetto, devi rispiegare elementi come il framework che stai utilizzando (ad esempio, React con Redux o Flutter con Bloc).
- Duplicazione dei dati: è necessario ripetere le informazioni in strumenti diversi. Ad esempio, lo stack tecnologico, il layout e le funzionalità dell'app devono essere ridefiniti in Cursor , anche se sono già stati impostati in Claude .
- Produttività ridotta: poiché gli strumenti non condividono la memoria, si finisce per reintrodurre continuamente lo stesso contesto.
Come interagiscono la memoria e l'MCP?
Nel sistema Memory MCP , tutti i tuoi strumenti di intelligenza artificiale e i client MCP (ad esempio Cursor) lavorano insieme sfruttando sia la memoria che il protocollo di contesto del modello (MCP) .
- La memoria memorizza informazioni personalizzate e persistenti sulle preferenze dell'utente e sulle attività ricorrenti. Ad esempio, Cursor ricorda i linguaggi di programmazione preferiti, il tono e i dettagli del flusso di lavoro.
- MCP fornisce accesso in tempo reale a dati dinamici e specifici per l'attività, come file di progetto o API, durante una sessione. Garantisce il recupero di informazioni aggiornate e contestualizzate al momento opportuno.
Introduzione a OpenMemory
OpenMemory è uno strumento rilasciato da MemZero che fornisce un sistema di memoria unificato per diverse app e agenti di intelligenza artificiale. Si può pensare a esso come a un "chip di memoria" che integra tutti i client MCP in un unico spazio di memoria continuo. Può essere utilizzato localmente o nel cloud.
Tutorial: OpenMemory MCP
Requisiti
Prima di iniziare, assicurati di avere la seguente configurazione:
- Docker : Necessario per eseguire i server OpenMemory e MCP in locale ( installare Docker ).
- Git : per clonare i repository necessari.
- OpenMemory: Dovrai installareOpenMemory per interagire localmente con i server LLM.
- Chiave API : Per interagire con LLM, avrai bisogno della tua chiave API. In questo esempio, utilizzeremo la chiave API OpenAI .
Configurazione di OpenMemory
Nota sulla sicurezza: durante la configurazione e l'utilizzo di OpenMemory, si raccomanda di non condividere chiavi API private, password o altre informazioni sensibili direttamente nel codice o nei repository pubblici.
Passaggio 1: Clonare il repository
La cartella GitHub di OpenMemory si trova all'interno della cartella mem perché mem è il repository principale. Per ottenere OpenMemory, è necessario clonare l'intero repository mem.
1. Vai al repository di MemZero e copia il link del repository (https://github.com/mem0ai/mem0.git).
2. Apri il terminale e digita git clone seguito dal link del repository GitHub.
3. Accedere alla directory : dopo la clonazione, entrare nella cartella mem0 (digitare cd mem0) e individuare la cartella OpenMemory (digitare cd openmemory/). A questo punto, accedere alla cartella e tutti i comandi successivi verranno eseguiti da lì.
Per avviare OpenMemory, è necessario eseguire sia l'interfaccia utente che il server MCP.
Pertanto, è necessario installare Docker per containerizzarli. Con Docker, sia l'interfaccia utente che il server MCP possono essere impacchettati con tutte le loro dipendenze in container, garantendo un'esecuzione coerente in ambienti diversi.
Questo permette di configurare, eseguire e scalare l'interfaccia utente e il server MCP senza doversi preoccupare della configurazione manuale.
Passaggio 2: Configurare Docker e creare i container
Se Docker non è installato sul tuo sistema, scaricalo e installalo dal sito web di Docker .
Creazione dei container Docker : Eseguire il seguente comando "make build" per creare i container, che installerà le dipendenze necessarie:
Avvia i container : dopo aver creato i container, avviali digitando "make up".
È sufficiente eseguire `make build` una sola volta. Dopodiché, basterà eseguire `make up` per avviare i container quando necessario.
Inoltre, per utilizzare il server MCP, Docker deve essere in esecuzione sul sistema. Finché non si ha accesso al cloud, sarà necessario mantenere Docker attivo per eseguirlo localmente.
Se vai alla scheda "make", puoi vedere che il server OpenMemory MCP è ora attivo e funzionante :
Il server OpenMemory MCP dovrebbe essere in esecuzione all'indirizzo: http://localhost:8765 per impostazione predefinita.
Passaggio 3: Configurare il server MCP
Ora che Docker è in esecuzione, il passo successivo è configurare il server MCP per gestire il livello di memoria.
L'interfaccia utente di OpenMemory è disponibile di default all'indirizzo http://localhost:3000 . Con Docker in esecuzione, il server MCP sarà attivo e accessibile localmente a questo indirizzo. Per verificare il corretto funzionamento del server, è sufficiente accedere a http://localhost:3000 nella dashboard di OpenMemory.
Passaggio 4: Configurare i client (Claude/Cursor in questo esempio)
Per connettere Claude e Cursor (o qualsiasi altro agente) al sistema di memoria condivisa, apri la directory in Cursor, fai clic sul cursore nel tuo terminale:
Configura la chiave API OpenAI : Apri la cartella API nella struttura del progetto. Una volta aperta, avrà un aspetto simile a questo e la struttura dei file apparirà in questo modo:
All'interno della struttura delle cartelle, accedi alla cartella API . Lì troverai un file chiamato av_example .
Devi incollare la tua chiave API OpenAI in questo file. Copiala, rinominala in .env rimuovendo la parola "example" dal nome del file e poi incollaci la tua chiave API effettiva.
Una volta completata questa operazione, potrai utilizzare il comando make-up . Hanno indicato questo passaggio come prerequisito perché è necessario per le interazioni con LLM, ed è per questo che richiedono la chiave Open API.
Passaggio 5: Configurare MCP negli strumenti
Dobbiamo installare l'MCP per i diversi strumenti. Abbiamo il collegamento MCP, che devi configurare manualmente nelle impostazioni. Quando lo esegui, aggiunge automaticamente l'MCP al client Claude. Lo stesso vale per Cursor.
Come potete vedere, ho installato entrambi questi MCP. Qui sono installati Claude e Cursor :
Come puoi vedere, in Cursor è già attivo e funzionante :
Esempio di implementazione di MCP
Questo esempio mostra come utilizzare il server MCP. È possibile aprire Claude Desktop e chiedergli di generare idee per diversi tipi di app o soluzioni. In questo esempio, esploreremo come generare un concept per un'app di monitoraggio del tempo.
Innanzitutto, Claude fornisce il proprio piano. Puoi poi approfondire i punti elencati di seguito, concentrandoti sulle funzionalità da implementare.
Dopo aver aggiunto le modifiche al piano originale, è possibile chiedere al programma di salvare il piano in memoria come "piano con tracciamento temporale".
È possibile visualizzare i dettagli della memoria nella scheda in basso a destra della dashboard di OpenMemory. Ecco i dettagli della memoria:
Passando a Cursor, è possibile fornirgli un prompt come "Voglio creare un'app per il monitoraggio del tempo" e chiedergli se può recuperare i dettagli dalla memoria.
In seguito, ha utilizzato gli strumenti MCP per elencare e cercare i ricordi. Questa funzione è incredibilmente utile perché permette di cercare informazioni pertinenti. Ad esempio, quando ha effettuato una ricerca sull'app di monitoraggio del tempo, ha recuperato tutti i ricordi relativi a quell'argomento.
Da lì, ha estratto i dettagli relativi a Next.js, React, TypeScript e al resto dello stack da utilizzare. Dopodiché, ha iniziato a costruire l'applicazione.
Una volta completata l'attività, puoi chiedere al programma di salvare i progressi in memoria, e lo farà. Aggiunge note sullo stato di avanzamento, suddivide tutto in parti gestibili e memorizza anche questo. Ora tutti gli aggiornamenti sono salvati in memoria.
Ecco l'app creata:
Sfide successive alla creazione dell'app
Dopo un po', Cursor ha generato un errore all'avvio di una nuova chat a causa della dimensione del contesto. Una volta avviata una nuova chat, è possibile richiederne il recupero dei dati relativi all'avanzamento dell'app. Ha richiamato nuovamente lo strumento MCP e ha recuperato tutti i dati rilevanti, come ad esempio la posizione in cui era in esecuzione e le azioni compiute fino a quel momento.
Successivamente, è stato fornito uno screenshot perché il contrasto di alcuni elementi React era insufficiente e il testo non era visibile. È possibile richiedere la correzione dell'interfaccia utente, cosa che è stata fatta.
Mentre lavorava a questo, continuava a richiamare se stesso ripetutamente, cercando di individuare la directory sorgente. Tuttavia, non ha identificato la presenza di una cartella front-end.
Come MCP, Cursor e Claude recuperavano e gestivano la memoria
Ora, quello che volete vedere è come effettivamente recupera i ricordi.
La cosa principale da notare è che questa memoria è collegata a tutte le altre memorie create nella stessa sessione. Quindi, se il client MCP richiede una memoria etichettata "tempo", recupera anche le memorie correlate.
È possibile controllare l'app di origine per ogni memoria. Alcune sono state create da Cursor, altre da Claude. Aprendo la memoria, è possibile visualizzare il registro degli accessi, modificarne lo stato o persino modificare la memoria stessa.
Testare la capacità dell'MCP di differenziare i progetti
Per verificare se il sistema MCP è in grado di distinguere tra progetti diversi, modificare lo stack tecnologico in MERN e istruire Claude Desktop a inviare queste nuove informazioni al server MCP.
Successivamente, apri Cursor e interroga quale stack tecnologico verrà utilizzato per il nuovo progetto. Assicurati di specificare di utilizzare solo MCP ed evita di controllare la directory del progetto per ulteriori informazioni.
Risultati del test:
Quando viene effettuata la chiamata MCP, il sistema va in confusione, richiamando entrambi gli stack tecnologici, lo stack MERN del progetto precedente e Next.js di quello nuovo, e recuperandoli contemporaneamente.
Ciò dimostra come il sistema MCP non sia stato in grado di separare i contesti dei due progetti.
Pertanto, sebbene il sistema MCP possa memorizzare i dati tra diverse sessioni, occasionalmente potrebbe mescolare informazioni provenienti da progetti diversi.
Considerazioni finali
Sebbene il sistema MCP rappresenti un buon punto di partenza, necessita di una migliore separazione della memoria per i progetti simili al fine di evitare la sovrapposizione dei dati. Funziona bene per progetti singoli o con nomi distinti, ma miglioramenti nell'esecuzione delle query e nella gestione della memoria lo renderebbero ancora più efficace.
Quali sono le altre applicazioni di Memory MCP?
1. Assistente di ricerca multi-agente con uno strato di memoria
Diversi agenti LLM sono specializzati in differenti ambiti di ricerca (ad esempio, articoli accademici, repository GitHub, notizie). Ciascun agente memorizza i propri risultati, che l'agente principale può successivamente interrogare per ottenere informazioni contestuali correlate.
Esempio reale : Anthropic Sistema di ricerca multi-agente. 7
2. Assistente per riunioni con memoria persistente tra sessioni.
Un assistente archivia i riepiloghi delle riunioni, i punti d'azione e gli appunti principali, recuperando il contesto rilevante per le riunioni future.
Esempio pratico : Otter.ai è un assistente per riunioni che cattura i punti chiave e li recupera nelle sessioni successive per mantenere il contesto. Per maggiori informazioni su Otter.ai, consulta: Assistente per prendere appunti basato sull'IA.
3. Assistente di codifica agentico che si evolve con l'utilizzo
Assistenti di programmazione che apprendono dai modelli di utilizzo e memorizzano le soluzioni per i problemi ricorrenti, recuperando e applicando automaticamente le soluzioni precedenti per migliorare la produttività.
Esempio concreto : GitHub Copilot, un assistente di programmazione che apprende dallo stile di codice dello sviluppatore. Per maggiori informazioni sugli agenti cognitivi, vedi: Memoria degli agenti di intelligenza artificiale .
Sii il primo a commentare
Il tuo indirizzo email non verrà pubblicato. Tutti i campi sono obbligatori.