3 Punkte von baeba 3 시간 전 | Noch keine Kommentare. | Auf WhatsApp teilen

Kurzüberblick

  • Zweck

    • Ein Memory-Framework, das AI-Agents dabei unterstützt, benötigte Informationen automatisch aus Gesprächen und Dokumenten zu extrahieren und langfristig zu speichern und abzurufen
  • Kerndesign

    • Der vollständige Originalinhalt, der Memory value, bleibt unverändert erhalten; für die Suche werden Primary abstraction und Cue anchors verwendet
  • Wichtigste Unterscheidungsmerkmale

    • Zielt auf eine Struktur ab, die Informationsverlust und Suchmehrdeutigkeit gegenüber typischem RAG reduziert, bei dem der vollständige Originaltext direkt eingebettet wird
  • Hauptfunktionen

    • Automatische Memory-Extraktion, Deduplizierung, Zusammenführung und Aktualisierung, semantische Suche, Keyword-Suche sowie LLM-basierte mehrstufige Suche
  • Einsatzbereiche

    • Langfristige dialogorientierte AI, Multi-Agent-Systeme, personalisierte Dienste, dokumentbasiertes Wissensmanagement
  • Aktueller Status

    • Öffentliches Python-basiertes Projekt unter MIT-Lizenz; enthält Benchmarks und experimentelle Funktionen, befindet sich aber eher in einer frühen Veröffentlichungsphase

Einleitung

Die Komplexität des Memory-Managements für Agents lösen

  • Bei der Entwicklung bestehender AI-Agents müssen Entwickler die folgenden Probleme selbst behandeln

    • Entscheiden, welche Informationen als Memory gespeichert werden sollen
    • Beurteilen, wann gespeicherte Informationen aktualisiert oder gelöscht werden sollen
    • Erinnerungen abrufen, die zu einer Nutzerfrage passen
    • Doppelte oder widersprüchliche Erinnerungen verwalten
  • Memora zielt darauf ab, diesen Memory-Lebenszyklus innerhalb des Frameworks zu behandeln

  • Entwickler können sich stärker auf die fachlichen Funktionen des Agents und die Antwortgenerierung konzentrieren als auf Low-Level-Logik für Speicherung und Suche

Grenzen bestehender Memory-Strukturen

  • Typische RAG-Systeme

    • Teilen Dokumente oder Gesprächs-Originaltexte in Abschnitte fester Größe auf
    • Betten jeden Abschnitt ein und speichern ihn in einer Vektordatenbank
    • Suchen Abschnitte, die einer Frage semantisch nahe sind
  • Dieser Ansatz ist einfach umzusetzen, kann aber folgende Probleme verursachen

    • Langer Kontext wird über mehrere Abschnitte verteilt
    • Informationen mit ähnlichen Formulierungen werden doppelt gespeichert
    • Einfache semantische Ähnlichkeit stimmt nicht unbedingt mit der tatsächlichen Frageabsicht überein
    • Wenn nur komprimierte Zusammenfassungen gespeichert werden, können Details verloren gehen
  • Graphartige Wissensbasen sind für die Darstellung von Beziehungen vorteilhaft, bringen aber den Aufwand mit sich, Schema und Beziehungsstruktur fortlaufend zu verwalten


Hauptteil

Originalinhalt und Suchstruktur trennen

  • Jede Memory in Memora besteht aus drei Elementen

Memory value

  • Die tatsächlich gespeicherte vollständige Information
  • Bewahrt Originaltext und Details ohne Komprimierung
  • Wird nicht direkt in den Suchindex aufgenommen
  • Dient dazu, den ursprünglichen Kontext ohne Informationsverlust zu erhalten

Primary abstraction

  • Eine repräsentative Zusammenfassung dessen, worum es in dieser Memory geht
  • Wird einmal pro Memory erzeugt
  • Dient als Grundlage für Suche, Aktualisierung, Zusammenführung und Deduplizierung
  • Wird als Standardeinheit verwendet, die die Identität der Memory beschreibt

Cue anchors

  • Mehrere semantische Hinweise, über die auf eine einzelne Memory zugegriffen werden kann
  • Werden aus Kombinationen von Personen, Objekten, Ereignissen, Kerneigenschaften usw. gebildet
  • Mit einer Erinnerung können mehrere Hinweise verbunden werden
  • Bilden eine Many-to-many-Struktur, in der mehrere Erinnerungen dieselben Hinweise teilen

