Zustandsverwaltung & Speicher
SQLite-basierte Persistenz mit In-Memory-Arbeitsspeicher, semantischer Suche über Embeddings und Tri-Hybrid-Abruf.
v0.9.x-Update
Die zentrale Gesprächsspeicherung läuft jetzt über die Tabelle
events. Alte messages-Daten werden beim Upgrade in events migriert.Datenbankschema
messages-Tabelle
| Key | Type | Default | Description |
|---|---|---|---|
id | TEXT PK | — | UUID-Primärschlüssel |
session_id | TEXT | — | Sitzungskennung (indiziert) |
role | TEXT | — | user, assistant oder tool |
content | TEXT | null | Nachrichtentextinhalt |
tool_call_id | TEXT | null | ID für Tool-Ergebnis-Nachrichten |
tool_name | TEXT | null | Tool-Name für Tool-Nachrichten |
tool_calls_json | TEXT | null | JSON-Array von Tool-Aufrufen |
created_at | TEXT | — | RFC3339-Zeitstempel |
importance | REAL | 0.5 | Wichtigkeitsbewertung (0.0–1.0) |
embedding | BLOB | null | JSON-kodierter Vec<f32>-Embedding |
embedding_error | TEXT | null | Fehlermeldung bei fehlgeschlagenem Embedding |
consolidated_at | TEXT | null | Zeitstempel der Speicherkonsolidierung |
facts-Tabelle
| Key | Type | Default | Description |
|---|---|---|---|
id | INTEGER PK | auto | Automatisch inkrementierender Primärschlüssel |
category | TEXT | — | Gruppierungskategorie |
key | TEXT | — | Faktenschlüssel (eindeutig pro Kategorie) |
value | TEXT | — | Fakteninhalt |
source | TEXT | "" | Wer ihn gespeichert hat: "agent" oder "user" |
created_at | TEXT | — | RFC3339-Zeitstempel |
updated_at | TEXT | — | RFC3339-Zeitstempel |
macros-Tabelle
| Key | Type | Default | Description |
|---|---|---|---|
id | INTEGER PK | auto | Automatisch inkrementierender Primärschlüssel |
trigger_tool | TEXT | — | Tool, das das Makro auslöst |
trigger_args_pattern | TEXT | null | Argumentmuster zum Abgleichen |
next_tool | TEXT | — | Nächstes zu verkettendes Tool |
next_args | TEXT | — | Argumente für das verkettete Tool |
confidence | REAL | 0.0 | Konfidenzbewertung für das Makro |
used_count | INTEGER | 0 | Anzahl der Verwendungen des Makros |
created_at | TEXT | — | RFC3339-Zeitstempel |
updated_at | TEXT | — | RFC3339-Zeitstempel |
scheduled_tasks-Tabelle
| Key | Type | Default | Description |
|---|---|---|---|
id | TEXT PK | — | UUID-Primärschlüssel |
name | TEXT | — | Menschenlesbarer Aufgabenname |
cron_expr | TEXT | — | Berechneter 5-Feld-Cron-Ausdruck |
original_schedule | TEXT | — | Benutzereingabe (natürliche Sprache oder Cron) |
prompt | TEXT | — | Agent-Prompt zur planmäßigen Ausführung |
source | TEXT | — | "tool" (über Tool erstellt) oder "config" (aus config.toml) |
is_oneshot | INTEGER | 0 | Einmal auslösen, dann automatisch löschen |
is_paused | INTEGER | 0 | Pausierte Aufgaben werden nicht ausgelöst |
is_trusted | INTEGER | 0 | Trusted-Aufgaben überspringen die Terminal-Genehmigung |
next_run_at | TEXT | — | RFC3339-Zeitstempel der nächsten geplanten Ausführung |
last_run_at | TEXT | null | RFC3339-Zeitstempel der letzten Ausführung |
created_at | TEXT | — | RFC3339-Zeitstempel |
updated_at | TEXT | — | RFC3339-Zeitstempel |
terminal_allowed_prefixes-Tabelle
| Key | Type | Default | Description |
|---|---|---|---|
prefix | TEXT PK | — | Befehlspräfix, gespeichert aus "Immer erlauben"-Genehmigungen |
Arbeitsspeicher
Eine In-Memory-HashMap<String, VecDeque<Message>> pro Sitzung, begrenzt auf working_memory_cap (Standard 50). Vermeidet Datenbankzugriffe für den aktuellen Gesprächsverlauf.
Tri-Hybrid-Abruf
Die Methode get_context kombiniert drei Abrufstrategien:
| Strategie | Quelle | Limit | Zweck |
|---|---|---|---|
| Aktualität | Letzte N Nachrichten | 10 | Gesprächskontinuität |
| Relevanz (Wichtigkeit) | importance ≥ 0.8 | 5 | Kritisch markierte Erinnerungen |
| Relevanz (Semantik) | Vektorähnlichkeit > 0.65 | 5 | Semantische Suche über Embeddings |
Ergebnisse werden vor der Aufnahme in den Kontext nach Nachrichten-ID dedupliziert.
Embedding-Service
- Modell: AllMiniLML6V2 (via fastembed)
- Läuft im Hintergrund — bettet neue Nachrichten ein, nachdem sie angehängt wurden
- Ermöglicht den Relevanz-Zweig des Tri-Hybrid-Abrufs
Speicherkonsolidierung
Eine Hintergrundaufgabe läuft alle consolidation_interval_hours (Standard 6). Sie komprimiert alte Gespräche zu Zusammenfassungen mit dem Fast-Modell und reduziert so Speicherplatz und Kontextfensternutzung.
Wichtigkeitsbewertung
| Rolle | Standardwert |
|---|---|
| Benutzernachricht | 0.5 |
| Assistentenantwort | 0.5 |
| Tool-Ausgabe | 0.3 |
| Systemnachricht | 0.1 |
Verbindungspool
- SQLite-Pool: maximal 5 Verbindungen
- Journal-Modus: WAL (Write-Ahead Logging) für gleichzeitige Lesezugriffe
- Erstellt Datenbank und Tabellen automatisch, falls nicht vorhanden