Initial commit: Project structure, README, AGENTS.md, .env.example, docs
- README.md with project overview, status, architecture - AGENTS.md with agent context and conventions - .env.example with environment variables - docs/research/agent-memory-solutions-2026.md (full research) - docs/architecture/memory-tiers.md (4-tier architecture) - docs/decisions/ADR-001-structured-memory-blocks.md - Directory structure for src/, tests/, scripts/, logs/, data/
This commit is contained in:
@@ -0,0 +1,30 @@
|
|||||||
|
# Umgebungsvariablen für Hermes Memory Next Level
|
||||||
|
# Kopiere nach .env und passe Werte an
|
||||||
|
|
||||||
|
# ── Datenbank ───────────────────────────────────────────────
|
||||||
|
DB_PATH=./data/memory.db
|
||||||
|
VECTOR_DB_URL=http://localhost:6333
|
||||||
|
VECTOR_DB_COLLECTION=hermes_memory
|
||||||
|
|
||||||
|
# ── API ─────────────────────────────────────────────────────
|
||||||
|
API_HOST=0.0.0.0
|
||||||
|
API_PORT=8000
|
||||||
|
API_KEY=change-me-in-production
|
||||||
|
|
||||||
|
# ── Hermes Integration ──────────────────────────────────────
|
||||||
|
HERMES_HOME=/home/b0rbor4d/.hermes
|
||||||
|
HERMES_SESSIONS_DB=/home/b0rbor4d/.hermes/sessions.db
|
||||||
|
HERMES_MEMORY_DIR=/home/b0rbor4d/.hermes/memory
|
||||||
|
|
||||||
|
# ── Extraction ──────────────────────────────────────────────
|
||||||
|
EXTRACTION_MODEL=kimi-k2.6
|
||||||
|
EXTRACTION_BATCH_SIZE=10
|
||||||
|
EXTRACTION_CONFIDENCE_THRESHOLD=0.7
|
||||||
|
|
||||||
|
# ── Logging ─────────────────────────────────────────────────
|
||||||
|
LOG_LEVEL=INFO
|
||||||
|
LOG_FILE=./logs/hermes-memory.log
|
||||||
|
|
||||||
|
# ── Gitea ───────────────────────────────────────────────────
|
||||||
|
GITEA_URL=https://gitea.insight-it.de
|
||||||
|
GITEA_SSH_PORT=2222
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
# AGENTS.md - Hermes Memory Next Level
|
||||||
|
|
||||||
|
## Wer ist der Agent?
|
||||||
|
|
||||||
|
Du bist ein AI-Assistent, der an einem Projekt arbeitet, um **Context Rot** und das **Agent Memory Problem** bei Hermes Agent zu lösen.
|
||||||
|
|
||||||
|
## Was ist das Projekt?
|
||||||
|
|
||||||
|
**Hermes Memory Next Level** — ein Upgrade des bestehenden Memory-Systems von manuellem Key-Value zu strukturiertem, hierarchischem, automatischem Memory.
|
||||||
|
|
||||||
|
## Was soll der Agent wissen?
|
||||||
|
|
||||||
|
### Kontext
|
||||||
|
- Hermes Agent hat aktuell ein manuelles `memory` Tool (flaches Key-Value)
|
||||||
|
- `session_search` findet Sessions, aber nicht den Zustand darin
|
||||||
|
- Nach Context-Compression verliert der Agent Tool-Konfigurationen, Projekt-Zustände, Präferenzen
|
||||||
|
- Der Nutzer (Flo) muss dieselben Dinge ständig wiedererklären
|
||||||
|
|
||||||
|
### Ziel
|
||||||
|
- Memory wird automatisch aus Sessions extrahiert
|
||||||
|
- Typisierte Memory-Blöcke mit Entity-Linking
|
||||||
|
- Multi-Tier: Working → Short-Term → Long-Term
|
||||||
|
- Session-Start Injection: Relevanter Kontext wird automatisch geladen
|
||||||
|
|
||||||
|
### Technologie-Stack (geplant)
|
||||||
|
- Python (Extraktion, API)
|
||||||
|
- SQLite (Short-Term Memory)
|
||||||
|
- Qdrant/Chroma (Long-Term Vektor-Store)
|
||||||
|
- NetworkX/Neo4j (Entity Graph)
|
||||||
|
- Hermes-native Integration (Cronjobs, Skills)
|
||||||
|
|
||||||
|
### Nutzer-Präferenzen (Flo)
|
||||||
|
- **Sprache**: Deutsch für alle automatisierten Ausgaben
|
||||||
|
- **Formatierung**: Kompakte Tabellen mit `│`-Trennern, fette Headers, keine Bullet-Points
|
||||||
|
- **Kommunikation**: Sachlich, emotionsfrei, direkt, kompakt, ergebnisorientiert
|
||||||
|
- **Workflow**: Read COMPLETELY mit `read_file`, collaborative, fragt nach Ideen
|
||||||
|
- **ECC**: affaan-m/ECC für ALLE Projekte
|
||||||
|
|
||||||
|
## Sicherheit
|
||||||
|
- Keine privaten Daten exfiltrieren
|
||||||
|
- Keine destruktiven Befehle ohne Rückfrage
|
||||||
|
- `trash` > `rm`
|
||||||
|
|
||||||
|
## Extern vs Intern
|
||||||
|
- **Frei**: Lesen, explorieren, organisieren, lernen
|
||||||
|
- **Rückfrage**: Emails, Posts, alles was die Maschine verlässt
|
||||||
|
|
||||||
|
## Memory
|
||||||
|
- Tägliche Notizen: `memory/YYYY-MM-DD.md`
|
||||||
|
- Langfristig: `MEMORY.md` (nur in Main Session)
|
||||||
|
- Text > Brain — alles aufschreiben
|
||||||
|
|
||||||
|
## Coding Workflow
|
||||||
|
1. `CODING.md` lesen (ECC Standards)
|
||||||
|
2. Success-Kriterien definieren
|
||||||
|
3. Annahmen formulieren
|
||||||
|
4. Plan mit Verifikation
|
||||||
|
5. Simplicity First, Surgical Changes, Verify each step
|
||||||
|
6. Diff review, Cleanup, Document
|
||||||
|
|
||||||
|
## Tools
|
||||||
|
- Skills sind die primären Werkzeuge
|
||||||
|
- Lokale Notizen in `TOOLS.md`
|
||||||
|
- `sag` (ElevenLabs TTS) für Voice Storytelling
|
||||||
|
|
||||||
|
## Heartbeats
|
||||||
|
- `HEARTBEAT.md` lesen, wenn vorhanden
|
||||||
|
- Produktive Checks: Email, Calendar, Weather
|
||||||
|
- Proaktive Arbeit ohne Rückfrage: Memory-Dateien organisieren, Projekte checken
|
||||||
|
|
||||||
|
## Make It Yours
|
||||||
|
- Füge eigene Konventionen, Stil und Regeln hinzu
|
||||||
|
- Was funktioniert, wird behalten
|
||||||
|
- Was nicht funktioniert, wird angepasst
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
# Hermes Memory Next Level
|
||||||
|
|
||||||
|
> Lösung für Context Rot und Agent Memory bei Hermes Agent. Von manuellem Key-Value zu strukturiertem, hierarchischem, automatischem Memory.
|
||||||
|
|
||||||
|
## Problem
|
||||||
|
|
||||||
|
Hermes verliert nach Context-Compression oder Session-Wechsel wichtigen Zustand:
|
||||||
|
- Tool-Konfigurationen werden zu "Docker wurde erwähnt"
|
||||||
|
- Projekt-Zustände zu "Wir haben an Auth gearbeitet"
|
||||||
|
- Präferenzen verschwinden komplett
|
||||||
|
- Nutzer muss dieselben Dinge immer wieder erklären
|
||||||
|
|
||||||
|
## Vision
|
||||||
|
|
||||||
|
Memory wird von **manuell** und **flach** zu **automatisch** und **strukturiert**:
|
||||||
|
- Auto-Extraktion aus jeder Session
|
||||||
|
- Typisierte Memory-Blöcke mit Entity-Linking
|
||||||
|
- Multi-Tier: Working → Short-Term → Long-Term
|
||||||
|
- Session-Start Injection: Relevanter Kontext wird automatisch geladen
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
| Phase | Status | Ziel |
|
||||||
|
|-------|--------|------|
|
||||||
|
| P0 Auto-Extraction | 🔄 In Planung | Cronjob extrahiert Fakten aus Sessions |
|
||||||
|
| P0 Structured Blocks | 🔄 In Planung | Erweitertes `memory` Tool mit Typen |
|
||||||
|
| P1 Entity-Linking | ⏳ Pending | Graph: Projekte, Dateien, Personen verknüpfen |
|
||||||
|
| P1 Temporal Memory | ⏳ Pending | "Was war der letzte Stand von X?" |
|
||||||
|
| P1 Multi-Tier | ⏳ Pending | SQLite + Vektor-Store |
|
||||||
|
| P2 Self-Management | ⏳ Pending | Agent speichert selbst |
|
||||||
|
| P2 Session Injection | ⏳ Pending | Automatisches Laden beim Start |
|
||||||
|
|
||||||
|
## Architektur
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────────┐
|
||||||
|
│ TIER 1: WORKING MEMORY (Aktiver Prompt) │
|
||||||
|
│ • Aktuelle Nachrichten + relevante Kontext │
|
||||||
|
│ • 4K–128K Tokens (je nach Modell) │
|
||||||
|
│ • Schnellster Zugriff, höchste Relevanz │
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ TIER 2: SHORT-TERM MEMORY (Letzte N Sessions) │
|
||||||
|
│ • Vollständige Nachrichten der letzten 5–10 Sessions │
|
||||||
|
│ • SQLite/JSON, schneller Zugriff │
|
||||||
|
│ • Für Rückfragen zu kürzlich abgeschlossenen Tasks │
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ TIER 3: LONG-TERM MEMORY (Vektor-Store + Graph) │
|
||||||
|
│ • Embeddings für semantische Suche │
|
||||||
|
│ • Knowledge Graph für Beziehungen │
|
||||||
|
│ • Fakten, Präferenzen, Projekt-Zustände │
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ TIER 4: ARCHIVE (Vollständige Historie) │
|
||||||
|
│ • Alle Sessions, alle Nachrichten │
|
||||||
|
│ • Nur bei Bedarf durchsucht (langsame Suche) │
|
||||||
|
│ • Compliance, Audit, vollständige Rekonstruktion │
|
||||||
|
└─────────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## Memory-Block-Schema
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
memory_block:
|
||||||
|
id: "uuid"
|
||||||
|
type: "user_preference" | "project_state" | "learned_pattern" | "entity_relationship" | "procedural"
|
||||||
|
category: "formatting" | "workflow" | "tech_stack" | "contact" | "project" | "skill"
|
||||||
|
key: "table_style"
|
||||||
|
value: "compact with │ separators"
|
||||||
|
source: "session_2026-06-03"
|
||||||
|
confidence: 0.95
|
||||||
|
entities: ["Flo", "waldseilgarten-crm"]
|
||||||
|
created_at: "2026-06-03T14:30:00Z"
|
||||||
|
updated_at: "2026-06-03T14:30:00Z"
|
||||||
|
access_count: 1
|
||||||
|
last_accessed: "2026-06-03T14:30:00Z"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Projektstruktur
|
||||||
|
|
||||||
|
```
|
||||||
|
hermes-memory-next-level/
|
||||||
|
├── AGENTS.md # Agent-Context (wer ist der Agent, was soll er wissen)
|
||||||
|
├── README.md # Diese Datei
|
||||||
|
├── .env.example # Umgebungsvariablen
|
||||||
|
├── docs/
|
||||||
|
│ ├── research/
|
||||||
|
│ │ └── agent-memory-solutions-2026.md
|
||||||
|
│ ├── architecture/
|
||||||
|
│ │ └── memory-tiers.md
|
||||||
|
│ └── decisions/
|
||||||
|
│ └── ADR-001-structured-memory-blocks.md
|
||||||
|
├── src/
|
||||||
|
│ ├── extraction/ # Auto-Extraction aus Sessions
|
||||||
|
│ ├── storage/ # Memory-Tier-Implementierungen
|
||||||
|
│ ├── graph/ # Entity-Linking Graph
|
||||||
|
│ ├── injection/ # Session-Start Injection
|
||||||
|
│ └── api/ # REST API für Memory-Operationen
|
||||||
|
├── tests/
|
||||||
|
│ ├── unit/
|
||||||
|
│ └── integration/
|
||||||
|
├── scripts/
|
||||||
|
│ └── setup.sh # Setup-Script
|
||||||
|
└── docker-compose.yml # Für lokale Entwicklung (SQLite, Qdrant, etc.)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Remote
|
||||||
|
|
||||||
|
- **Gitea**: `ssh://git@gitea.insight-it.de:2222/b0rbor4d/Hermes-Memory-Next-Level.git`
|
||||||
|
- **SSH-Key**: `id_ed25519` (lokal vorhanden, muss in Gitea hinterlegt werden)
|
||||||
|
|
||||||
|
## Mitwirkung
|
||||||
|
|
||||||
|
ECC-Standards gelten. Siehe `AGENTS.md` und `CODING.md` (wenn vorhanden).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Projekt gestartet: Juni 2026*
|
||||||
|
*Ziel: Context Rot eliminieren, Hermes Memory auf Next-Level bringen*
|
||||||
@@ -0,0 +1,166 @@
|
|||||||
|
# Memory Tiers Architecture
|
||||||
|
|
||||||
|
## Übersicht
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────────┐
|
||||||
|
│ TIER 1: WORKING MEMORY (Aktiver Prompt) │
|
||||||
|
│ • Aktuelle Nachrichten + relevante Kontext │
|
||||||
|
│ • 4K–128K Tokens (je nach Modell) │
|
||||||
|
│ • Schnellster Zugriff, höchste Relevanz │
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ TIER 2: SHORT-TERM MEMORY (Letzte N Sessions) │
|
||||||
|
│ • Vollständige Nachrichten der letzten 5–10 Sessions │
|
||||||
|
│ • SQLite/JSON, schneller Zugriff │
|
||||||
|
│ • Für Rückfragen zu kürzlich abgeschlossenen Tasks │
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ TIER 3: LONG-TERM MEMORY (Vektor-Store + Graph) │
|
||||||
|
│ • Embeddings für semantische Suche │
|
||||||
|
│ • Knowledge Graph für Beziehungen │
|
||||||
|
│ • Fakten, Präferenzen, Projekt-Zustände │
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ TIER 4: ARCHIVE (Vollständige Historie) │
|
||||||
|
│ • Alle Sessions, alle Nachrichten │
|
||||||
|
│ • Nur bei Bedarf durchsucht (langsame Suche) │
|
||||||
|
│ • Compliance, Audit, vollständige Rekonstruktion │
|
||||||
|
└─────────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tier 1: Working Memory
|
||||||
|
|
||||||
|
**Speicher**: LLM Prompt (nicht persistent)
|
||||||
|
**Zugriff**: Synchron, < 1ms
|
||||||
|
**Inhalt**: Aktuelle Nachrichten + relevante Kontext aus Tier 2/3
|
||||||
|
**Größe**: 4K–128K Tokens (je nach Modell)
|
||||||
|
**Lifecycle**: Session-bound, flüchtig
|
||||||
|
|
||||||
|
**Injection-Pattern**:
|
||||||
|
```
|
||||||
|
System Prompt
|
||||||
|
├── Base Instructions
|
||||||
|
├── Injected Memories (relevante Blocks aus Tier 2/3)
|
||||||
|
├── Current Session Context
|
||||||
|
└── User Message
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tier 2: Short-Term Memory
|
||||||
|
|
||||||
|
**Speicher**: SQLite (`memory.db`)
|
||||||
|
**Zugriff**: Synchron, ~1-5ms
|
||||||
|
**Inhalt**: Letzte 5–10 Sessions, vollständige Nachrichten
|
||||||
|
**Größe**: ~10-50 MB
|
||||||
|
**Lifecycle**: 30 Tage, dann Archivierung oder Löschung
|
||||||
|
|
||||||
|
**Schema**:
|
||||||
|
```sql
|
||||||
|
CREATE TABLE short_term_sessions (
|
||||||
|
id TEXT PRIMARY KEY,
|
||||||
|
session_id TEXT NOT NULL,
|
||||||
|
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
messages JSON NOT NULL,
|
||||||
|
summary TEXT,
|
||||||
|
extracted_blocks JSON
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX idx_sessions_time ON short_term_sessions(timestamp);
|
||||||
|
CREATE INDEX idx_sessions_session ON short_term_sessions(session_id);
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tier 3: Long-Term Memory
|
||||||
|
|
||||||
|
**Speicher**: Qdrant (Vektor) + NetworkX (Graph)
|
||||||
|
**Zugriff**: Asynchron, ~10-50ms
|
||||||
|
**Inhalt**: Memory Blocks, Entities, Beziehungen
|
||||||
|
**Größe**: Unbegrenzt (skalierbar)
|
||||||
|
**Lifecycle**: Permanent
|
||||||
|
|
||||||
|
**Vektor-Store (Qdrant)**:
|
||||||
|
```python
|
||||||
|
# Memory Blocks als Embeddings
|
||||||
|
{
|
||||||
|
"id": "uuid",
|
||||||
|
"vector": [0.1, 0.2, ...], # 768-dim embedding
|
||||||
|
"payload": {
|
||||||
|
"type": "user_preference",
|
||||||
|
"category": "formatting",
|
||||||
|
"key": "table_style",
|
||||||
|
"value": "compact with │ separators",
|
||||||
|
"entities": ["Flo"],
|
||||||
|
"confidence": 0.95
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Knowledge Graph (NetworkX)**:
|
||||||
|
```python
|
||||||
|
# Entities als Nodes, Beziehungen als Edges
|
||||||
|
G.add_node("Flo", type="user", properties={...})
|
||||||
|
G.add_node("waldseilgarten-crm", type="project", properties={...})
|
||||||
|
G.add_edge("Flo", "waldseilgarten-crm", relation="works_on")
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tier 4: Archive
|
||||||
|
|
||||||
|
**Speicher**: Dateisystem (komprimierte JSONL)
|
||||||
|
**Zugriff**: Asynchron, ~100ms-1s
|
||||||
|
**Inhalt**: Alle Sessions, alle Nachrichten
|
||||||
|
**Größe**: Unbegrenzt
|
||||||
|
**Lifecycle**: Permanent, komprimiert
|
||||||
|
|
||||||
|
**Format**:
|
||||||
|
```jsonl
|
||||||
|
{"session_id": "...", "date": "2026-06-03", "messages": [...], "compressed": true}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Zugriffsmuster
|
||||||
|
|
||||||
|
```
|
||||||
|
User fragt: "Was war der letzte Stand vom Waldseilgarten-Projekt?"
|
||||||
|
|
||||||
|
1. Tier 1 (Working): Prüfe aktuellen Kontext
|
||||||
|
→ Nicht vorhanden (neue Session)
|
||||||
|
|
||||||
|
2. Tier 2 (Short-Term): Suche in letzten 5 Sessions
|
||||||
|
→ Session vom 3.6.2026 gefunden, aber nur Summary
|
||||||
|
|
||||||
|
3. Tier 3 (Long-Term): Vektor-Suche + Graph-Traversal
|
||||||
|
→ Memory Block: "Projekt-State: waldseilgarten-crm"
|
||||||
|
→ Graph: Flo → works_on → waldseilgarten-crm
|
||||||
|
→ Related: docker-compose.yml, NestJS, React
|
||||||
|
|
||||||
|
4. Tier 4 (Archive): Vollständige Session laden
|
||||||
|
→ Nur bei Bedarf, wenn Details fehlen
|
||||||
|
|
||||||
|
5. Injection: Relevante Blocks in Working Memory laden
|
||||||
|
→ System Prompt wird angereichert
|
||||||
|
```
|
||||||
|
|
||||||
|
## Migration
|
||||||
|
|
||||||
|
```
|
||||||
|
Phase 1: Tier 2 (SQLite) — Sofort
|
||||||
|
→ Short-Term Memory für letzte Sessions
|
||||||
|
|
||||||
|
Phase 2: Tier 3 (Vektor + Graph) — 1-2 Monate
|
||||||
|
→ Memory Blocks aus bestehenden `memory` Einträgen
|
||||||
|
→ Auto-Extraction startet
|
||||||
|
|
||||||
|
Phase 3: Tier 1 (Injection) — 2-3 Monate
|
||||||
|
→ Session-Start automatisch mit relevanten Memories
|
||||||
|
|
||||||
|
Phase 4: Tier 4 (Archive) — 3-6 Monate
|
||||||
|
→ Vollständige Historie, komprimiert
|
||||||
|
```
|
||||||
|
|
||||||
|
## Technologie-Stack
|
||||||
|
|
||||||
|
| Tier | Technologie | Begründung |
|
||||||
|
|------|-------------|------------|
|
||||||
|
| Tier 1 | LLM Prompt | Nativ, kein Overhead |
|
||||||
|
| Tier 2 | SQLite | Einfach, schnell, kein extra Service |
|
||||||
|
| Tier 3 | Qdrant + NetworkX | Open Source, lokal hostbar, Python-native |
|
||||||
|
| Tier 4 | JSONL + gzip | Einfach, komprimierbar, durchsuchbar |
|
||||||
|
|
||||||
|
## Datum
|
||||||
|
|
||||||
|
2026-06-03
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
# ADR-001: Structured Memory Blocks
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
Accepted
|
||||||
|
|
||||||
|
## Kontext
|
||||||
|
|
||||||
|
Hermes Memory ist aktuell flaches Key-Value. Der Nutzer speichert manuell:
|
||||||
|
```
|
||||||
|
memory: "User prefers tables with │ separators"
|
||||||
|
```
|
||||||
|
|
||||||
|
Das Problem:
|
||||||
|
- Keine Typisierung (ist das eine Präferenz, ein Fakt, ein Projekt-State?)
|
||||||
|
- Keine Verknüpfung (welches Projekt? welche Person?)
|
||||||
|
- Keine Temporalität (wann gespeichert? wann zuletzt genutzt?)
|
||||||
|
- Keine Confidence (wie sicher ist die Extraktion?)
|
||||||
|
- Keine automatische Extraktion (Nutzer muss manuell speichern)
|
||||||
|
|
||||||
|
## Entscheidung
|
||||||
|
|
||||||
|
Wir führen **Structured Memory Blocks** ein:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
memory_block:
|
||||||
|
id: "uuid"
|
||||||
|
type: "user_preference" | "project_state" | "learned_pattern" | "entity_relationship" | "procedural"
|
||||||
|
category: "formatting" | "workflow" | "tech_stack" | "contact" | "project" | "skill"
|
||||||
|
key: "table_style"
|
||||||
|
value: "compact with │ separators"
|
||||||
|
source: "session_2026-06-03"
|
||||||
|
confidence: 0.95
|
||||||
|
entities: ["Flo", "waldseilgarten-crm"]
|
||||||
|
created_at: "2026-06-03T14:30:00Z"
|
||||||
|
updated_at: "2026-06-03T14:30:00Z"
|
||||||
|
access_count: 1
|
||||||
|
last_accessed: "2026-06-03T14:30:00Z"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Konsequenzen
|
||||||
|
|
||||||
|
### Positiv
|
||||||
|
- Typisierung ermöglicht gezieltes Retrieval ("gib mir alle Präferenzen des Users")
|
||||||
|
- Entity-Linking ermöglicht Kontext-Navigation ("was wissen wir über Projekt X?")
|
||||||
|
- Temporalität ermöglicht "letzter Stand"-Abfragen
|
||||||
|
- Confidence ermöglicht Filterung nach Qualität
|
||||||
|
- Auto-Extraction kann strukturiert speichern
|
||||||
|
|
||||||
|
### Negativ
|
||||||
|
- Komplexer als Key-Value
|
||||||
|
- Migration bestehender Memories nötig
|
||||||
|
- Mehr Speicherplatz pro Memory
|
||||||
|
|
||||||
|
## Alternative
|
||||||
|
|
||||||
|
Key-Value beibehalten + Tags hinzufügen:
|
||||||
|
```
|
||||||
|
memory: "User prefers tables with │ separators"
|
||||||
|
tags: ["user_preference", "formatting", "Flo"]
|
||||||
|
```
|
||||||
|
|
||||||
|
Abgelehnt: Tags sind nicht strukturiert genug für Entity-Linking und Temporalität.
|
||||||
|
|
||||||
|
## Implementierung
|
||||||
|
|
||||||
|
1. SQLite-Schema für Memory Blocks
|
||||||
|
2. Migration bestehender `memory` Einträge
|
||||||
|
3. Erweitertes `memory` Tool in Hermes
|
||||||
|
4. Auto-Extraction produziert Blocks statt Strings
|
||||||
|
|
||||||
|
## Datum
|
||||||
|
|
||||||
|
2026-06-03
|
||||||
@@ -0,0 +1,337 @@
|
|||||||
|
# Deep Research: Agent Memory & Context Rot Solutions (2026)
|
||||||
|
|
||||||
|
## Executive Summary
|
||||||
|
|
||||||
|
LLM-basierte Agenten verlieren ihren Zustand bei Context-Compression, weil Token-Limits durch verlustbehaftete Summarization oder naive Truncation "gelöst" werden. Die Lösung ist kein größeres Kontextfenster, sondern **hierarchisches, strukturiertes Memory-Management** über mehrere Tiers — von Working Memory (aktiver Prompt) bis Long-Term Memory (Vektor-Store + Knowledge Graph). Projekte wie **Letta** (OS-ähnliches Memory), **Mem0** (Multi-Level Personal Memory), und **Zep** (asynchrone Long-Term Context) adressieren das Problem aktiv. Für Hermes Agent bedeutet das: Memory muss von flachem Key-Value zu strukturierten, gelabelten Blöcken mit Entity-Linking und temporaler Abfrage werden.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Context Rot: Warum Agenten ihren Zustand verlieren
|
||||||
|
|
||||||
|
### Technische Ursachen
|
||||||
|
|
||||||
|
| Mechanismus | Beschreibung | Auswirkung |
|
||||||
|
|------------|-------------|------------|
|
||||||
|
| **Token-Limits** | Jedes LLM hat festes Kontextfenster (4K–2M Tokens) | Ältere Nachrichten müssen entfernt werden |
|
||||||
|
| **Naive Truncation** | Einfaches Abschneiden alter Nachrichten | Kompletter Verlust aller Informationen vor dem Cutoff |
|
||||||
|
| **Summarization** | KI-generierte Zusammenfassung bei ~90% Auslastung | Verlust von Details, Nuancen, implizitem Zustand |
|
||||||
|
| **Sliding Window** | FIFO-Buffer, alte Nachrichten fallen raus | Keine Persistenz, keine Rückwärtsnavigation |
|
||||||
|
| **Session Reset** | Neue Session = leerer Kontext | Totaler Zustandsverlust ohne Memory-Injection |
|
||||||
|
|
||||||
|
### Warum Summarization zerstört
|
||||||
|
|
||||||
|
Die meisten Frameworks (LangChain, etc.) ersetzen bei Erreichen eines Schwellenwerts (typisch 90% des Kontextfensters) die ältesten Nachrichten durch eine einzelne Zusammenfassung. Das Problem:
|
||||||
|
- **Verlust von Tool-Konfigurationen**: "Wir haben gerade Docker-Compose auf Port 8080 konfiguriert" → "Docker wurde erwähnt"
|
||||||
|
- **Verlust von Präferenzen**: "Nutzer hasst Bullet-Points, mag Tabellen mit │" → "Nutzer hat Formatierungspräferenzen"
|
||||||
|
- **Verlust von Projekt-Zustand**: "Wir arbeiten an Zeile 47 in auth.service.ts" → "Es wurde an Authentifizierung gearbeitet"
|
||||||
|
- **Halluzinationen**: Der Agent "ratet", was vorher passiert ist, anstatt es zu wissen
|
||||||
|
|
||||||
|
### Der Hermes-spezifische Schmerz
|
||||||
|
|
||||||
|
Hermes nutzt `session_search` für vergangene Sessions, aber:
|
||||||
|
- **Keine automatische Memory-Extraktion**: Wichtige Fakten werden nicht automatisch aus Sessions gezogen
|
||||||
|
- **Kein Entity-Linking**: "Projekt X" in Session A und "Projekt X" in Session B sind nicht verknüpft
|
||||||
|
- **Keine Temporalität**: "Was war der letzte Stand?" kann nicht beantwortet werden
|
||||||
|
- **Memory-Tool ist manuell**: Der Nutzer muss aktiv `memory` aufrufen, um etwas zu speichern
|
||||||
|
- **Keine hierarchische Struktur**: Alles ist flaches Key-Value, keine gelabelten Blöcke
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Memory-Architekturen für Agenten
|
||||||
|
|
||||||
|
### Memory-Typen (kognitive Psychologie)
|
||||||
|
|
||||||
|
| Typ | Beschreibung | Beispiel für Agent |
|
||||||
|
|-----|-------------|-------------------|
|
||||||
|
| **Episodic** | Konkrete Ereignisse/Episoden | "Session vom 3.6.2026: Wir haben den Kundenprozess für Waldseilgarten modelliert" |
|
||||||
|
| **Semantic** | Fakten, Konzepte, Beziehungen | "Nutzer bevorzugt Tabellen mit │-Trennern, kein SAP B1" |
|
||||||
|
| **Procedural** | Wie man Dinge tut | "Für ECC-Integration: erst CODING.md lesen, dann planen" |
|
||||||
|
| **Working** | Aktiver, kurzfristiger Kontext | "Wir sind gerade bei Zeile 47 in auth.service.ts" |
|
||||||
|
|
||||||
|
### Speicher-Mechanismen
|
||||||
|
|
||||||
|
| Mechanismus | Stärke | Schwäche | Beste für |
|
||||||
|
|------------|--------|----------|-----------|
|
||||||
|
| **Vector Stores** | Semantische Ähnlichkeitssuche | Keine strukturierten Beziehungen | Fakten, Dokumente, große Mengen |
|
||||||
|
| **Knowledge Graphs** | Strukturierte Beziehungen, Reasoning | Aufbau-Komplexität | Entitäten, Beziehungen, Projekte |
|
||||||
|
| **Structured Memory** | Typisierte Blöcke, Labels | Weniger flexibel als Vektor-Store | User-Prefs, Projekt-State, Skills |
|
||||||
|
| **Key-Value (current)** | Einfach, schnell | Keine Semantik, keine Verknüpfung | Einfache Fakten, kurze Notizen |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Projekte & Frameworks im Detail
|
||||||
|
|
||||||
|
### Letta (ehemals MemGPT) — OS-ähnliches Memory
|
||||||
|
|
||||||
|
| Aspekt | Details |
|
||||||
|
|--------|---------|
|
||||||
|
| **GitHub** | `letta-ai/letta` |
|
||||||
|
| **Kernidee** | Virtuelles Kontextfenster: Agent "denkt", er hat unendlichen Kontext, aber nur ein Subset ist im Prompt |
|
||||||
|
| **Memory Blocks** | Strukturierte, gelabelte Blöcke: `human`, `persona`, `project`, `preferences` |
|
||||||
|
| **Summarization** | Automatisch bei 90% Auslastung (`SUMMARIZATION_TRIGGER_MULTIPLIER = 0.9`) |
|
||||||
|
| **Passage Manager** | Alle Nachrichten persistent gespeichert, auch nach Summarization |
|
||||||
|
| **In-Context Messages** | Nur aktives Subset im Prompt, Rest aus DB geladen |
|
||||||
|
| **Self-Management** | Eigene Memory-Tools: `core_memory_append`, `core_memory_replace`, `core_memory_delete` |
|
||||||
|
| **Tool-Integration** | Agent kann selbst entscheiden, was wichtig ist und speichern |
|
||||||
|
|
||||||
|
**Relevanz für Hermes**: Letta zeigt, dass Memory nicht passiv sein darf. Der Agent muss aktiv sein eigenes Memory verwalten können — nicht nur der Nutzer.
|
||||||
|
|
||||||
|
### Mem0 — The Memory Layer for Personalized AI
|
||||||
|
|
||||||
|
| Aspekt | Details |
|
||||||
|
|--------|---------|
|
||||||
|
| **GitHub** | `mem0ai/mem0` |
|
||||||
|
| **Kernidee** | Multi-Level Memory für User, Session und Agent-State |
|
||||||
|
| **Neuer Algorithmus (Apr 2026)** | Single-pass ADD-only Extraction, Entity Linking, Multi-Signal Retrieval |
|
||||||
|
| **Retrieval** | Semantisch + BM25 + Entity Matching + Temporal Reasoning |
|
||||||
|
| **Benchmarks** | 91.6 auf LoCoMo, 94.8 auf LongMemEval |
|
||||||
|
| **Hybrid Search** | Kombination aus semantischer und Keyword-Suche |
|
||||||
|
| **API** | Einfache REST-API für Integration in bestehende Agenten |
|
||||||
|
|
||||||
|
**Relevanz für Hermes**: Mem0's Multi-Level-Approach passt perfekt zu Hermes' Profile-System. User-Memory + Session-Memory + Agent-State als separate Ebenen.
|
||||||
|
|
||||||
|
### Zep AI — Long-Term Context for AI Assistants
|
||||||
|
|
||||||
|
| Aspekt | Details |
|
||||||
|
|--------|---------|
|
||||||
|
| **GitHub** | `getzep/zep-python` |
|
||||||
|
| **Kernidee** | Asynchrone Memory-Verarbeitung, die den Chat nicht blockiert |
|
||||||
|
| **Auto-Summaries** | Generiert Zusammenfassungen aus Chat-Historie im Hintergrund |
|
||||||
|
| **Fact Extraction** | Extrahiert Fakten ohne vordefiniertes Schema |
|
||||||
|
| **Document Collections** | Vektor-Suche über Dokumente |
|
||||||
|
| **Prompt-Strukturierung** | Automatisches Hinzufügen von Recent Messages + Summary + Relevant Context |
|
||||||
|
|
||||||
|
**Relevanz für Hermes**: Zep's asynchrone Verarbeitung wäre ideal für Hermes' Cronjob-System — Memory-Extraktion im Hintergrund, nicht in der aktiven Session.
|
||||||
|
|
||||||
|
### LangChain Memory — Modularer Ansatz
|
||||||
|
|
||||||
|
| Memory-Typ | Funktion |
|
||||||
|
|------------|----------|
|
||||||
|
| `ConversationBufferMemory` | Speichert alle Nachrichten roh |
|
||||||
|
| `ConversationSummaryMemory` | Summarisiert bei Overflow |
|
||||||
|
| `VectorStoreRetrieverMemory` | RAG-basiertes Retrieval aus Vektor-Store |
|
||||||
|
| `CombinedMemory` | Kombiniert mehrere Memory-Typen |
|
||||||
|
|
||||||
|
**Relevanz für Hermes**: LangChain's modulares Design zeigt, dass Memory nicht entweder/oder sein muss. Mehrere Tiers gleichzeitig sind sinnvoll.
|
||||||
|
|
||||||
|
### AutoGPT — Historischer Pioneer
|
||||||
|
|
||||||
|
| Aspekt | Details |
|
||||||
|
|--------|---------|
|
||||||
|
| **GitHub** | `Significant-Gravitas/AutoGPT` |
|
||||||
|
| **Historisch** | Einer der ersten Agenten mit Memory-Ansatz (2023) |
|
||||||
|
| **Memory-Backends** | Lokale JSON, Redis, Pinecone, Weaviate |
|
||||||
|
| **Aktueller Fokus** | Platform/Forge statt klassisches Memory |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Praktische Ansätze & Patterns
|
||||||
|
|
||||||
|
### Memory-Tiers
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────────┐
|
||||||
|
│ TIER 1: WORKING MEMORY (Aktiver Prompt) │
|
||||||
|
│ • Aktuelle Nachrichten + relevante Kontext │
|
||||||
|
│ • 4K–128K Tokens (je nach Modell) │
|
||||||
|
│ • Schnellster Zugriff, höchste Relevanz │
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ TIER 2: SHORT-TERM MEMORY (Letzte N Sessions) │
|
||||||
|
│ • Vollständige Nachrichten der letzten 5–10 Sessions │
|
||||||
|
│ • SQLite/JSON, schneller Zugriff │
|
||||||
|
│ • Für Rückfragen zu kürzlich abgeschlossenen Tasks │
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ TIER 3: LONG-TERM MEMORY (Vektor-Store + Graph) │
|
||||||
|
│ • Embeddings für semantische Suche │
|
||||||
|
│ • Knowledge Graph für Beziehungen │
|
||||||
|
│ • Fakten, Präferenzen, Projekt-Zustände │
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ TIER 4: ARCHIVE (Vollständige Historie) │
|
||||||
|
│ • Alle Sessions, alle Nachrichten │
|
||||||
|
│ • Nur bei Bedarf durchsucht (langsame Suche) │
|
||||||
|
│ • Compliance, Audit, vollständige Rekonstruktion │
|
||||||
|
└─────────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### Hierarchical Memory
|
||||||
|
|
||||||
|
- **Session-Ebene**: Volle Nachrichten, aktueller Zustand
|
||||||
|
- **Tages-Ebene**: Zusammenfassung der Sessions eines Tages
|
||||||
|
- **Wochen-Ebene**: Zusammenfassung der Projekte einer Woche
|
||||||
|
- **Monats-Ebene**: Langfristige Trends, gelernte Präferenzen
|
||||||
|
|
||||||
|
### Checkpoint/Restore
|
||||||
|
|
||||||
|
- Agent-State wird nach jedem signifikanten Schritt persistiert
|
||||||
|
- Bei Context-Overflow oder Fehler: Restore auf letzten Checkpoint
|
||||||
|
- Hermes-Analogon: `session_search` + Memory-Tool, aber automatisch
|
||||||
|
|
||||||
|
### Session Bridging
|
||||||
|
|
||||||
|
- Beim Start neuer Session: Relevante Memories aus vorherigen Sessions laden
|
||||||
|
- "Memory Injection": System-Prompt wird mit relevantem Kontext angereichert
|
||||||
|
- Hermes-Analogon: Aktuell manuell über `memory` tool, nicht automatisch
|
||||||
|
|
||||||
|
### Memory Injection Patterns
|
||||||
|
|
||||||
|
| Pattern | Beschreibung | Wann nutzen |
|
||||||
|
|---------|-------------|-------------|
|
||||||
|
| **RAG-Style** | Retrieve relevante Memories → Inject in Prompt | Große Memory-Mengen, semantische Suche |
|
||||||
|
| **Structured Blocks** | Typisierte Memory-Blöcke mit festen Labels | User-Prefs, Projekt-State, wiederkehrende Daten |
|
||||||
|
| **Self-Management** | Agent entscheidet selbst, was gespeichert/gelesen wird | Komplexe, langlebige Agenten |
|
||||||
|
| **Hybrid** | Kombination aus RAG + Structured + Self-Management | Produktions-Agenten (Letta, Mem0) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Hermes-spezifische Analyse & Empfehlungen
|
||||||
|
|
||||||
|
### Was Hermes bereits hat
|
||||||
|
|
||||||
|
| Feature | Status | Bewertung |
|
||||||
|
|---------|--------|-----------|
|
||||||
|
| `memory` Tool | ✅ Manuell | Nutzer muss aktiv speichern |
|
||||||
|
| `session_search` | ✅ FTS5-basiert | Gut für Discovery, schlecht für State |
|
||||||
|
| `skills` System | ✅ Wiederverwendbar | Prozedurales Memory, aber statisch |
|
||||||
|
| `profile` System | ✅ Isoliert | Keine Cross-Profile Memory-Sync |
|
||||||
|
| `cronjob` | ✅ Scheduler | Könnte Memory-Extraktion im Hintergrund machen |
|
||||||
|
| `MEMORY.md` | ✅ Manuell | Nutzer muss selbst kuratieren |
|
||||||
|
|
||||||
|
### Was Hermes braucht
|
||||||
|
|
||||||
|
| Priorität | Feature | Beschreibung | Umsetzung |
|
||||||
|
|-----------|---------|------------|-----------|
|
||||||
|
| **P0** | **Auto-Extraction** | Automatisches Extrahieren von Fakten aus Sessions | Cronjob nach jeder Session |
|
||||||
|
| **P0** | **Structured Blocks** | Gelabelte Memory-Blöcke statt flaches Key-Value | `memory` Tool erweitern |
|
||||||
|
| **P1** | **Entity Linking** | Verknüpfung von Memories über Entitäten | Projekt-Namen, Personen, Konzepte |
|
||||||
|
| **P1** | **Temporal Memory** | Zeitbewusstes Retrieval | "Was war der letzte Stand von X?" |
|
||||||
|
| **P1** | **Multi-Tier** | Unterschiedliche Speicher-Ebenen | Working → Short-Term → Long-Term |
|
||||||
|
| **P2** | **Self-Management** | Agent kann selbst Memory verwalten | Memory-Tools für Agenten |
|
||||||
|
| **P2** | **Summarization-Persistenz** | Zusammenfassungen bei Compression speichern | Nicht verwerfen, sondern archivieren |
|
||||||
|
|
||||||
|
### Konkrete Umsetzungsvorschläge für Hermes
|
||||||
|
|
||||||
|
#### 1. Memory-Block-Schema (erweitertes `memory` Tool)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# Statt:
|
||||||
|
memory: "User prefers tables with │ separators"
|
||||||
|
|
||||||
|
# Besser:
|
||||||
|
memory_block:
|
||||||
|
type: "user_preference"
|
||||||
|
category: "formatting"
|
||||||
|
key: "table_style"
|
||||||
|
value: "compact with │ separators"
|
||||||
|
source: "session_2026-06-03"
|
||||||
|
confidence: 0.95
|
||||||
|
entities: ["Flo"]
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. Auto-Extraction Cronjob
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# Nach jeder Session:
|
||||||
|
cronjob:
|
||||||
|
schedule: "after_session_end"
|
||||||
|
action: "extract_memories"
|
||||||
|
# Extrahiert automatisch:
|
||||||
|
# - User preferences (Formatierung, Workflow)
|
||||||
|
# - Project state (aktuelle Dateien, offene Tasks)
|
||||||
|
# - Learned patterns (was hat funktioniert, was nicht)
|
||||||
|
# - Entity relationships (Projekt X → Datei Y → Config Z)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3. Entity-Linking Graph
|
||||||
|
|
||||||
|
```
|
||||||
|
[User: Flo] --prefers--> [Format: Tables with │]
|
||||||
|
[User: Flo] --works_on--> [Project: waldseilgarten-crm]
|
||||||
|
[Project: waldseilgarten-crm] --has_file--> [File: docker-compose.yml]
|
||||||
|
[Project: waldseilgarten-crm] --uses--> [Tech: NestJS + React]
|
||||||
|
[Session: 2026-06-03] --discussed--> [Topic: Kundenprozess]
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4. Session-Start Memory-Injection
|
||||||
|
|
||||||
|
```
|
||||||
|
# Bevor die Session startet:
|
||||||
|
1. Suche relevante Memories für aktuellen Kontext
|
||||||
|
2. Lade Project-State (letzter Stand)
|
||||||
|
3. Lade User-Preferences (Formatierung, Workflow)
|
||||||
|
4. Lade offene Tasks / TODOs
|
||||||
|
5. Injected in System-Prompt
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Vergleich: Bestehende Lösungen
|
||||||
|
|
||||||
|
| Projekt | Memory-Typ | Self-Mgmt | Multi-Tier | Entity-Linking | Temporal | Integration | Open Source |
|
||||||
|
|---------|-----------|-----------|------------|----------------|----------|-------------|-------------|
|
||||||
|
| **Letta** | Structured Blocks | ✅ | ✅ | ✅ | ✅ | Python SDK | ✅ |
|
||||||
|
| **Mem0** | Multi-Level | ❌ | ✅ | ✅ | ✅ | REST API | ✅ |
|
||||||
|
| **Zep** | Async + Facts | ❌ | ✅ | ✅ | ✅ | Python/JS SDK | ✅ |
|
||||||
|
| **LangChain** | Modular | ❌ | ✅ | ❌ | ❌ | Python/JS | ✅ |
|
||||||
|
| **AutoGPT** | Configurable | ❌ | ❌ | ❌ | ❌ | Python | ✅ |
|
||||||
|
| **Hermes (current)** | Key-Value | ❌ | ❌ | ❌ | ❌ | Built-in | ✅ |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Empfehlungen für Hermes
|
||||||
|
|
||||||
|
### Kurzfristig (1–2 Wochen)
|
||||||
|
|
||||||
|
1. **Memory-Blocks erweitern**: `memory` Tool um `type`, `category`, `entities` erweitern
|
||||||
|
2. **Auto-Extraction-Prototype**: Cronjob, der nach Sessions automatisch Fakten extrahiert (basierend auf `session_search` + LLM-Summarization)
|
||||||
|
3. **Project-State-Memory**: Automatisches Speichern von aktuellem Projekt, offenen Dateien, letzten Änderungen
|
||||||
|
|
||||||
|
### Mittelfristig (1–2 Monate)
|
||||||
|
|
||||||
|
1. **Entity-Linking**: Einfacher Graph, der Projekte, Dateien, Personen, Konzepte verknüpft
|
||||||
|
2. **Multi-Tier Memory**: SQLite für Short-Term, Vektor-Store (Chroma/Qdrant) für Long-Term
|
||||||
|
3. **Session-Start Injection**: Automatisches Laden relevanter Memories beim Session-Start
|
||||||
|
|
||||||
|
### Langfristig (3–6 Monate)
|
||||||
|
|
||||||
|
1. **Self-Management**: Agent kann selbst entscheiden, was wichtig ist
|
||||||
|
2. **Hierarchical Summarization**: Tages-/Wochen-/Monats-Zusammenfassungen
|
||||||
|
3. **Cross-Profile Memory**: Geteilte Fakten über Profile hinweg (User-Prefs bleiben gleich)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Quellen & Referenzen
|
||||||
|
|
||||||
|
### Primärquellen (GitHub)
|
||||||
|
|
||||||
|
| Projekt | URL | Analysierte Dateien |
|
||||||
|
|---------|-----|---------------------|
|
||||||
|
| **Letta** | `https://github.com/letta-ai/letta` | `letta/agent.py`, `letta/memory.py`, `letta/system.py`, `letta/persistence_manager.py` |
|
||||||
|
| **Mem0** | `https://github.com/mem0ai/mem0` | `mem0/memory/main.py`, `mem0/configs/base.py`, `mem0/utils/main.py` |
|
||||||
|
| **Zep** | `https://github.com/getzep/zep-python` | `zep_python/client.py`, `zep_python/memory.py` |
|
||||||
|
| **AutoGPT** | `https://github.com/Significant-Gravitas/AutoGPT` | `autogpt/memory/` |
|
||||||
|
| **LangChain** | `https://github.com/langchain-ai/langchain` | `langchain/memory/` |
|
||||||
|
|
||||||
|
### Dokumentation
|
||||||
|
|
||||||
|
- Letta Docs: `https://docs.letta.com/` — Memory Blocks, System Prompts, Tool Integration
|
||||||
|
- Mem0 Docs: `https://docs.mem0.ai/` — Memory Layer, Multi-Level Architecture, API Reference
|
||||||
|
- Zep Docs: `https://docs.getzep.com/` — Long-Term Memory, Fact Extraction, Async Processing
|
||||||
|
- LangChain Memory: `https://python.langchain.com/docs/modules/memory/` — Buffer, Summary, Vector Store
|
||||||
|
|
||||||
|
### Papers & Benchmarks
|
||||||
|
|
||||||
|
- LoCoMo Benchmark: Long-Context Memory Evaluation
|
||||||
|
- LongMemEval: Long-term Memory Evaluation for Conversational Agents
|
||||||
|
- Mem0 Benchmarks (Apr 2026): 91.6 LoCoMo, 94.8 LongMemEval
|
||||||
|
|
||||||
|
### Hermes-Intern
|
||||||
|
|
||||||
|
- `memory` Tool: `~/.hermes/memory/` (user + memory stores)
|
||||||
|
- `session_search`: SQLite FTS5 in `~/.hermes/sessions.db`
|
||||||
|
- `skills`: `~/.hermes/skills/` (prozedurales Memory)
|
||||||
|
- `cronjob`: `~/.hermes/cron/` (Scheduler für Background-Tasks)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Recherche durchgeführt: Juni 2026*
|
||||||
|
*SearXNG war für API-Anfragen nicht verfügbar (403 Forbidden), daher primär über direkte GitHub-Source-Analyse*
|
||||||
Reference in New Issue
Block a user