DiffMem ist ein leichtgewichtiges Speicher-Backend, das für KI-Intelligenzen und konversationelle Systeme entwickelt wurde. Es verwendet innovativ Git als Kern des Speichers und speichert KI-Speicher als für Menschen lesbare Markdown-Dateien. Die Commit-Historie von Git wird verwendet, um die Entwicklung von Erinnerungen im Laufe der Zeit zu verfolgen, während das System einen speicherinternen BM25-Index zum schnellen und interpretierbaren Abrufen von Informationen einsetzt. Bei diesem Projekt handelt es sich derzeit um einen Proof of Concept (PoC), mit dem untersucht werden soll, wie ein Versionskontrollsystem zum Aufbau einer effizienten und skalierbaren Speichergrundlage für KI-Anwendungen verwendet werden kann. DiffMem behandelt den Speicher als eine versionierte Wissensbasis: der "aktuelle Stand" des Wissens wird in editierbaren Dateien gespeichert, während historische Änderungen in Git-Commit-Graphen gespeichert werden. Dieses Design ermöglicht es Intelligenzen, einen kompakten, aktuellen Wissensstand abzufragen, während sie gleichzeitig in der Lage sind, bei Bedarf in die Entwicklung der Speicher einzutauchen.
Funktionsliste
- Git-gesteuerte SpeichersystemeGit: Verwenden Sie die Versionskontrollfunktionen von Git, um die Entwicklung der KI-Speicher zu verwalten und zu verfolgen, wobei jede Speicheraktualisierung einem Git-Commit entspricht.
- Human-lesbares FormatMemories werden als einfache Markdown-Dateien gespeichert, die Entwickler direkt lesen, bearbeiten und verwalten können.
- Aktueller Stand SchwerpunktStandardmäßig wird nur der "aktuelle Stand" von Wissensdokumenten indiziert und durchsucht, was den Umfang von Abfragen reduziert und die Abfrageeffizienz und Token-Ökonomie im Kontext von Large Language Models (LLMs) verbessert.
- Differential Evolution Tracking: durch
git diff
und anderen Befehlen kann der intelligente Körper effizient bestimmte Informationen im Laufe der Zeit abfragen, ohne eine komplette Historie laden zu müssen. - Schnelle TextsucheBM25-Index: Ein speicherinterner BM25-Index sorgt für schnelle Antworten im Millisekundenbereich bei der Stichwortsuche.
- modulare KomponenteDas System besteht aus mehreren Kernmodulen, darunter das Modul, das für die Analyse der Dialoge und die Übermittlung der Aktualisierungen zuständig ist
写入智能体
verantwortlich für die Integration des Abfragekontexts der上下文管理器
sowie die mit der Durchführung der Suche beauftragten Personen搜索智能体
. - Leichtgewichtig und einfach zu integrierenGeringe Projektabhängigkeiten, keine Notwendigkeit, einen separaten Server bereitzustellen, und kann als Python-Modul direkt in bestehende Projekte integriert werden.
Hilfe verwenden
DiffMem ist so konzipiert, dass es als einfaches Python-Modul ohne komplexe Serverimplementierung importiert werden kann. Im Folgenden finden Sie eine detaillierte Beschreibung der Installation und Verwendung.
Vorbereitung und Installation der Umgebung
- Klonen der Codebasis
Zunächst muss sie von GitHub geklont werdenDiffMem
das Quellcode-Repository auf Ihren lokalen Computer. Öffnen Sie ein Terminal oder ein Befehlszeilentool und geben Sie den folgenden Befehl ein:git clone https://github.com/Growth-Kinetics/DiffMem.git
Nach der Ausführung wird die Codebase in eine Datei im aktuellen Verzeichnis mit dem Namen
DiffMem
im Ordner des - Wechseln Sie in das Projektverzeichnis
ausnutzencd
Befehl in den Projektordner:cd DiffMem
- Installieren von Abhängigkeiten
DiffMem benötigt zur Ausführung eine Reihe von Python-Bibliotheken, die in der Dokumentationrequirements.txt
in der Datei. Sie können diepip
um sie zu installieren:pip install -r requirements.txt ``` 这个命令会自动下载并安装`gitpython`、`rank-bm25`和`sentence-transformers`等必要的库。
- Einstellen des API-Schlüssels
DiffMem erfordert die Verwendung von Large Language Models (LLMs), um zusammenzuarbeiten, z. B. um den Inhalt von Gesprächen zu analysieren. Das Projekt verwendet OpenRouter, um LLM-Aufrufe zu verwalten. Sie müssen Ihren API-Schlüssel in einer Umgebungsvariablen festlegen.
Für Linux- oder macOS-Systeme verwenden Sie dieexport
Befehl:export OPENROUTER_API_KEY='你的密钥'
Für Windows-Systeme verwenden Sie die
set
Befehl:set OPENROUTER_API_KEY='你的密钥'
bitte angeben
你的密钥
Ersetzen Sie ihn durch Ihren eigenen gültigen API-Schlüssel.
Kernfunktion Betrieb
Die Hauptfunktionalität von DiffMem wird durch dieDiffMemory
Klasse ist für den Benutzer sichtbar. Sie können diese Klasse initialisieren und dann ihre Methoden zum Lesen, Schreiben und Abfragen des Speichers aufrufen.
- Initialisierung der Speicherbank
Zunächst müssen Sie dieDiffMemory
Klasse und initialisieren Sie sie mit einem lokalen Pfad. Dieser Pfad wird als Git-Repository dienen, in dem der Speicher gespeichert wird.from src.diffmem import DiffMemory # 初始化记忆库,指定仓库路径、用户名和API密钥 # 如果路径不存在,系统会自动创建一个新的Git仓库 memory = DiffMemory( repo_path="/path/to/your/memory_repo", user_name="alex", api_key="你的OpenRouter密钥" )
Im obigen Code ist die
/path/to/your/memory_repo
Ersetzen Sie ihn durch den Pfad zu dem Ordner, in dem Sie Ihre Erinnerungen speichern möchten. - Bearbeitung und Übermittlung von Erinnerungen
Sie können einen Teil des Dialogs oder des Sitzungsinhalts an dieprocess_and_commit_session
Die Schreibintelligenz von DiffMem analysiert den Text automatisch, um Entity-Informationen zu extrahieren oder zu aktualisieren, und speichert diese Änderungen dann in einem einzigen Git-Commit.# 假设你有一段新的对话内容 conversation_text = "今天和妈妈一起喝了咖啡,她提到下周要去旅行。" session_id = "session-12345" # 为这次会话指定一个唯一的ID # 处理并提交这次会话的记忆 memory.process_and_commit_session(conversation_text, session_id) print("记忆已成功处理并提交。")
Bei der Ausführung wird das relevante Wissen in der Markdown-Datei aktualisiert und ein neuer Git-Commit-Datensatz erzeugt, wobei die Commit-Nachricht die Session-ID enthält.
- Kontext erhalten
Wenn es an der Zeit ist, mit der KI zu interagieren, können Sie dieget_context
Methode, um relevante Hintergrundinformationen für den aktuellen Dialog zu erhalten. Diese Methode unterstützt verschiedene "Tiefen"-Parameter, um den Grad der Detailliertheit der Informationen zu steuern.depth="basic"
:: Zugang zu den wichtigsten Informationsblöcken.depth="wide"
Semantische Suche: Führen Sie eine semantische Suche durch, um mehr relevante Informationen zu erhalten.depth="deep"
Rückgabe des vollständigen Inhalts der mit der Abfrage verbundenen Datei.depth="temporal"
Git: Gibt zeitliche Informationen über den Verlauf von Git zurück.
# 假设当前的对话是关于“妈妈的旅行计划” current_conversation = "妈妈的旅行计划定了吗?" # 获取深度上下文 context = memory.get_context(current_conversation, depth="deep") # 将获取到的上下文信息打印出来 print("获取到的相关上下文:") print(context)
Dieser Kontext kann in das LLM eingespeist werden, um genauere und kontextbezogenere Antworten zu generieren.
- Direkte Durchführung von Suchvorgängen
Sie können auch einfach diesearch
Methode zum Abrufen von Informationen aus der Speicherbank.query = "关于妈妈的信息" search_results = memory.search(query) print(f"关于 '{query}' 的搜索结果:") for result in search_results: print(f"- {result}")
Beispielcode zur Ausführung
In der Projektbeschreibungexamples/
Eine vollständige Demodatei zur Verwendung ist im Verzeichnisusage.py
. Sie können es direkt ausführen, um den gesamten Arbeitsablauf von DiffMem zu beobachten.
Führen Sie den folgenden Befehl im Terminal aus:
python examples/usage.py
Dieses Skript demonstriert, wie die Speicherbank initialisiert wird, wie neue Speicher übertragen werden und wie der Kontext auf der Grundlage neuer Dialoginhalte abgerufen wird, wobei die gesamte DiffMem-Kette von der Nachrichteneingabe bis zur Ausgabe gezeigt wird.
Anwendungsszenario
- Persönlicher KI-Assistent
Persönliche KI-Assistenten können mit Langzeitspeicherfunktionen ausgestattet werden. Assistenten können sich an Benutzerpräferenzen, vergangene Gespräche, wichtige Daten und Ereignisse erinnern. Da sich die Erinnerungen im Laufe der Zeit weiterentwickeln, kann der Assistent genau abrufen, "was wir letzte Woche besprochen haben" oder "wie alt meine Tochter jetzt ist", da er sich nur auf den jüngsten Stand der Informationen konzentriert und gleichzeitig einen historischen Überblick behält. - KI-Systeme, die kontinuierlich lernen müssen
In Bereichen wie Kundenservice und technischem Support müssen KI-Intelligenzen ständig neues Produktwissen und Geschäftsprozesse erlernen.DiffMem kann die Entwicklung dieses Wissens aufzeichnen. Wenn eine Bedienungsanleitung aktualisiert wird, speichert das System die neue Version und protokolliert die Änderungen über die Git-Historie. So wird sichergestellt, dass die KI immer die genauesten Informationen liefert und die historische Version eines jeden Wissenspunkts nachvollziehen kann. - Multi-Intelligenz-Zusammenarbeit
In einem Multi-Intelligenz-System können verschiedene Intelligenzen denselben DiffMem-Speicher gemeinsam nutzen. Durch die Verzweigungs- und Zusammenführungsanforderungsmechanismen von Git können die Intelligenzen bei der Aktualisierung des gemeinsamen Wissens und der Lösung möglicher "Speicherkonflikte" zusammenarbeiten, um einen konsistenten, versionierten Teamspeicher zu bilden. - Interpretierbarkeit und Fehlersuche
KI kann sich für Entwickler manchmal wie eine "Black Box" verhalten, und DiffMem verbessert die Interpretierbarkeit von KI-Speicherdaten erheblich, indem es sie als für Menschen lesbaren Text und Git-Commit-Historie speichert. Entwickler können den Code so überprüfen, als wäre ergit log
im Gesang antwortengit diff
Zu sehen, was die KI "gelernt" hat und "wie sich das Wissen verändert hat", ist sehr hilfreich bei der Fehlersuche im Verhalten und Entscheidungsprozess der KI.
QA
- Wie unterscheidet sich DiffMem von herkömmlichen Vektordatenbanken?
Vektordatenbanken werden in erster Linie für die Ähnlichkeitssuche von hochdimensionalen Daten verwendet, wobei Informationen (z. B. Text) in Vektoren umgewandelt und gespeichert werden und dann ähnliche Inhalte durch Berechnung des Abstands zwischen den Vektoren gefunden werden. DiffMem hingegen verfolgt ein völlig anderes Konzept, das sich nicht auf Vektoreinbettungen stützt, sondern Speicher als versionierte Textdokumente verwaltet. Die Stärke von DiffMem liegt in der Fähigkeit, Informationen im Zeitverlauf zu verarbeiten und Änderungen eines Fakts (z. B. das Alter einer Person, das sich von 9 auf 10 Jahre geändert hat) eindeutig nachzuvollziehen, wohingegen Vektordatenbanken bei dieser Art von "Faktenaktualisierungen" möglicherweise veraltete und verrauschte Informationen zurückbehalten. - Warum sollten Sie Git als Backend-Technologie wählen?
Die Wahl fiel auf Git, weil es eine ausgereifte und leistungsstarke Lösung für die Verwaltung von Dokumenten in Versionen darstellt. Die Vorteile von Git passen gut zu den Anforderungen des KI-Gedächtnisses: Es unterstützt natürlich die Verfolgung von Änderungen (diff
), Aufzeichnung der Geschichte (log
), zurück zu einem beliebigen Zeitpunkt (checkout
) und Filialverwaltung (branch
). Außerdem wird Git verteilt und die Daten werden in einfachen Dateien gespeichert, wodurch das Repository in hohem Maße portabel und beständig ist und nicht auf proprietäre Formate angewiesen ist. - Ist DiffMem für Produktionsumgebungen geeignet?
Derzeit handelt es sich bei DiffMem um ein Proof of Concept (PoC)-Projekt, und die Autoren haben deutlich gemacht, dass es noch nicht für Produktionsumgebungen gehärtet wurde. Es hat einige Einschränkungen, wie z. B. die Notwendigkeit einer manuellen Fernsynchronisierung von Git (push
/pull
), der Mechanismus zur Fehlerbehandlung ist relativ einfach, und es gibt keinen Sperrmechanismus für den gleichzeitigen Zugriff mehrerer Benutzer. Daher sind vor dem direkten Einsatz in groß angelegten kommerziellen Anwendungen weitere Entwicklungen und Tests erforderlich. - Welches sind die wichtigsten Software-Abhängigkeiten, die zur Ausführung von DiffMem erforderlich sind?
DiffMem ist ein leichtgewichtiges Projekt mit folgenden HauptabhängigkeitenGitPython
Bibliothek (für die Bearbeitung von Git-Repositories in Python),rank-bm25
Bibliothek (für die Implementierung effizienter Algorithmen zur Textsuche) und diesentence-transformers
(zur Unterstützung semantisch verwandter Suchfunktionen).