Einführung in MemGPT und seine Integration mit Milvus
Während unseres Unstructured Data Meetup im Mai war Charles Packer bei uns zu Gast, ein PhD-Student an der UC Berkeley und Mitbegründer von MemoryGPT (MemGPT). Charles hob einen grundlegenden Engpass in den aktuellen großen Sprachmodellen (LLMs) hervor: begrenzter Speicher, und erklärte, wie MemGPT dieses Problem lösen will, indem es sich vom OS-Design inspirieren lässt.
Dieser Blog behandelt die wichtigsten Konzepte, die im Vortrag besprochen wurden, und erklärt den von MemGPT eingeführten „virtuellen erweiterten Speicher“. Wenn Sie das Wissen jedoch aus erster Hand aufnehmen möchten, können Sie sich den gesamten Vortrag auf YouTube erneut ansehen.
Begrenzter Speicher in heutigen LLMs
Charles eröffnete seinen Vortrag, indem er Speicher als Kontext für ein LLM einführte und dessen Bedeutung hervorhob: „Für LLMs ist Speicher alles.“ Das Kontextfenster eines LLM definiert, wie viele Informationen es während einer Unterhaltung behalten kann. Diese Fähigkeit zur Speicherung ermöglicht es dem Sprachmodell, Informationen aus früheren Anfragen abzurufen, wodurch es zu einem leistungsstarken Werkzeug für die Entwicklung verschiedener Chatbot-Anwendungen wird.
Das Kontextfenster ist jedoch bei den meisten gängigen LLMs recht begrenzt. Einige Beispiele sind 32k Token für GPT4 und 128k für GPT4-Turbo. Der begrenzte Speicher bedeutet, dass diese Chatbot-Anwendungen ältere Gespräche nach einer bestimmten Anzahl von Anfragen tendenziell vergessen, was zu einer enttäuschenden Nutzererfahrung führen kann. Charles hob dieses Problem als einen großen Engpass für LLM-Anwendungen hervor und erklärte weiter, dass LLMs eher auf Suchmaschinen als auf Assistenten reduziert werden.
Die Beziehungen zwischen Suchmaschinen, LLMs und KI-Assistenten
Die naheliegendsten Lösungen für das Speicherproblem sind Retrieval Augmented Generation (RAG) und Long-Context LLMs wie Gemini. Doch obwohl diese eine gewisse Verbesserung bieten, ist RAG kein echter Speicher, und Long-Context LLMs erhöhen die Rechenkosten um ein Vielfaches. Darüber hinaus beweist die unterdurchschnittliche Leistung von Long-Context-Modellen wie DevinAI, dass begrenzte Kontexte nicht das Problem sind; vielmehr ist es die Kontextverschmutzung, die durch Token-Fehlmanagement verursacht wird.
MemGPT: Von Suchmaschinen zu Assistenten
MemGPT führt ein virtuell erweitertes Kontextfenster ein, das von der in Computersystemen implementierten Speicherpagination inspiriert ist. In Computern werden wichtige Informationen für schnelleren Zugriff im Speicher (RAM) abgelegt, aber wenn der RAM voll ist, werden die verbleibenden Daten im persistenten Speicher (ROM) gespeichert. Das Betriebssystem (OS) tauscht Informationen zwischen RAM und ROM aus, je nachdem, worauf es zugreifen muss.
MemGPT folgt demselben Konzept, indem es ein erweitertes Speichersystem erstellt. Es teilt den LLM-Kontext in zwei Teile.
Hauptkontext: Dies ist das Kontextfenster des zugrunde liegenden LLM. Es hat eine begrenzte Bandbreite und speichert die relevantesten Informationen, auf die direkt zugegriffen werden kann.
Externer Kontext: Der externe Kontext wird im persistenten Speicher (ROM) erstellt und verfügt über ein unendliches Fenster. Er speichert zentrale Ideen und Informationen, während das Gespräch fortgesetzt wird und sich der Hauptkontext füllt.
MemGPT übernimmt die Verwaltung des Informationsflusses zwischen den beiden Kontexten. Es aktualisiert den Speicher dynamisch auf Basis des aktuellen Kontexts und tauscht Informationen effizient zwischen dem Hauptspeicher und den externen Speicherbereichen aus. Diese Kontrolle und Effizienz sind entscheidend für die Leistung des Systems.
Dieser Ansatz positioniert MemGPT als eine entscheidende Komponente in Anwendungen, die Long-Context-Memory erfordern. Beispielsweise können persönliche Assistenten-Chatbots, die wichtige Details aus dem Leben der Nutzer speichern müssen, erheblich davon profitieren. Persönliche Beziehungen und berufliche Details werden im externen Kontext gespeichert und abgerufen, sobald die laufende Konversation dies erfordert. Dieser Ansatz bietet Nutzern ein wirklich „persönliches“ Erlebnis und erhöht die Relevanz und Nützlichkeit des Systems.
Struktur von MemGPT
Charles erklärte die wichtigsten Unterschiede zwischen dem architektonischen Design von MemGPT und einem Standard-LLM. Erstens gibt es den Unterschied im Umgang mit dem Kontext, den wir oben ausführlich besprochen haben. Zweitens geht es darum, wie es Eingaben und Ausgaben verarbeitet. Seine Eingaben und Ausgaben sind als JSON strukturiert und werden als Ereignisse und Funktionsaufrufe statt als reiner Text behandelt.
Standard-LLM-Setup
Wie MemGPT funktioniert
Es kann Dokumente, Nutzeranfragen und Systemwarnungen als Eingabe akzeptieren und ein Ereignis im LLM auslösen. Das Ereignis wird geparst und an das LLM übertragen, das den erweiterten Kontext nutzt, um die Anforderung zu verarbeiten und Aktionen wie einen Funktionsaufruf auszuführen. Dieses architektonische Design ermöglicht es ihm, wie ein Agent zu agieren, der darauf trainiert ist, bestimmte Aufgaben auszuführen. Wenn beispielsweise eine E-Mail eingeht, kann sie ein Ereignis auslösen, und das LLM wird die E-Mail parsen, um wichtige Details zu extrahieren und hervorzuheben.
MemGPT als Service
Charles schloss die Sitzungen ab, indem er erklärte, wie MemGPT für die langfristige Nutzung auf einem privaten Server bereitgestellt werden kann. Jede Interaktion und Anfrage wird in einer zustandsbehafteten Datenbank gespeichert, auf die auch nach dem Schließen des Systems zugegriffen werden kann.
Da der MemGPT-Agent auf einem Server läuft, wird über die REST Application Programming Interface (API) auf ihn zugegriffen. Auf den Agenten kann von überall über das Internet zugegriffen werden, wodurch er sich leicht in kommerzielle Anwendungen integrieren lässt.
Integration von MemGPT mit der Milvus-Vektordatenbank
Milvus ist eine Open-Source-Vektordatenbank für Vektorspeicherung und -abruf im Milliardenmaßstab. Sie ist außerdem eine der wichtigsten Technologien für den Aufbau von Retrieval Augmented Generation (RAG)-Anwendungen.
Milvus wurde in MemGPT integriert, was es Entwicklern erleichtert, KI-Agenten mit Verbindungen zu externen Datenquellen zu entwickeln.
Im folgenden Beispiel verwenden wir MemGPT, um mit einer benutzerdefinierten Datenquelle zu chatten, die in Milvus gespeichert ist.
Konfiguration
Installieren Sie die erforderlichen Abhängigkeiten.
pip install 'pymemgpt[milvus]'
Konfigurieren Sie die Milvus-Verbindung über den folgenden Befehl:
memgpt configure
...
? Speicher-Backend für Archivdaten auswählen: milvus
? Geben Sie die Milvus-Verbindungs-URI ein (Standard: ~/.memgpt/milvus.db): ~/.memgpt/milvus.db
Sie haben die URI gerade auf den lokalen Dateipfad gesetzt, z. B. ~/.memgpt/milvus.db, wodurch automatisch die lokale Milvus-Serviceinstanz über Milvus Lite, eine leichtgewichtige Version von Milvus für schnelles Prototyping, aufgerufen wird.
Wichtiger Hinweis: Wenn Sie eine größere Datenmenge haben, beispielsweise mehr als eine Million Dokumente, empfehlen wir, einen leistungsfähigeren Milvus-Server auf Docker oder Kubernetes einzurichten. In solchen Fällen sollte Ihre URI die Server-URI sein, z. B. <http://localhost:19530>.
Erstellen einer externen Datenquelle
In diesem Schritt müssen wir eine Datenquelle erstellen, um externe Daten in einen MemGPT-Chatbot einzuspeisen. Wir verwenden das Forschungspapier von MemGPT als Beispieldatenquelle.
Um dieses Paper herunterzuladen, verwenden wir den Befehl curl. Sie können die PDF-Datei auch einfach über Ihren Browser herunterladen.
curl -L -o memgpt_research_paper.pdf https://arxiv.org/pdf/2310.08560.pdf
Jetzt haben wir das Paper heruntergeladen. Dann müssen wir mit memgpt load eine MemGPT-Datenquelle erstellen:
memgpt load directory --name memgpt_research_paper --input-files=memgpt_research_paper.pdf
Dateien werden geladen: 100%|███████████████████████████████████| 1/1 [00:00<00:00, 3.94file/s]
74 Passagen und 13 Dokumente aus memgpt_research_paper geladen
Anhängen der Datenquelle an einen MemGPT-Agenten
Jetzt haben wir unsere Datenquelle erstellt. Wir können sie jederzeit an einen MemGPT-Chatbot anhängen.
Erstellen wir einen neuen Chatbot mit der Persona memgpt_doc (du kannst jede beliebige Persona verwenden):
memgpt run --persona memgpt_doc
Beim Chatten mit dem Agenten können wir die Datenquelle an das Archivgedächtnis des Agenten „anhängen“:
? Möchten Sie einen vorhandenen Agenten auswählen? Nein
🧬 Neuer Agent wird erstellt...
-> 🤖 Persona-Profil wird verwendet: 'sam_pov'
-> 🧑 Menschliches Profil wird verwendet: 'basic'
🎉 Neuer Agent 'PoliteButterfly' erstellt (id=d26e1981-ff36-4095-97a0-61a1601dfb5d)
Drücken Sie die Eingabetaste, um zu beginnen (fordert die erste MemGPT-Nachricht an)
💭 Interessant, ich habe einen Erstbenutzer. Zeit, mich vorzustellen und die Bedürfnisse des Benutzers zu verstehen. Ich frage mich, was Chad heute hierherführt.
🤖 Grüße, Chad! Ich bin MemGPT. Wie kann ich dir heute helfen?
> Gib deine Nachricht ein: /attach
? Datenquelle auswählen memgpt_research_paper
100%|███████████████████████████████████| 1/1 [00:00<00:00, 4.81it/s]
Testen unseres neuen Chatbots
Wir haben die Daten in den Speicher des Chatbots geladen. Jetzt können wir anfangen, Fragen zu stellen.
> Gib deine Nachricht ein: Das Paper, das ich in dein Archivgedächtnis geladen habe, heißt MemGPT. Kannst du mir mehr darüber erzählen?
💭 Es scheint, dass Chad mehr über das Paper mit dem Titel „MemGPT“ erfahren möchte, das in meinem Archivgedächtnis gespeichert ist. Es ist an der Zeit, das Archivgedächtnis nach Details und Hintergrunddaten zu durchsuchen, um ein umfassendes
Verständnis des Papers zu vermitteln. Denken wir daran, die Ergebnisse durchzublättern, bis ich genügend Informationen gesammelt habe, um Chads Anfrage zu beantworten.
⚡🧠 [function] Speicher wird mit archival_memory_search durchsucht
💭 Basierend auf den gefundenen Ergebnissen ist MemGPT ein KI-System, das für Aufgaben wie längere Gespräche und Dokumentenanalyse entwickelt wurde. Es verwaltet verschiedene Speicherebenen effizient, um erweiterten Kontext innerhalb
der begrenzten Kapazität des LLM bereitzustellen. Bemerkenswert ist außerdem, dass MemGPT bei Deep Memory Retrieval (DMR) und Dokument-QA-Aufgaben beeindruckend abschneidet. Bereiten wir eine umfassende Antwort für Chad vor.
🤖 Sicher, Chad. MemGPT, oder MemoryGPT, ist ein System, das speziell für Aufgaben wie längere Gespräche und Dokumentenanalyse entwickelt wurde, die traditionell durch die begrenzten Kontextfenster moderner
Large Language Models (LLMs) behindert werden. Es verwendet eine Technik, die von hierarchischen Speichersystemen in traditionellen Betriebssystemen inspiriert ist und als virtuelles Kontextmanagement bezeichnet wird. Diese Technik ermöglicht eine effektive Bereitstellung
von erweitertem Kontext innerhalb des begrenzten Kontextfensters eines LLM, indem verschiedene Speicherebenen intelligent verwaltet werden, ähnlich wie beim Paging zwischen physischem Speicher und Festplatte. Bemerkenswerterweise übertrifft MemGPT die Fixed-Context-
Baselines beim Deep Memory Retrieval und ist in der Lage, große Dokumente präzise zu analysieren.
Abschließende Gedanken
Der kurze Vortrag von Charles Packer war ein großartiger Einblick in die Konzepte von MemGPT. Die Sitzung besprach die Speicher- und Kontextbeschränkungen traditioneller LLMs und stellte sie als Engpässe für LLM-Anwendungen dar.
MemGPT führt das Konzept des erweiterten virtuellen Speichers ein, indem ein externer Kontext erstellt wird, der auf Festplattenspeicher gespeichert ist. Das Konzept ist davon inspiriert, wie Computer-Betriebssysteme Speicher verwalten, indem sie Informationen zwischen RAM und ROM austauschen. Der MemGPT-Agent kann wichtige Informationen in einer externen Datenbank speichern und basierend auf dem aktuellen Kontext auf die Informationen zugreifen. Der Agent eröffnet neue Möglichkeiten für die Entwicklung von Anwendungen mit langem Kontext.
Die Integration der Milvus-Vektordatenbank und MemGPT ist einen Schritt weiter gegangen, um die Entwicklung von KI-Agenten mit Verbindungen zu externen Datenquellen zu optimieren. In diesem Beitrag haben wir auch ein Beispiel vorgestellt, das zeigt, wie diese Integration verwendet werden kann, um einen Chatbot mit externen Erinnerungen zu erstellen.
Weiterlesen

VDBBench Adds Cost-Aware Benchmarking for Vector Databases
Compare Zilliz Cloud, Pinecone, and turbopuffer with VDBBench cost-aware vector database benchmarks across latency, freshness, multitenancy, and cold starts.

Introducing Loon: A New Storage Engine for Vector Data That Never Stops Changing
Loon is a new storage engine for Milvus 3.0 and Zilliz Vector Lakebase, built to manage evolving vector datasets with ColumnGroups, row ID alignment, and Manifests.

Vector Databases vs. Object-Relational Databases
Use a vector database for AI-powered similarity search; use an object-relational database for complex data modeling with both relational integrity and object-oriented features.