Selektive Indexierung der Suchziele

  • Memora indexiert nicht alle Originaltexte direkt

  • Für die eigentliche Suche werden nur die folgenden Informationen verwendet

    • Primary abstraction
    • Cue anchors
  • Nach Abschluss der Suche wird der verknüpfte ursprüngliche Memory value zurückgegeben

  • Zweck dieser Struktur

    • Suchrepräsentation und tatsächlich gespeicherte Informationen trennen
    • Den Suchindex kompakt halten
    • Detailinformationen des Originaltexts unverändert bewahren
    • Semantisches Rauschen reduzieren, das bei Originaltext-Embeddings entstehen kann

Zwischenform zwischen RAG und Graphstruktur

  • Bietet strukturiertere Suchhinweise als gewöhnliches RAG

  • Definiert nicht alle Beziehungen wie eine Graphdatenbank über ein strenges Schema

  • Ein Ansatz, der durch eine Abstraktionsschicht über Erinnerungen sowohl Flexibilität als auch Struktur erreichen will

  • Zentrale Ausrichtung

    • Originaltexte werden in freier Form gespeichert
    • Für Suche und Verknüpfung werden strukturierte Repräsentationen verwendet
    • Speicherstruktur und Suchstruktur werden unabhängig verwaltet

Verarbeitungsablauf von der Memory-Erstellung bis zur Antwort

1. Memory-Erfassung

  • Der Agent verarbeitet ein Gespräch oder Dokument

  • Aus dem Inhalt werden die folgenden Informationen automatisch extrahiert

    • Fakteninformationen
    • Ereignisse und Erfahrungen
    • Abläufe und Arbeitsweisen
  • Lange Gespräche werden nach Themen in Episoden aufgeteilt

  • Kerninformationen werden in strukturierte Memory-Einträge umgewandelt

2. Intelligente Speicherung

  • Verwendet standardmäßig die Vektordatenbank ChromaDB als Speicher

  • Speichert Memories mithilfe semantischer Embeddings

  • Wenn neue Informationen eingegeben werden, werden sie mit bestehenden Memories verglichen

  • Für ähnliche oder doppelte Informationen werden folgende Aktionen ausgeführt

    • Deduplizierung
    • Zusammenführung mit bestehenden Erinnerungen
    • Aktualisierung veralteter Informationen
  • Optional kann ein Cue index erzeugt werden, um strukturierte Suche zu unterstützen

3. Adaptive Suche

  • Bietet je nach Fragetyp und Einstellungen mehrere Suchstrategien
Semantische Suche
  • Berechnet die Vektorähnlichkeit zwischen Frage und Memory-Repräsentation
  • Einfach umzusetzen und auf allgemeine Fragen anwendbar
  • Kann semantisch ähnliche Informationen finden, auch wenn die Formulierung anders ist
Prompted-Suche
  • Ein LLM führt den Suchprozess schrittweise aus
  • Suchbegriffe und Suchbereich werden auf Basis der ersten Suchergebnisse iterativ angepasst
  • Geeignet für komplexe Fragen oder Fragen, bei denen mehrere Erinnerungen kombiniert werden müssen
  • Da zusätzliche LLM-Aufrufe erfolgen, können Kosten und Antwortzeit steigen
Hybrid-Suche
  • Kombiniert vektorbasierte semantische Suche mit BM25- und Keyword-Suche
  • Nutzt semantische Ähnlichkeit und exakte Wortübereinstimmung gemeinsam
  • Hilfreich, um verpasste Treffer bei Eigennamen, Produktnamen, Code, Datumsangaben usw. zu reduzieren
GRPO-Suche
  • Verwendet eine per Reinforcement Learning trainierte Such-Policy
  • Lernt selbst die Methode zur Auswahl der für eine Frage benötigten Memories
  • Ziel ist es, LLM-basierte iterative Suche durch ein lokal feinabgestimmtes Modell zu ersetzen
  • Derzeit als experimentelle Funktion eingestuft

4. Antwortgenerierung

  • Die abgerufenen Memories werden in einem festgelegten Format zusammengestellt
  • Diese Inhalte werden in den LLM-Prompt eingefügt
  • Das LLM erzeugt eine Antwort unter gemeinsamer Nutzung von Frage und abgerufenen Erinnerungen
  • Es wird darauf hingewirkt, dass die Antwort auf den gespeicherten Memories basiert

Verwaltungsfunktionen zur Wahrung der Memory-Qualität

  • Anders als ein flacher Speicher, der Memories nur fortlaufend hinzufügt, verwaltet Memora den Zustand bestehender Memories

  • Wichtige Verwaltungsfunktionen

    • Entfernen doppelter Erinnerungen
    • Zusammenführen ähnlicher Erinnerungen
    • Aktualisieren geänderter Fakten
    • Neuorganisation der Memory-Struktur
  • Primary abstraction wird als Grundlage für Memory-Aktualisierung und Integration verwendet

  • Ziel ist es, das Problem einer unbegrenzten doppelten Anhäufung von Memories im Laufe der Zeit zu reduzieren

