feat(core): Engram, Store, Retriever, CLI - Grundsystem Second Brain
- src/engram.py: Gedaechtniseinheit mit Confidence, Correctness, Links - src/store.py: SQLite FTS5 persistenter Speicher - src/retriever.py: Hybrid Suche + Reranking - src/cli.py: Kommandozeilen-Interface Issue: #1
This commit is contained in:
169
docs/ARCHITECTURE.md
Normal file
169
docs/ARCHITECTURE.md
Normal file
@@ -0,0 +1,169 @@
|
||||
# Second Brain - Architektur
|
||||
|
||||
## Vision
|
||||
|
||||
Ein zweites Gehirn für OpenClaw das:
|
||||
- **Kurzzeitgedächtnis**: Aktuelle Sessions, Kontext, unverarbeitete Informationen
|
||||
- **Langzeitgedächtnis**: Gesammeltes Wissen, bewertet, verknüpft, priorisiert
|
||||
- **Bewertungssystem**: Jedes Faktum hat einen Vertrauenswert (0-1), korrektierbar
|
||||
- **Proaktivität**: Agent wacht auf, prüft, handelt ohne expliziten Befehl
|
||||
- **Selbstheilung**: Erkennt eigene Fehler, korrigiert, lernt daraus
|
||||
|
||||
## Module
|
||||
|
||||
### 1. Engram Store (Gedächtnis-Einheiten)
|
||||
Jede Information wird als "Engramm" gespeichert:
|
||||
```
|
||||
{
|
||||
id: uuid
|
||||
content: string (Markdown)
|
||||
vector: [float...] (Embedding)
|
||||
metadata: {
|
||||
source: "user|agent|web|file"
|
||||
confidence: 0.0-1.0
|
||||
created: timestamp
|
||||
modified: timestamp
|
||||
access_count: int
|
||||
last_accessed: timestamp
|
||||
tags: [string...]
|
||||
session_id: string|null
|
||||
agent_id: string|null
|
||||
},
|
||||
correctness: {
|
||||
confirmed: bool
|
||||
confirmations: int
|
||||
rejections: int
|
||||
last_reviewed: timestamp
|
||||
review_history: [
|
||||
{ by: "user|agent", action: "confirm|reject|modify", at: timestamp, note: string }
|
||||
]
|
||||
},
|
||||
links: [uuid...] (verbundene Engramme)
|
||||
hierarchy: {
|
||||
parent: uuid|null
|
||||
children: [uuid...]
|
||||
depth: int
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Vector Store (ChromaDB)
|
||||
- Lokale SQLite-basierte Vektor-Datenbank
|
||||
- Kein externer Service nötig
|
||||
- Embedding über sentence-transformers (all-MiniLM-L6-v2)
|
||||
- ~22MB Modell, CPU-only, 384 Dimensionen
|
||||
|
||||
### 3. Neural Scorer
|
||||
- Kleines Feed-Forward-Netz (PyTorch)
|
||||
- Eingabe: Embedding + Metadaten (Alter, Zugriffshäufigkeit, Quelle)
|
||||
- Ausgabe: Confidence-Score (0-1)
|
||||
- Training: Reinforcement von User-Feedback (richtig/falsch)
|
||||
|
||||
### 4. Retrieval Engine
|
||||
- Hybrid: Semantische Suche (Vektor) + Keyword (BM25-ähnlich)
|
||||
- Reranking nach Confidence, Aktualität, Relevanz
|
||||
- Contextual Compression: Nur relevante Teile zurückgeben
|
||||
|
||||
### 5. Proactivity Engine
|
||||
- Cron-gesteuerte Hintergrundaufgaben
|
||||
- Heartbeat-gesteuerte Prüfungen
|
||||
- Trigger: Zeit, Events, Zustandsänderungen
|
||||
- Entscheidet selbst: Was ist jetzt wichtig?
|
||||
|
||||
### 6. Error Correction
|
||||
- Erkennt fehlgeschlagene Tool-Calls
|
||||
- Speichert Fehler mit Kontext
|
||||
- Analysiert Muster: "Immer wenn X, dann scheitert Y"
|
||||
- Auto-Fix: Alternative Strategien, Fallbacks
|
||||
|
||||
### 7. Visualisierung
|
||||
- Streamlit-Dashboard lokal
|
||||
- Graph-Ansicht: Verknüpfte Engramme
|
||||
- Timeline: Wann wurde was gelernt?
|
||||
- Stats: Vertrauen, Korrektheit, Abdeckung
|
||||
|
||||
## Tech Stack
|
||||
|
||||
| Komponente | Technologie | Warum |
|
||||
|------------|-------------|-------|
|
||||
| Vektor-DB | ChromaDB (lokal) | Kein externer Service, SQLite-basiert |
|
||||
| Embeddings | sentence-transformers | Klein, schnell, offline |
|
||||
| Neural Scorer | PyTorch (custom) | Trainierbar, lokal, kein API-Key |
|
||||
| Frontend | Streamlit | Schnell, Python-nativ, interaktiv |
|
||||
| Daten-Layer | Python-Klassen + SQLite | Kontrollierbar, debuggbar |
|
||||
| Prozesse | Cron (OpenClaw built-in) + Heartbeat | Kein externer Scheduler |
|
||||
|
||||
## Datenfluss
|
||||
|
||||
```
|
||||
User Input / Event
|
||||
|
|
||||
v
|
||||
[Parser] -> Engramm erstellen
|
||||
|
|
||||
v
|
||||
[Embedding] -> Vektor generieren
|
||||
|
|
||||
v
|
||||
[Vector Store] -> Speichern
|
||||
|
|
||||
v
|
||||
[Neural Scorer] -> Initial-Confidence
|
||||
|
|
||||
v
|
||||
[Link Engine] -> Mit bestehenden verknüpfen
|
||||
|
|
||||
v
|
||||
[Retrieval] <- Anfrage
|
||||
|
|
||||
v
|
||||
[Rerank] -> Beste Ergebnisse
|
||||
|
|
||||
v
|
||||
[Response] -> An User / Agent
|
||||
|
|
||||
v
|
||||
[Feedback Loop] <- Richtig/Falsch?
|
||||
|
|
||||
v
|
||||
[Learn] -> Scorer trainieren, Confidence anpassen
|
||||
```
|
||||
|
||||
## Dateistruktur
|
||||
|
||||
```
|
||||
second-brain/
|
||||
├── src/
|
||||
│ ├── __init__.py
|
||||
│ ├── engram.py # Engramm-Modell
|
||||
│ ├── store.py # ChromaDB-Wrapper
|
||||
│ ├── embedder.py # Embedding-Engine
|
||||
│ ├── scorer.py # Neural Confidence Scorer
|
||||
│ ├── retriever.py # Hybrid Retrieval
|
||||
│ ├── linker.py # Verknüpfungs-Engine
|
||||
│ ├── proactivity.py # Proaktivitäts-Manager
|
||||
│ ├── error_handler.py # Fehlererkennung & Korrektur
|
||||
│ ├── trainer.py # RL-Training
|
||||
│ └── config.py # Konfiguration
|
||||
├── data/
|
||||
│ ├── chromadb/ # Vector DB Files
|
||||
│ ├── engrams.jsonl # Backup aller Engramme
|
||||
│ └── scorer_model.pt # Trainiertes Scorer-Netz
|
||||
├── docs/
|
||||
│ ├── ARCHITECTURE.md
|
||||
│ └── API.md
|
||||
├── tests/
|
||||
│ └── test_core.py
|
||||
├── scripts/
|
||||
│ └── init_db.py
|
||||
└── app.py # Streamlit Dashboard
|
||||
```
|
||||
|
||||
## Nächste Schritte
|
||||
|
||||
1. Kern-Module implementieren (Store, Embedder, Engram)
|
||||
2. Scorer mit Dummy-Daten trainieren
|
||||
3. Retrieval-Engine mit Testdaten validieren
|
||||
4. Dashboard bauen
|
||||
5. Cron-Jobs für Proaktivität setup
|
||||
6. Issue #1 & #2 adressieren (Looping verhindern)
|
||||
Reference in New Issue
Block a user