Unterstützung verschiedener Memory-Typen

  • Durch unterschiedliche Gestaltung von Memory value und Abstraktionsmethode lassen sich mehrere Erinnerungstypen ausdrücken

Faktische Erinnerungen

  • Relativ stabile Informationen wie Personen, Orte, Eigenschaften und Einstellungen
  • Beispiel: Arbeitsort eines bestimmten Nutzers, bevorzugte Tools, Technologie-Stack eines Projekts

Episodische Erinnerungen

  • Ereignisse oder Gespräche, die zu einem bestimmten Zeitpunkt stattgefunden haben
  • Beispiel: Inhalte, die in einem früheren Meeting beschlossen wurden, Ablauf zur Behebung eines bestimmten Fehlers

Prozedurale Erinnerungen

  • Arbeitsweisen oder wiederholbare Abläufe
  • Beispiel: Server-Deployment-Prozess, Reihenfolge zur Fehlerprüfung, Regeln für die Dokumenterstellung

Memory-Sharing und Isolation bei Multi-Agenten

  • Mehrere Agents, die in derselben Umgebung arbeiten, können einen gemeinsamen Memory-Bereich nutzen

  • Informationen, die ein Agent gespeichert hat, können von einem anderen Agent wiederverwendet werden

  • Der Memory-Umfang kann auch nach Agent oder Rolle eingeschränkt werden

  • Erwartete Effekte

    • Weniger Wissensduplikate zwischen Agents
    • Verbesserte Aufgabenübergabe
    • Konsistenz gemeinsamer Projektinformationen
  • Eine Struktur, die durch Zugriffskontrolle und Isolationsfunktionen selektives Teilen und Datenschutz unterstützt

Trennung von Speicherinfrastruktur und Repräsentationsstruktur

  • So gestaltet, dass die Art der Memory-Repräsentation nicht stark an einen bestimmten Speicher gekoppelt ist

  • Die Projektstruktur enthält Verbindungsfunktionen für folgende Datenbanken

    • ChromaDB
    • Redis
  • Auf lokale oder entfernte Speicherumgebungen anwendbar

  • Auch bei einem Wechsel des Speicher-Backends kann die Abstraktions- und Hinweisstruktur der Memories beibehalten werden


Grundlegende Nutzung

  • Erfordert Python 3.10 oder höher
  • Nach dem Klonen des GitHub-Repositorys das Paket installieren
  • MemoraClient erstellen und einen Nutzer- oder Agent-Identifier angeben
  • Mit add() Gespräche oder Dokumente zur Memory hinzufügen
  • Mit query() semantische Suche ausführen
  • Mit advance_query() erweiterte Suche im Prompted- oder GRPO-Verfahren ausführen

Struktur der Agent-Integration

  • Beim Empfang einer Nutzernachricht werden zuerst relevante Memories gesucht

  • Antwort wird mithilfe der Suchergebnisse und der Nutzerfrage erzeugt

  • Die erzeugte Antwort und die Nutzernachricht werden als ein Gesprächsverlauf zusammengestellt

  • Dieses Gespräch wird erneut in Memora gespeichert

  • Wiederholter Ablauf

    • Frage empfangen
    • Relevante Erinnerungen suchen
    • Antwort generieren
    • Gespräch speichern
    • Bei späteren Fragen wiederverwenden

Bewertung der Leistung von Langzeit-Memory

LoCoMo-Benchmark

  • Bewertet die Fähigkeit zum Abruf von Erinnerungen in langfristig fortlaufenden Gesprächen

  • Wichtige Bewertungstypen

    • Einstufige Fragen
    • Mehrstufige Fragen, die mehrere Informationen kombinieren
    • Fragen zu zeitlichen Beziehungen
    • Offene Fragen
  • Kombinationen aus Semantic, Prompted, Cue index usw. können experimentell getestet werden

LongMemEval-Benchmark

  • Bewertet die Fähigkeit eines Langzeit-Memory-Systems, verschiedene Fragen zu verarbeiten
  • Episoden-Memory und semantische Sucheinstellungen können angewendet werden
  • Dient zur Überprüfung von Informationserhalt und Suchleistung in realen langfristigen Gesprächsumgebungen

Lernen einer GRPO-basierten Such-Policy

  • Experimentelle Funktion, bei der der Suchprozess als Reinforcement-Learning-Policy gelernt wird

  • Verarbeitungsschritte

    • Suchpfad mit der aktuellen Policy erzeugen
    • Belegbarkeit, Redundanz und Kosten der Suchergebnisse bewerten
    • Gruppenrelativen Vorteil berechnen
    • Such-Policy im GRPO-Verfahren lernen
  • Qwen-3B- oder 7B-Modelle und LoRA-Fine-Tuning werden als Beispiele genannt

  • Für das Training ist eine GPU erforderlich

  • Ziel

    • Kosten durch Aufrufe eines externen LLM bei jeder Suche reduzieren
    • Eine auf bestimmte Daten und Aufgaben optimierte Suchstrategie aufbauen
  • Einschränkungen

    • Trainingsdaten und Bewertungskriterien sind erforderlich
    • Modelltraining und Betriebsmanagement kommen hinzu
    • Für normale Nutzer schwieriger direkt anzuwenden als semantische Suche

Wichtigste Vorteile

  • Details des Originaltexts können ohne Komprimierung bewahrt werden
  • Suchrepräsentation und tatsächliche Informationen sind getrennt, wodurch die Memory-Struktur klar ist
  • Deduplizierung und Aktualisierung von Memories können systematisch behandelt werden
  • Semantische Suche, Keyword-Suche, LLM-Suche und Reinforcement-Learning-Suche sind wählbar
  • Faktische, episodische und prozedurale Erinnerungen lassen sich in einem Framework verwalten
  • Mehrere Agents können dieselben Erinnerungen teilen
  • Ziel ist die Integration in bestehende Agent-Systeme mit vergleichsweise wenigen Änderungen
  • Kann sowohl lokale als auch entfernte Speicherstrukturen unterstützen

Strukturelle Grenzen und Hinweise

  • Die Qualität von Primary abstraction und Cue anchors beeinflusst die Suchleistung direkt
  • Wenn automatisch erzeugte Abstraktionen ungenau sind, können Inhalte bei der Suche fehlen, obwohl der Originaltext korrekt ist
  • Eine Struktur, die den Originaltext nicht direkt indexiert, kann bei der Suche nach Detailformulierungen oder seltenen Informationen nachteilig sein
  • Bei Deduplizierung und Zusammenführung können unterschiedliche Ereignisse fälschlich zu einer einzigen Erinnerung integriert werden
  • Prompted-Suche kann durch mehrere LLM-Aufrufe Kosten und Latenz erhöhen
  • Das GRPO-Verfahren benötigt GPU, Trainingsdaten und ein Bewertungssystem, was die operative Komplexität erhöht
  • Gemeinsame Memories in Multi-Agenten-Systemen müssen Zugriffsrechte und Informationsisolation klar gestalten
  • Beim Speichern personenbezogener oder sensibler Gespräche sind separate Richtlinien für Verschlüsselung, Löschung und Aufbewahrung erforderlich
  • Im öffentlichen Repository gibt es keine Releases und nur wenige Mitwirkende sowie Nutzungskennzahlen, sodass eine ausreichende Stabilität für den Betrieb in großem Maßstab schwer als nachgewiesen gelten kann

Fazit

Langzeit-Memory-Ansatz mit zusätzlicher strukturierter Zugriffsschicht

  • Memora entfernt sich vom einfachen Vektorisieren des vollständigen Originaltexts und schlägt folgende Struktur vor

    • Details werden im Memory value bewahrt
    • Die repräsentative Bedeutung wird als Primary abstraction ausgedrückt
    • Verschiedene Suchpfade werden über Cue anchors aufgebaut
  • Der zentrale Wert liegt im Gleichgewicht zwischen Informationserhalt und Sucheffizienz

  • Gegenüber einfacher Dokumentensuche dürfte der Einsatz in folgenden Umgebungen besonders aussichtsreich sein

    • Personalisierte Agents, die langfristig mit Nutzern interagieren
    • Systeme, die fortlaufend zahlreiche Entwicklungs- und Arbeitsdokumente sammeln
    • Umgebungen, in denen Agents mit mehreren Rollen Wissen teilen
    • Projekte, die frühere Entscheidungen und Arbeitsabläufe wiederverwenden müssen

Vor der Einführung ist Validierung erforderlich

  • Bei der praktischen Anwendung sollten zunächst die folgenden Punkte überprüft werden

    • Qualität der Abstraktion und Cue-Erzeugung für koreanische Dokumente
    • Suchgenauigkeit im Vergleich zu bestehendem RAG
    • Fehlerquote im Memory-Zusammenführungsprozess
    • Datenwachstum und Suchgeschwindigkeit bei langfristigem Betrieb
    • Kosten für LLM- und Embedding-APIs
    • Art der Speicherung personenbezogener Daten und der Zugriffskontrolle
  • In einer frühen Phase ist ein Ansatz sinnvoll, bei dem ein kleiner PoC mit einem Teil der Kerndokumente durchgeführt und die Leistung mit allgemeinem RAG sowie hybriden Suchverfahren verglichen wird

Noch keine Kommentare.

Noch keine Kommentare.