Rückblick auf Hermes Agent: Selbst gehostetes Gedächtnis mit lokalen LLMs

Permanenter Hermes-Speicher auf Ihrer eigenen Hardware.

Inhaltsverzeichnis

Ein selbst gehosteter KI-Agent benötigt mehr als nur ein langes Kontextfenster. Er braucht einen Weg, nützliche Fakten zu bewahren, frühere Entscheidungen abzurufen und seine Überbestände zu revidieren, während Projekte sich weiterentwickeln.

Hermes Agent wird mit eingebauten Speicherdateien ausgeliefert, aber ein externer Anbieter kann eine viel reicher vernetzte Abfrage über verschiedene Sitzungen hinweg bereitstellen. Hindsight ist eine der interessantesten Optionen in diesem Bereich. Diese Anleitung installiert es für Hermes ohne Cloud-Inferenz, zunächst als alle-in-einem-Docker-Container und dann gegenüber einem vorhandenen PostgreSQL-Server mit separaten lokalen Modellen Endpunkten.

Hindsight-Speicherbereitstellung für einen Hermes-Agenten

Die Anleitung deckt die Bereitstellung, die Auswahl und Verkabelung lokaler Embedding-, Reranking- und generativer Modelle, die Kontrolle ab, was „Auto-Retain“ in die Bank schreibt, die Verbindung zu Hermes und die operative Ebene: Sicherung, Migration und tägliche Bank-Pflege ab. Die Beispiele verwenden ein bewussten Port-Schema — 8080 für den Haupt-llama.cpp-Server, 8081 für Embeddings, 8082 für Reranking, 11434 für Ollama — ändern Sie diese also in die Ports um, die Sie bereits verwenden, und halten Sie die kleinen Server vom Port des Hauptmodells fern.

Was Hindsight leistet

Hindsight ist eine persistente Agenten-Speicher-Engine mit drei Hauptoperationen: Retain (Bewahren), Recall (Abrufen) und Reflect (Reflektieren). Retain extrahiert und speichert Informationen; Recall kombiniert semantische, stichwortbasierte, grafische und temporale Abfrage; Reflect synthetisiert eine Antwort aus angesammelten Erinnerungen. Hintergrund-Konsolidierung kann überlappende Beobachtungen in eine nützlichere Wissensebene verwandeln.

Es ist nicht einfach nur eine Embeddings-Datenbank. Ein Vektor-Speicher kann ähnliche Passagen lokalisieren, aber ein Speicher-System muss auch Chronologie, Projektgrenzen, widersprüchliche Evidenzen und Änderungen in Entscheidungen bewahren. Diese Fehlerszenarien werden in selbst verstärkende Speicherschleifen untersucht.

Für den breiteren Markt siehe Vergleich von Agenten-Speicher-Anbietern. Hermeas eingebauter MEMORY.md, USER.md und Speicher-Modi werden im Hermes Agent Speicher-System-Leitfaden behandelt, daher geht dieser Artikel davon aus, dass Sie wissen, wie die eingebaute Ebene funktioniert.

Warum man über Mnemosyne hinausgehen sollte

Mnemosyne für Hermes bietet ansprechende lokale Ideen, einschließlich SQLite-Speicher und hybrider Abfrage. In der Praxis können Installationsbeschränkungen, Versionskompatibilität, Schreibgenehmigungsverhalten und schnelle Änderungen um seine 4.0-Vorversionen herum es schwierig machen, es vorhersehbar zu betreiben. Das sind operative Belange, kein Beweis, dass Mnemosynes Speichermodell fundamental fehlerhaft ist.

Hindsight ist auch nicht ohne Abhängigkeiten: sein Docker-Image und lokale Modelle können erheblichen Festplattenspeicher verbrauchen. Die Ausführung seiner API als unabhängiger Dienst, mit Inferenz woanders, hält Upgrades und Fehlerbehebung isoliert vom Agenten selbst.

Eine Bereitstellung wählen

Komponente A: Alle-in-einem-Container B: Vorhandener PostgreSQL-Server
Hindsight API und UI Docker-Container Docker-Container
PostgreSQL Eingebettetes pg0 im Container Vorhandener PostgreSQL-Host
Generative LLM Externer llama.cpp Externer llama.cpp
Embeddings Standard-lokal oder extern Externer Ollama oder llama.cpp
Reranking Standard-lokal oder extern Externer Rerank-Server
Am besten für Schnelle Bewertung Langlaufende, isolierte Installation

Hier bedeutet „alle-in-einem“, dass Hindsight API, UI und Datenbank in einem Container sind; das Inferenz-LLM wird jedoch weiterhin woanders gehostet. Das ist absichtlich: Das offizielle Hindsight-Docker-Image bündelt keinen sofort einsatzbereiten lokalen generativen llama.cpp-Server.

flowchart LR H[Hermes Agent] -->|Memory API| A[Hindsight API] A --> P[(PostgreSQL)] A --> E[Embedding endpoint] A --> R[Reranking endpoint] A --> L[Generative LLM endpoint]

Verwenden Sie LAN-erreichbare Adressen, nicht localhost, für Dienste, die auf einem anderen Host laufen. Beschränken Sie diese Ports auf vertrauenswürdige Clients; die Beispiel-dummy-Schlüssel sind Kompatibilitätsplatzhalter, keine Authentifizierung.

Option A: Alle-in-einem-Hindsight-Container

Das ist der einfachste Weg, Hindsight zu bewerten, ohne die Hermes-VM mit Python, Torch und lokalen Modell-Abhängigkeiten zu füllen. Der Container führt Hindsight und eingebettetes PostgreSQL, während Ihr Haupt-llama.cpp-LLM die Speicherextraktion und Reflexion übernimmt.

Zwei Image-Tags sind hier wichtig. ghcr.io/vectorize-io/hindsight:latest ist das große Image — ungefähr 9 GB auf AMD64 — weil es einen BGE-Embedder, einen MiniLM-Reranker und eingebettetes PostgreSQL bündelt. latest-slim ist ungefähr 500 MB groß und erwartet, dass diese beiden Modelle woanders liegen, was Sie möchten, sobald Sie Hindsight auf das Embedding- und Reranking-Setup in „Bereitstellen und lokale Modelle verkabeln“ zeigen. Sobald der Health-Check besteht, fixieren Sie ein spezifisches Tag: ein sich bewegendes Tag ist eine schlechte Wahl für eine Datenbank, die Sie behalten möchten.

Erstellen Sie ein Verzeichnis und eine Compose-Datei auf dem Hindsight-Host:

mkdir -p ~/services/hindsight
cd ~/services/hindsight
cat > compose.yaml <<'YAML'
services:
  hindsight:
    image: ghcr.io/vectorize-io/hindsight:latest
    container_name: hindsight
    restart: unless-stopped
    shm_size: 1gb
    extra_hosts:
      - "host.docker.internal:host-gateway"
    ports:
      - "8888:8888"  # Memory API
      - "9999:9999"  # Control-plane UI
    environment:
      HINDSIGHT_API_WORKER_ID: hindsight-standalone
      HINDSIGHT_API_LLM_PROVIDER: openai
      HINDSIGHT_API_LLM_BASE_URL: http://WORKSTATION_IP:8080/v1
      HINDSIGHT_API_LLM_MODEL: LocalMegaLLM
      HINDSIGHT_API_LLM_API_KEY: dummy
      HINDSIGHT_API_LLM_MAX_CONCURRENT: "2"
    volumes:
      - hindsight-pg0:/home/hindsight/.pg0
volumes:
  hindsight-pg0:
YAML

Ersetzen Sie WORKSTATION_IP mit dem Host, der llama.cpp ausführt. Auf Linux wird host.docker.internal nur dann aufgelöst, wenn der Container die oben gezeigte host-gateway-Zuordnung deklariert; ohne sie zeigt eine Basis-URL von http://host.docker.internal:8080/v1 nirgendwohin. Die 1-GB-Freigedaten-Speicherreservierung ist besonders nützlich für eingebettete PostgreSQL-Indizes; der kleine Standard-/dev/shm von Docker kann zu Fehlern führen. Ein benannter Volume bewahrt die Datenbank, wenn der Container neu erstellt wird, und eine Bind-Mount-Alternative muss dem uid 1000, dem Benutzer im Image, gehören.

HINDSIGHT_API_WORKER_ID sollte über Neuanlegungen hinweg stabil bleiben — der Docker-Standard ist der Container-Hostname, und eine Aufgabe, die in der Luft hing, als ein Container starb, bleibt unter der alten Worker-ID stecken.

docker compose up -d
docker compose logs -f --tail=100
curl -f http://localhost:8888/health

Wenn Ihre installierte Hindsight-Version den Health-Check an einem anderen Pfad aussetzt, inspizieren Sie http://localhost:8888/docs und die Container-Logs. Die Kontrollfläche ist normalerweise unter http://HINDSIGHT_HOST:9999 verfügbar. Sobald die Grundbereitstellung funktioniert, können Sie auch ihre Embedding- und Reranking-Anbieter auf die Konfiguration in „Bereitstellen und lokale Modelle verkabeln“ zeigen, anstatt die Standardmodelle innerhalb des Containers zu laden.

Stellen Sie die Ports 8888 oder 9999 nicht direkt dem Internet aus. Verwenden Sie ein privates Netz oder einen authentifizierten Reverse-Proxy. Eingebettetes PostgreSQL ist für Tests bequem, aber eine extern verwaltete Datenbank ist leichter zu sichern und zu warten.

Option B: Hindsight gegenüber einem vorhandenen PostgreSQL-Server

Für eine langlaufende Installation bevorzuge ich, die Hindsight API, die Datenbank und die Inferenz-Endpunkte getrennt zu halten. Die Hindsight-VM kann klein bleiben, da sie Orchestrierung und HTTP-Dienste ausführt, anstatt schwere Modelle.

flowchart LR H[Hermes VM] -->|port 8888| A[Hindsight VM] A -->|port 5432| P[(PostgreSQL host)] A -->|port 8080| L[Generative LLM] A -->|port 8081 or 11434| E[Embedding endpoint] A -->|port 8082| R[Reranking endpoint]

PostgreSQL und pgvector vorbereiten

Hindsight benötigt PostgreSQL 14 oder neuer und eine Vektorerweiterung in der hindsight-Datenbank. Die Erweiterung ist pro Datenbank: das Installieren des Pakets auf dem Server tut nichts, bis CREATE EXTENSION dort ausgeführt wird. Auf einem Debian- oder Ubuntu-PostgreSQL-Server installieren Sie das pgvector-Paket, das zur tatsächlichen PostgreSQL-Hauptversion passt; zum Beispiel auf PostgreSQL 16:

sudo apt update
sudo apt install postgresql-16-pgvector

Der Paketname und die Verfügbarkeit hängen von Ihren konfigurierten apt-Repositories ab. Wenn es nicht verfügbar ist, folgen Sie den pgvector-Installationsanweisungen oder installieren Sie ein kompatibles Paket aus dem PostgreSQL PGDG-Repository. Ändern Sie nicht blind die PostgreSQL-Hauptversion auf einem geteilten Server.

Erstellen Sie eine dedizierte Rolle und Datenbank als PostgreSQL-Administrator:

CREATE ROLE hindsight LOGIN PASSWORD 'REPLACE_WITH_LONG_PASSWORD';
CREATE DATABASE hindsight OWNER hindsight;

Verbinden Sie sich mit der neuen Datenbank und aktivieren Sie die Erweiterung:

sudo -u postgres psql -d hindsight -c \
  'CREATE EXTENSION IF NOT EXISTS vector;'
sudo -u postgres psql -d hindsight -c \
  "SELECT extname, extversion FROM pg_extension WHERE extname = 'vector';"

Die Erweiterung benötigt normalerweise erhöhte Privilegien zur Installation; die Anwendungsrolle muss kein Superuser sein. Hindsight verwendet standardmäßig pgvector und verlangt 0.8.0 oder neuer für iterative ANN-Scans; ältere Server lehnen diese Einstellung ab. HINDSIGHT_API_VECTOR_EXTENSION kann alternativ pgvectorscale (eine DiskANN-Option, die Hindsight für sehr große Banken dokumentiert) oder vchord auswählen, beides benötigt zusätzliche Pakete für diesen exakten PostgreSQL-Build. Das Wechseln der Algorithmen, nachdem Erinnerungen existieren, stoppt den Start und verlangt eine Migration, wählen Sie also vor dem ersten Retain. Für eine persönliche Hermes-Bank ist pgvector das, was Sie installieren und dann vergessen sollten.

Erlauben Sie nur dem Hindsight-Host den Durchgang durch pg_hba.conf, zum Beispiel:

host  hindsight  hindsight  192.168.1.50/32  scram-sha-256

Setzen Sie PostgreSQL listen_addresses entsprechend ein und verwenden Sie TLS oder ein vertrauenswürdiges privates Netz für zwischen-Host-Verbindungen. Sichern Sie diese Datenbank unabhängig vom Hindsight-Docker-Container. Wenn der Server mit anderen Anwendungen geteilt wird, halten Sie Hindsight in seiner eigenen Datenbank, oder setzen Sie HINDSIGHT_API_DATABASE_SCHEMA auf ein Schema, das Sie besitzen; das Standard-Schema ist public.

Hindsight gegen PostgreSQL ausführen

Erstellen Sie compose.yaml auf der Hindsight-VM. Diese Version startet PostgreSQL absichtlich nicht lokal:

services:
  hindsight:
    image: ghcr.io/vectorize-io/hindsight:latest-slim
    restart: unless-stopped
    ports:
      - "8888:8888"
      - "9999:9999"
    env_file: .env
    environment:
      HINDSIGHT_API_LLM_PROVIDER: openai
      HINDSIGHT_API_LLM_BASE_URL: http://WORKSTATION_IP:8080/v1
      HINDSIGHT_API_LLM_MODEL: LocalMegaLLM
      HINDSIGHT_API_LLM_API_KEY: dummy
      HINDSIGHT_API_LLM_MAX_CONCURRENT: "2"
      HINDSIGHT_API_DB_POOL_MIN_SIZE: "2"
      HINDSIGHT_API_DB_POOL_MAX_SIZE: "10"
      HINDSIGHT_API_WORKER_ID: hindsight-standalone

Speichern Sie die externe Datenbank-URL in einer Datei namens .env:

HINDSIGHT_API_DATABASE_URL=postgresql://hindsight:YOUR_PASSWORD@POSTGRES_IP:5432/hindsight
chmod 600 .env
docker compose up -d
docker compose logs -f --tail=100

Wenn Ihr Passwort @, :, / oder andere reservierte URL-Zeichen enthält, kodieren Sie es in der URL, bevor Sie es in die Verbindungszeichenkette setzen. Testen Sie, dass die Hindsight-VM den PostgreSQL-Port 5432 erreichen kann und dass pg_hba.conf den Hindsight-Host erlaubt — ein Server, der nur an 127.0.0.1 gebunden ist, verweigert die Verbindung, selbst wenn die URL richtig aussieht. Erlauben Sie dem ersten Start, Datenbank-Migrationen auszuführen; Migrationen laufen beim Start, es sei denn, Sie setzen HINDSIGHT_API_RUN_MIGRATIONS_ON_STARTUP=false. Mit API und Datenbank aktiv, fahren Sie mit Modelle für Hindsight wählen und Lokale Modelle bereitstellen und verkabeln fort, bevor Sie Hermes verbinden.

Modelle für Hindsight wählen

Die Bereitstellung stellt API und Datenbank ins Netz. Die nächste Entscheidung ist, welche Modelle die drei Inferenz-Rollen füllen: Embeddings für Recall-Kandidaten, ein Reranker, um sie neu zu ordnen, und ein generatives LLM für Retain, Reflect und Konsolidierung. Ein praktischer Standard für einen CPU-Hindsight-Host, dessen GPU bereits mit Konversation beschäftigt ist, ist in-process Qwen/Qwen3-Embedding-0.6B, in-process BAAI/bge-reranker-v2-m3 und ein geteilter llama.cpp-Chat-Modell für generative Arbeit.

Embedding-Modelle

Hindsight liest die Embedding-Dimension beim Start ein und dimensioniert die Bank entsprechend, also ist das Modell, das Sie beim ersten Retain wählen, das Modell, das die Bank behält, bis Sie sie neu aufbauen. Dimensionalität und Anweisungsverhalten sind wichtiger als Leaderboard-Ränge: ein stärkerer 8B-Embedder ist keine Migration wert, wenn die Bank bereits eine 384- oder 1024-dimensionale ist. Die Zeilen unten sind von leichtesten zu schwersten sortiert; RAM-Zahlen sind angenäherte geladene Fußabdruck auf CPU (FP16 / typische lokale Beladung), nicht GGUF-Dateigröße.

Modell Parameter Dim Kontext Geladen Läuft auf Anmerkungen
BAAI/bge-small-en-v1.5 33M 384 512 ~100–130 MB CPU Hindsight-Standard; in hindsight:latest enthalten. Schnellster lokaler Weg. Die Score-Verteilung kalibriert noch viele recall_min_scores-Standards, nachdem Sie ihn verlassen haben.
BAAI/bge-base-en-v1.5 109M 768 512 ~400 MB CPU Mittelklasse-Englisch-BGE; sperrt eine 768-dim Bank.
sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 ~118M 384 512 ~200 MB CPU Hindsight-dokumentierter mehrsprachiger MiniLM; 50+ Sprachen bei gleicher 384-dim-Bank-Breite wie BGE-small.
intfloat/multilingual-e5-small ~118M 384 512 ~200 MB CPU Standard für den onnx-Anbieter; leichter mehrsprachiger CPU-Weg, wenn Sie einen ONNX-Export haben.
nomic-ai/nomic-embed-text-v1.5 ~137M 768 8k ~500 MB CPU Häufiger Ollama-Embedder; längerer Kontext als klassisches BGE, immer noch Englisch-zentriert.
google/embeddinggemma-2 270M 768 8k ~540 MB CPU EmbeddingGemma 2 nur Text (Vision/Audio-Türme deaktivieren). 100+ Sprachen + Code; MRL trunciert zu 512/256/128; Anweisungspräfixe für Suche vs. Dokument. Volle Multimodal-Beladung ist 740M.
BAAI/bge-m3 568M 1024 8k ~1.1 GB CPU oder GPU Starker mehrsprachiger Dual-Encoder; gleiche Breite wie Qwen3-0.6B, also braucht ein gleich-dimensionaler Tausch immer noch ein vollständiges Re-Embedding.
Qwen/Qwen3-Embedding-0.6B 0.6B 1024 32k ~1.2 GB CPU Standard dieses Leitfadens. Anweisungs-bewusst (Suchanweisung auf der Query-Seite); bequem auf CPU. Lokaler Anbieter wendet die Anweisung automatisch an; OpenAI-kompatible Server benötigen HINDSIGHT_API_EMBEDDINGS_QUERY_PREFIX.
Qwen/Qwen3-Embedding-4B 4B 2560 32k ~8 GB FP16 / ~2.5 GB quant GPU Qwen3-Qualitätsstufe; sperrt eine 2560-dim Bank. Nicht machbar, wenn die konversationelle GPU bereits gesättigt ist.

Wie das Modell ausgeführt wird, ist die andere Hälfte der Wahl. Hindsights Embedding-Anbieter, vom einfachsten zu den meisten beweglichen Teilen:

Anbieter Wie es läuft Am besten, wenn Anmerkungen
local In-process SentenceTransformers; kein Sidecar Einzelner Hindsight-Host, CPU-Embedder Standardweg. Setzen Sie HINDSIGHT_API_EMBEDDINGS_LOCAL_MODEL. Kein llama.cpp, Ollama oder TEI.
onnx In-process ONNX Runtime Leichter als Torch auf CPU; Sie haben bereits einen ONNX-Export Benötigt hindsight-api-slim[local-onnx] und HINDSIGHT_API_EMBEDDINGS_ONNX_*.
openai / tei Externer OpenAI-kompatibler oder HF TEI Endpunkt Embeddings weg vom API-Prozess; geteilter GPU/CPU-Host Was „Lokale Modelle bereitstellen und verkabeln“ für Ollama / llama.cpp / TEI konfiguriert. Nur wert den Sidecar, wenn Sie Isolation oder einen anderen Host wollen.

Qwen3-Embedding-0.6B benötigt keinen externen Embedding-Dienst. Auf einem CPU-Hindsight-Host lädt es innerhalb des API-Prozesses mit dem local-Anbieter — Hugging Face lädt die Gewichte beim ersten Start herunter, und der Anbieter wendet die Suchanweisung des Modells selbst an:

# Compose environment (or equivalent .env keys)
HINDSIGHT_API_EMBEDDINGS_PROVIDER: local
HINDSIGHT_API_EMBEDDINGS_LOCAL_MODEL: Qwen/Qwen3-Embedding-0.6B

Verwenden Sie einen externen OpenAI-kompatiblen Endpunkt nur, wenn Sie den Embedder auf einem anderen Host oder weg vom API-Prozess wollen. Ollama ist ein solcher Host:

# Embeddings: Qwen3-Embedding-0.6B on Ollama
HINDSIGHT_API_EMBEDDINGS_PROVIDER: openai
HINDSIGHT_API_EMBEDDINGS_OPENAI_BASE_URL: http://192.168.1.123:11434/v1
HINDSIGHT_API_EMBEDDINGS_OPENAI_MODEL: qwen3-embedding:0.6b-q8_0
HINDSIGHT_API_EMBEDDINGS_OPENAI_API_KEY: dummy

Ersetzen Sie Host, Port und Tag mit dem, was ollama list auf Ihrem Inferenz-Host zeigt.

HINDSIGHT_API_EMBEDDINGS_QUERY_PREFIX hängt vom Anbieter ab:

Pfad HINDSIGHT_API_EMBEDDINGS_QUERY_PREFIX HINDSIGHT_API_EMBEDDINGS_PASSAGE_PREFIX
local (Qwen/Qwen3-Embedding-0.6B) Leer lassen / leer — der in-process-Anbieter wendet Qwens Suchanweisung selbst an Leer lassen / leer
Externer Ollama / llama.cpp / OpenAI-kompatibel Offizielle Qwen3-Retrieval-Anweisung (echter Zeilenumbruch vor Query:) Leer lassen — gespeicherte Erinnerungen bleiben roher Text
Server kapselt Eingaben bereits in Qwens Vorlage Beide leer lassen — sonst wird die Anweisung doppelt angewendet Leer lassen

Für den externen Pfad setzen Sie:

# Real newline before Query:. Bash $'...' is the reliable way to pass it.
HINDSIGHT_API_EMBEDDINGS_QUERY_PREFIX=$'Instruct: Given a web search query, retrieve relevant passages that answer the query\nQuery:'
HINDSIGHT_API_EMBEDDINGS_PASSAGE_PREFIX=

In Compose YAML benötigt derselbe String einen expliziten \n (oder einen wörtlichen Multi-Zeilen-Wert). Setzen Sie die Präfixe vor dem ersten Retain: spätere Änderungen bedeuten, dass alte Vektoren und neue Queries nicht länger im selben Raum sitzen.

Zwei Eigenschaften entscheiden mehr als die Leaderboard-Position. Anweisungs-Empfindlichkeit: Qwen3-Embeddings wenden eine Suchanweisung auf der Query-Seite an; ohne das passende Präfix auf einem OpenAI-kompatiblen Server hören die gespeicherte Seite und die Query-Seite auf, im selben Raum zu sitzen. Dimensions-Sperre: weil die Breite einmal beim Start gelesen wird, ist ein Wechsel von 0.6B auf 4B später eine Bank-Migration, keine Konfigurationsänderung — und sogar ein gleich-dimensionaler Tausch (BGE-M3 ↔ Qwen3-0.6B, oder EmbeddingGemma 2 ↔ nomic bei 768) ändert den Vektorraum, also werden Bank-Vektoren nicht automatisch neu berechnet. Planen Sie eine neue Bank oder ein manuelles Re-Embedding/Re-Indexieren; siehe Exportieren, Importieren und Migrieren der Speicherbank. Nach dem Verlassen von BGE-small, prüfen Sie recall_min_scores gegen die neue Score-Verteilung — Schwellenwerte, die auf BGE-small kalibriert wurden, können für Qwen3-0.6B zu eng sein und den Reranker um Kandidaten bringen. Für Benchmarks und GGUF/Ollama-Hintergrund zur Qwen3-Familie, siehe Qwen3 Embedding und Reranker Modelle auf Ollama.

Reranking-Modelle

Embeddings rufen einen Kandidatensatz ab; der Reranker bewertet jedes Query/Passage-Paar und ordnet es neu, bevor Hindsight es injiziert. Mit dem local-Anbieter lädt Hindsight einen SentenceTransformers-Cross-Encoder (oder einen generativen Reranker, wo unterstützt). Mit einem externen Cohere-kompatiblen Endpunkt postet es den vollen Cohere-Style-Körper an HINDSIGHT_API_RERANKER_COHERE_BASE_URL. Der Reranker ist optional, aber sobald der Embedder festgelegt ist, ist er normalerweise der größte Recall-Qualitäts-Hebel — und auf CPU oft der größte Teil der Recall-Wand-Uhr. Zeilen sind von leichtesten zu schwersten sortiert.

Modell Parameter Typ Kontext Läuft auf Anmerkungen
cross-encoder/ms-marco-MiniLM-L-6-v2 23M Cross-Encoder 128 CPU Hindsight-Standard; in hindsight:latest enthalten. Sub-Sekunden für ~20 Kandidaten. Als benannter Fallback behalten, wenn ein schwereres BGE-Modell zu langsam ist.
cross-encoder/ms-marco-MiniLM-L-12-v2 ~33M Cross-Encoder 512 CPU Gleiche Familie, höhere Genauigkeit; immer noch Englisch-lastiges MS MARCO.
cross-encoder/mmarco-mMiniLMv2-L12-H384-v1 ~33M Cross-Encoder 512 CPU Hindsight-dokumentierter mehrsprachiger MiniLM-Reranker.
BAAI/bge-reranker-base 278M Cross-Encoder 512 CPU Mäßiges Upgrade gegenüber MiniLM; en/zh. Oft diskutiert; übersprungen, wenn v2-m3 bereits ins Latenz-Budget passt.
BAAI/bge-reranker-v2-m3 568M Cross-Encoder 8k CPU oder GPU Praktischer mehrsprachiger Standard auf CPU. Auf einer ~500-Speicher-Bank, ~2.6–2.8 s pro Recall bei einem 20-Kandidaten-Unterboden (~140 ms/Kandidat; ~93–99% der Recall-Zeit). Kandidaten-Caps 20/40/80; Senken des Unterbodens von 20 → 10 halbiert die Rerank-Kosten ungefähr.
Qwen/Qwen3-Reranker-0.6B 0.6B Generativ (yes-token) 32k GPU bevorzugt Anweisungs-bewusst, langer Kontext. Kein Drop-in-Cross-Encoder: benötigt aktuelle SentenceTransformers-generative-Reranker-Unterstützung, und llama.cpp /rerank Scoring hat bekannte falsche-Score-Bugs (hindsight-benchmarks#11). Validieren, bevor es adoptiert wird.
BAAI/bge-reranker-v2-gemma 2.5B Cross-Encoder 8k GPU bevorzugt Starke mehrsprachige Qualität; übertrieben für eine persönliche Bank mit wenigen hundert Erinnerungen, wenn die GPU bereits voll ist.
Qwen/Qwen3-Reranker-4B 4B Generativ 32k GPU Höherwertiger Qwen-Kandidat; nicht machbar ohne dedizierte VRAM.
Qwen/Qwen3-Reranker-8B 8B Generativ 32k GPU Familien-Oberstufe; gleiche generative Scoring-Vorsicht, noch größer.

Cloud-API-Reranker (Cohere, ZeroEntropy, Alibaba qwen3-rerank, TypeSafe, und ähnlich) funktionieren in Hindsight, senden aber Speichertext aus dem Gerät. Für eine nur lokale Cross-Domain-Anordnung sind sie außerhalb des Rahmens.

Zwei operative Einschränkungen dominieren die Wahl. VRAM: wenn das konversationelle Modell die GPU bereits sättigt (zum Beispiel ein Qwen3.8-27B Q5 auf einer 16-GB-Karte ohne Spielraum), sind alle „GPU bevorzugt“-Zeilen aus dem Rennen und die Live-Wahl kollabiert zu MiniLM oder BGE-v2-m3 auf CPU. Kandidatenanzahl: HINDSIGHT_API_RERANKER_MAX_CANDIDATES (30 im externen Endpunkt-Beispiel unten) begrenzt, wie viele Passagen das Modell neu bewertet; jeder Kandidat ist ein vollständiger Vorwärts-Durchlauf, also schneiden Sie den Unterboden, bevor Sie eine Modell-Stufe springen. Für Qwen3 über llama.cpp muss die GGUF den Ranking-Head behalten — ein altes convert_hf_to_gguf.py, das ihn verwirft, bewertet jede Passage nahe Null — und selbst eine korrekte Konversion benötigt weiterhin einen bekannten guten/known-bad Passage-Test, bis der generative Scoring-Pfad bestätigt ist.

Generative LLM-Stufen

Embedding- und Reranking-Modelle sind keine Ersatz für das generative LLM, das verwendet wird, um Erinnerungen zu extrahieren und darüber nachzudenken. Hindsight unterstützt ein Standard-LLM und operationsspezifische Overrides, die denselben llama.cpp-Server oder unabhängige Endpunkte targeten können.

Hindsight-Operation Zweck Praktische Modellstufe Qwen-Beispiele
Retain Extrahieren von Fakten, Entitäten, Entscheidungen und Chronologie 4B Minimum für Tests; 9B bevorzugt Qwen3.5-4B / Qwen3.5-9B
Recall Semantische, stichwortbasierte, grafische und temporale Abfrage Kein generatives LLM erforderlich Qwen3-Embedding-0.6B + Reranker
Reflect Fragen beantworten, indem abgerufene Erinnerungen synthetisiert werden 9B bis 27B+ Qwen3.5-9B / Qwen3.8-27B
Konsolidierung Verwandte Fakten ausgleichen und komprimieren 9B bevorzugt Qwen3.5-9B / Qwen3.8-27B
Mentales Modell aktualisieren Langlebigeres synthetisiertes Verständnis aktualisieren 9B bis 35B Qwen3.5-9B / Qwen3.6-35B-A3B

Das sind operative Empfehlungen, keine offiziellen Hindsight-Minimalparameterzahlen. Ein kleines Modell kann eine Portnummer korrekt extrahieren, aber verfehlen, dass eine frühere architektonische Entscheidung ersetzt wurde. Zuverlässigkeit strukturierter Ausgabe und treue Behandlung von Verneinung sind wichtiger als die nominelle Parameterzahl allein. Hindsights eigene Temperatur-Standards sind es wert, unangetastet zu bleiben — 0.1 für Retain, 0.0 für Konsolidierung, 0.9 für Reflect — und für Retain und Konsolidierung ist der nicht-denkende Alias es wert, bedient zu werden, wenn Ihr llama.cpp-Build einen hat, weil die kleinen Qwen3.5-Checkpoints viele Tokens im Denkmodus verbringen.

Für eine Bereitstellung mit einem vorhandenen Qwen3.8-27B llama.cpp Endpunkt, fangen Sie an, ihn über generative Hindsight-Aufgaben mit niedriger Konvergenz zu teilen:

HINDSIGHT_API_LLM_PROVIDER=openai
HINDSIGHT_API_LLM_BASE_URL=http://WORKSTATION_IP:8080/v1
HINDSIGHT_API_LLM_MODEL=LocalMegaLLM
HINDSIGHT_API_LLM_API_KEY=dummy
HINDSIGHT_API_LLM_MAX_CONCURRENT=2
HINDSIGHT_API_RETAIN_LLM_MAX_CONCURRENT=1
HINDSIGHT_API_CONSOLIDATION_LLM_MAX_CONCURRENT=1

Später, leiten Sie routinemäßige Extraktion zu einem unabhängigen 9B-Modell und reservieren Sie das 27B für schwierige Reflexion:

HINDSIGHT_API_RETAIN_LLM_PROVIDER=openai
HINDSIGHT_API_RETAIN_LLM_BASE_URL=http://MEMORY_LLM_HOST:8083/v1
HINDSIGHT_API_RETAIN_LLM_MODEL=MemoryLLM
HINDSIGHT_API_RETAIN_LLM_API_KEY=dummy

HINDSIGHT_API_REFLECT_LLM_PROVIDER=openai
HINDSIGHT_API_REFLECT_LLM_BASE_URL=http://WORKSTATION_IP:8080/v1
HINDSIGHT_API_REFLECT_LLM_MODEL=LocalMegaLLM
HINDSIGHT_API_REFLECT_LLM_API_KEY=dummy

Das kleinere 4B-Modell ist wirtschaftlich, aber braucht Tests; 9B ist ein sinnvoller Kompromiss aus Qualität/Leistung. Wenn Retain und Konsolidierung ein kleines Modell teilen, senken Sie HINDSIGHT_API_CONSOLIDATION_LLM_BATCH_SIZE auf 2 — der Standard-Batch von 8 ist ein langer Prompt für ein kleines Kontextfenster. Qwen3.6-35B-A3B ist attraktiv für einen separaten gut provisionierten Inferenz-Server (es ist ein Mixture-of-Experts-Modell mit etwa 3 Milliarden aktiven Parametern, also budgetieren Sie es als kleines aktives Modell), während ein 27B-dichtes Modell normalerweise für jedes routinemäßige Retain-Event nicht erforderlich ist. Das Begrenzen der Hintergrund-Konvergenz schützt das Hermes-Konversationsmodell vor Speicher-Pflege-Spitzen.

Lokale Modelle bereitstellen und verkabeln

Wenn die in-process local Embedding- und Reranker-Einstellungen in „Modelle wählen“ ausreichen, können Sie die externen Ollama- und llama.cpp-Untersektionen überspringen und zum Verkabeln springen — oder Compose auf den local-Standards belassen, die dort gezeigt werden. Externe Endpunkte sind wichtig, wenn der Embedder oder Reranker auf einem anderen Host leben sollte.

Externe Embeddings: Ollama oder llama.cpp

Externe Embeddings sind für den Fall, dass Sie Qwen3-Embedding-0.6B (oder ein anderes Modell) auf einem separaten Host wollen. Zwei praktische Optionen sind Ollama, das Modellbeschaffung und Servier mit wenig Konfiguration handhabt, und llama.cpp, das präzise Kontrolle über GGUF-Quantisierung, CPU-Threads, Geräteplatzierung und Batching gibt. Modellhintergrund und Benchmarks für beide Qwen3-Modelle sind in Qwen3 Embedding und Reranker Modelle auf Ollama.

Qwen3-Embedding-0.6B liefert 1024-dimensionale Vektoren, und Hindsight liest diese Breite beim Start ein und dimensioniert die Datenbank entsprechend. Eine Bank, die mit dem gebündelten 384-dimensionalen BGE-Modell erstellt wurde, kann dieses Modell nicht aufnehmen — starten Sie von einer leeren Datenbank oder einem Volume und entscheiden Sie das Embedding-Modell vor dem ersten Retain. Ein späterer Wechsel des Embedding-Anbieters erfordert das Re-Embedding gespeicherter Datensätze, selbst wenn beide Modelle die gleiche Dimensionalität verwenden.

Option 1: Ollama für Qwen3-Embedding-0.6B

Installieren Sie Ollama auf dem Inferenz-Host, indem Sie seine offizielle Linux-Installationsdokumentation verwenden, und starten Sie dann das Embedding-Modell:

ollama pull qwen3-embedding:0.6b
ollama serve

Für Fernzugriff konfiguriert Sie Ollamas OLLAMA_HOST=0.0.0.0:11434 in seiner Service-Umgebung, starten Sie den Service neu und firewallen Sie ihn auf die Hindsight-VM — das Verfahren wird in Ollama Fernzugriff abgedeckt. Ein Daemon, der nur an 127.0.0.1 gebunden ist, ist für den Hindsight-Container unsichtbar. Prüfen Sie zuerst den Modellnamen mit ollama list und testen Sie den standardmäßigen Embedding-Endpunkt:

curl http://EMBED_HOST:11434/api/embed \
  -H 'Content-Type: application/json' \
  -d '{"model":"qwen3-embedding:0.6b","input":"A test memory"}'

Hindsights OpenAI-Embedding-Anbieter ruft stattdessen Ollamas OpenAI-kompatiblen /v1/embeddings-Endpunkt auf. Stellen Sie sicher, dass dieser Endpunkt mit Ihrer Ollama-Version funktioniert, bevor Sie Hindsight konfigurieren. Ollama ist straightforward für Embeddings; nehmen Sie nicht an, dass seine API einen kompatiblen Reranking-Endpunkt anbietet. Für Reranking, bevorzugen Sie den in-process local BGE-Weg unten, oder einen separaten llama.cpp / TEI-Endpunkt, nachdem Sie Scores validiert haben.

Option 2: llama.cpp für Qwen3-Embedding-0.6B

Laden Sie eine verifizierte Qwen3-Embedding-0.6B GGUF-Konversion herunter. Verwenden Sie den GGUF-Dateinamen, den Sie tatsächlich heruntergeladen haben:

#!/bin/sh
# start-embedding.sh - CPU-only embedding server
set -eu
cd "$HOME/prj"
exec ./llama.cpp/llama-server \
  --host 0.0.0.0 --port 8081 \
  --model "$HOME/ggufs/Qwen3-Embedding-0.6B-Q8_0.gguf" \
  --alias qwen3-embedding-0.6b \
  --embedding --pooling last \
  --ctx-size 4096 --parallel 1 \
  --threads 4 --threads-batch 4 \
  --batch-size 512 --ubatch-size 256 \
  --n-gpu-layers 0

Qwen3-Embeddings verwenden last-token-Pooling, im Gegensatz zum CLS-Pooling, das von einigen BGE-Modellen verwendet wird. Ein nur CPU-llama.cpp-Build ist vorzuziehen, wenn Sie absolut keine CUDA-Initialisierung auf einer Workstation wollen, deren GPU von einem großen Konversationsmodell besetzt ist. Aktivieren Sie --reranking nicht auf diesem Embedding-Server: diese Kombination ist ein bekannter Weg, einen Vektor von Nullen zu erhalten.

curl -s http://EMBED_HOST:8081/v1/embeddings \
  -H 'Content-Type: application/json' \
  -d '{"model":"qwen3-embedding-0.6b","input":"A test memory"}' \
  | jq '.data[0].embedding | length'

Eine volle Dimensions-Qwen3-Embedding-0.6B-Ausgabe sollte 1024 Floats enthalten. Prüfen Sie, dass die GGUF-Konversion und Ihre Hindsight-Query/Dokument-Anweisungsverarbeitung kompatibel sind; anweisungs-empfindliche Embedding-Modelle können Genauigkeit verlieren, wenn sie falsch abgefragt werden.

Reranker: lokales BGE oder Qwen3 über llama.cpp

Reranking ist anders als Embeddings: das Modell bewertet jedes Query/Dokument-Paar und gibt einen Relevanz-Score zurück. Auf einem nur CPU-Hindsight-Host — oder wann immer die konversationelle GPU keinen VRAM-Spielraum hat — ist der praktische Weg Hindsights local-Anbieter mit BAAI/bge-reranker-v2-m3 (oder dem leichteren MiniLM-Standard). Kein Sidecar ist erforderlich:

HINDSIGHT_API_RERANKER_PROVIDER=local
HINDSIGHT_API_RERANKER_LOCAL_MODEL=BAAI/bge-reranker-v2-m3
HINDSIGHT_API_RERANKER_MAX_CANDIDATES=20

Qwen3-Reranker-0.6B ist ein generativer yes-Token-Score, kein klassischer Cross-Encoder. Es kann über llama.cpp mit einer GGUF-Konversion für Ranking bedient werden, aber behandeln Sie diesen Pfad als experimentell, bis Sie Scores auf einem bekannten guten/bekannten schlechten Paar bestätigen: ein altes convert_hf_to_gguf.py, das den Ranking-Head verwirft, bewertet jede Passage nahe Null, und llama.cpps nativer /rerank-Pfad hat bekannte falsche Score-Berichte für diese Familie.

#!/bin/sh
# start-reranker.sh - GPU or CPU as selected by --n-gpu-layers
set -eu
cd "$HOME/prj"
exec ./llama.cpp/llama-server \
  --host 0.0.0.0 --port 8082 \
  --model "$HOME/ggufs/Qwen3-Reranker-0.6B-Q8_0.gguf" \
  --alias qwen3-reranker-0.6b \
  --embedding --reranking --pooling rank \
  --ctx-size 4096 --parallel 1 \
  --batch-size 512 --ubatch-size 256 \
  --n-gpu-layers 99

Setzen Sie --n-gpu-layers 0, um es auf CPU auszuführen. Die GPU-Version benötigt zusätzlichen VRAM für Berechnungspuffer und Kontext, nicht nur Modellgewichte; nehmen Sie nicht an, dass die Dateigröße die gesamte GPU-Zuweisung ist.

curl -s http://RERANK_HOST:8082/v1/rerank \
  -H 'Content-Type: application/json' \
  -d '{"model":"qwen3-reranker-0.6b", "query":"PostgreSQL storage", "documents":["Hindsight stores memories in PostgreSQL.","A recipe for bread."], "top_n":2}' \
  | jq

Das PostgreSQL-Dokument sollte über dem irrelevanten Dokument rangieren; alle Nullen-Relevanz-Scores bedeuten, dass die GGUF die falsche Konversion ist, und Recall wird zufällig aussehen, auch wenn die Fakten gespeichert sind. Prüfen Sie die genaue results[].index und results[].relevance_score-Form: Hindsight erwartet eine Cohere-kompatible Rerank-Antwort, und llama.cpp-Kompatibilität kann sich zwischen Builds unterscheiden.

Endpunkte in Hindsight verkabeln

Fügen Sie die folgenden Umgebungseinstellungen dem Hindsight-Compose-Service hinzu oder speichern Sie sie in seiner .env-Datei. Wählen Sie einen Embedding-Weg — in-process local, Ollama oder llama.cpp — nie zwei gleichzeitig.

# Option A: in-process Qwen3 on the Hindsight host (CPU; no sidecar)
HINDSIGHT_API_EMBEDDINGS_PROVIDER=local
HINDSIGHT_API_EMBEDDINGS_LOCAL_MODEL=Qwen/Qwen3-Embedding-0.6B

# Option B: llama.cpp embedding service
# HINDSIGHT_API_EMBEDDINGS_PROVIDER=openai
# HINDSIGHT_API_EMBEDDINGS_OPENAI_BASE_URL=http://EMBED_HOST:8081/v1
# HINDSIGHT_API_EMBEDDINGS_OPENAI_MODEL=qwen3-embedding-0.6b
# HINDSIGHT_API_EMBEDDINGS_OPENAI_API_KEY=dummy
# HINDSIGHT_API_EMBEDDINGS_OPENAI_BATCH_SIZE=8
# HINDSIGHT_API_EMBEDDINGS_QUERY_PREFIX=$'Instruct: Given a web search query, retrieve relevant passages that answer the query\nQuery:'
# HINDSIGHT_API_EMBEDDINGS_PASSAGE_PREFIX=

# Option C: Ollama on another host
# HINDSIGHT_API_EMBEDDINGS_PROVIDER=openai
# HINDSIGHT_API_EMBEDDINGS_OPENAI_BASE_URL=http://192.168.1.40:11434/v1
# HINDSIGHT_API_EMBEDDINGS_OPENAI_MODEL=qwen3-embedding:0.6b-q8_0
# HINDSIGHT_API_EMBEDDINGS_OPENAI_API_KEY=dummy
# HINDSIGHT_API_EMBEDDINGS_QUERY_PREFIX=$'Instruct: Given a web search query, retrieve relevant passages that answer the query\nQuery:'
# HINDSIGHT_API_EMBEDDINGS_PASSAGE_PREFIX=

# Option: local BGE reranker (no sidecar; preferred on CPU)
HINDSIGHT_API_RERANKER_PROVIDER=local
HINDSIGHT_API_RERANKER_LOCAL_MODEL=BAAI/bge-reranker-v2-m3
HINDSIGHT_API_RERANKER_MAX_CANDIDATES=20

# Option: llama.cpp Cohere-compatible rerank endpoint (validate Qwen3 scores first)
# HINDSIGHT_API_RERANKER_PROVIDER=cohere
# HINDSIGHT_API_RERANKER_COHERE_BASE_URL=http://RERANK_HOST:8082/v1/rerank
# HINDSIGHT_API_RERANKER_COHERE_MODEL=qwen3-reranker-0.6b
# HINDSIGHT_API_RERANKER_COHERE_API_KEY=dummy
# HINDSIGHT_API_RERANKER_MAX_CANDIDATES=30

Die Variablennamen sind anbieter-spezifisch, und ein knappes Versagen ist stumm: HINDSIGHT_API_EMBEDDINGS_BASE_URL ist der falsche Schlüssel, und Hindsight zielt still auf OpenAIs eigenen Embedding-Endpunkt statt auf Ihren lokalen Server. Verwenden Sie HINDSIGHT_API_EMBEDDINGS_OPENAI_BASE_URL. Mit dem Cohere-kompatiblen Reranker-Weg postet Hindsight den vollen Cohere-Style-Körper an HINDSIGHT_API_RERANKER_COHERE_BASE_URL; wenn das Container-Log einen 404 für /v1/rerank/rerank zeigt, hängt Ihr Build /rerank selbst an und der Wert sollte bei /v1 enden.

Für Optionen B und C, verwenden Sie den HINDSIGHT_API_EMBEDDINGS_QUERY_PREFIX-Wert aus Embedding-Modelle (Option A lässt es ungesetzt). Testen Sie Query-zu-Passage-Abfrage auf Ihren tatsächlichen Erinnerungen nach dem ersten Retain.

Kontrolle, was erinnert wird

Mit dem laufenden Stack ist der nächste Fehlerszenario normalerweise der Schreibpfad: Hermes standardmäßig auf auto_retain: true, also kann jeder Gesprächs-Round in die Bank extrahiert werden. Falsche Vermutungen, verworfene Pläne und exploratorische Aussagen werden zu durchsuchbaren Fakten, und späterer Recall behandelt sie als Evidenz — die Schleife, die in selbst verstärkende Speicherschleifen beschrieben wird. Die Erfassungs-Policy für Hindsight unter anderen Anbietern wird zusammengefasst in Vergleich von Agenten-Speicher-Anbietern.

Erfassungs-Modi, die heute existieren

Modus Hermes / Hindsight Einstellungen Was Sie bekommen
Kontinuierlich auto_retain: true, retain_every_n_turns: 1 Jeder Round wird bewahrt und extrahiert
Batch-Auto auto_retain: true, erhöhen von retain_every_n_turns Weniger, größere Retain-Loads — immer noch automatisch, keine Prüfungs-Queue
Nur explizit auto_retain: false + Tool hindsight_retain Speicherung nur, wenn der Agent das Tool aufruft (zum Beispiel nach „merke dir das“)
Sitzungs-Synthese End-of-Session hindsight_retain einer Zusammenfassung, oder Bank reflect / Konsolidierung Ein kuratiertes Schreiben, wenn Sie oder der Agent den Aufruf disziplinieren — kein eingebauter Flush-for-Approval

auto_retain auf false zu setzen deaktiviert die automatische Speicherung. Es fügt nicht einen menschlichen Genehmigungsdialog vor jedem Schreiben hinzu. Der Agent kann immer noch hindsight_retain aufrufen, wann immer seine Tools es erlauben; behandeln Sie explizites Retain als bewusste Erfassung, nicht als anhängende Queue.

Die Genehmigungs-Queue-Lücke

Ein häufiger Wunsch ist eine anhängende Queue von Kandidaten-Erinnerungen, die Sie prüfen und genehmigen, bevor sie in die Bank einfließen. Hindsight unter Hermes stellt diesen Vertrag heute nicht bereit. Mnemosyne für Hermes implementiert in einigen Versionen anbieter-spezifische gestufte Schreiben; dieser Pfad ist kein geteilter Hermes-Standard und gilt nicht für das Hindsight-Plugin. Bis ein Upstream-Genehmigungsfluss existiert, ist das machbare Muster auto_retain: false, bewusste hindsight_retain und Inspektion oder Löschung in der Hindsight-Kontrollflächen-UI, bevor die nächste Sitzung auf einer schlechten Tatsache verlässt. Es gibt keinen fehlenden write_approval-Schlüssel für Hindsight, den Sie in config.json suchen müssten.

Bank-Steuerung (Missions, Labels, Direktiven, mentale Modelle)

Menschen nennen die nächste Ebene oft „Fine-Tuning“. In Hindsight ist es meistens Bank-Konfiguration, nicht nur Hermeas config.json: Missions und Extraktionseinstellungen lenken, was Retain behält; Labels strukturieren Entitäten; Direktiven und mentale Modelle formen spätere Synthesen.

Kontrolle Wo sie lebt Wie sie hilft
Retain-Mission (retain_mission / Hermes bank_retain_mission) Bank-Konfiguration Klarsprachige „Achte auf X, ignoriere Y“ in Extraktion injiziert
Extraktionsmodus (concise, verbose, custom, …) Bank-Konfiguration concise (Standard) behält langfristig wertvolle Fakten; custom ersetzt eingebaute Regeln via retain_custom_instructions
Entitäts-Labels Bank-Konfiguration Kontrolliertes key:value-Vokabular zur Retain-Zeit → Grafik-Links und optionale Tags; verbessert Abfrage-Struktur, lehnt falsch Aussagen nicht von selbst ab
Direktiven („harte Regeln“) Bank-Direktiven-API Explizite Anweisungen, die während Reflect durchgesetzt werden (Tag-scope); beschränken Synthese, keine Schreibgenehmigungs-Gate
Mentale Modelle Bank-mentales-Modell-API Laufende Antworten auf wiederkehrende Fragen, aktualisiert via Reflect aus passenden Erinnerungen; abgeleitet, also vergiften schlechte Quellfakten sie immer noch
Reflect / Beobachtungs-Mission Bank-Konfiguration Lenkt Synthese und Konsolidierung, nicht den rohen Retain-Feuerhose

Missions, präzise Extraktion und Labels reduzieren Rauschen und verbessern die Abfrage. Sie ersetzen nicht das Ausschalten von Auto-Retain, wenn Genauigkeit wichtiger ist als Vollständigkeit. Bevorzugen Sie eine kurze Retain-Mission, die dauerhafte Projektentscheidungen benennt und Chat-Logistik ignoriert; fügen Sie Entitäts-Labels nur hinzu, wenn Sie eine echte Taxonomie haben; fügen Sie mentale Modelle für zwei oder drei wiederkehrende Fragen hinzu, nachdem die Bank bereits saubere Fakten hält.

Empfohlenes Hygiene-Profil

Ein konkreter Startpunkt für eine persönliche Hermes-Bank:

{
  "mode": "local_external",
  "api_url": "http://HINDSIGHT_VM_IP:8888",
  "bank_id": "hermes",
  "memory_mode": "hybrid",
  "auto_recall": true,
  "recall_sync": false,
  "auto_retain": false,
  "retain_async": true,
  "recall_prefetch_method": "recall"
}

Auf der Bank, setzen Sie eine Retain-Mission und lassen Sie die Extraktion im concise-Modus (über die Kontrollfläche oder Banks-API). Nach einem expliziten Retain, öffnen Sie die UI, bestätigen Sie die Beobachtung und löschen Sie Fehler, bevor Konsolidierung oder mentales-Modell-Aktualisierung läuft. Lassen Sie recall_prefetch_method bei recall — reflect gibt einen Chat-Modell-Aufruf vor jedem Round aus und injiziert Synthese statt der zugrunde liegenden Fakten.

Hermes Agent mit Hindsight verbinden

Auf der Hermes VM, installieren Sie das Katalog-Plugin, und führen Sie dann den Setup-Assistenten aus. Wählen Sie Hindsight und den local_external-Modus; das Plugin muss kein eingebettetes PostgreSQL starten oder den Hindsight-Modell-Stack lokal ausführen, und local_embedded würde einen zweiten Hindsight-Daemon neben dem Container starten, den Sie gerade ausgeführt haben.

hermes plugins install hindsight
hermes memory setup hindsight

Es wird eine Interessante Menge von Optionen für die Agentenrolle mit Hindsight geben. Auswahl der Agentenrolle mit Hindsight

hermes memory status

Die externe Hindsight-Verbindung lebt in ~/.hermes/hindsight/config.json. Eine illustrative Konfiguration, die kontinuierliche Erfassung (Hermes-Standards) behält, ist:

{
  "mode": "local_external",
  "api_url": "http://HINDSIGHT_VM_IP:8888",
  "bank_id": "hermes",
  "memory_mode": "hybrid",
  "auto_recall": true,
  "recall_sync": false,
  "auto_retain": true,
  "retain_async": true,
  "retain_every_n_turns": 1
}

Für nur explizites Retain und Bank-Steuerung, verwenden Sie das Hygiene-Profil in Kontrolle, was erinnert wird, anstatt auto_retain aktiv zu lassen. recall_sync: false priorisiert interaktive Reaktionsfähigkeit, kann aber erinnerungskontext auf dem folgenden Round injizieren. Verwenden Sie synchronen Recall, wenn die aktuelle Anfrage die neuesten Erinnerungen einbeziehen muss, bevor das Modell mit dem Antworten beginnt. retain_async: true verhindert das Blockieren gewöhnlicher Antworten, während Erinnerungen verarbeitet werden.

Der Standard-Recall des Plugins ist nur Beobachtungen; rohe Welt- und Erfahrungsfakten bleiben in der Bank und aus dem Prompt, bis Konsolidierung eine Beobachtung geschrieben hat, oder bis Sie recall_types auf observation,world,experience erweitern. Das Erweitern für die erste Woche und das Beobachten der Kontrollfläche, dann das Verengen, ist eine sinnvolle Reihenfolge.

Eingebautes Hermes-Speicher bleibt neben dem Anbieter aktiv; das Behalten von MEMORY.md und USER.md aktiv, während Sie lernen, was Hindsight hinzufügt, ist in Ordnung, und der Speicher-System-Artikel ist der Ort, um zu entscheiden, ob die flachen Dateien bleiben sollten.

Starten Sie das Gateway neu, wenn es bereits läuft:

hermes gateway restart
hermes memory status

Der Status sollte Hindsight als aktiven Anbieter identifizieren. Für einen breiteren Befehlsreferenz, einschließlich Hermeas TUI und Plugin-Befehle, siehe das Hermes Agent CLI Spickzettel.

Speicher validieren, nicht nur Installation

Fragen Sie Hermes, eine wegwerfbare Tatsache über ein Testprojekt zu merken, starten Sie eine andere Sitzung und fragen Sie nach dieser Tatsache erneut. Bewahren ist asynchron standardmäßig und Extraktion wartet auf das Chat-Modell, also geben Sie dem Haupt-llama.cpp-Server einen Moment, bevor Sie urteilen. Dann testen Sie einen härteren Fall: sagen Sie Hermes, dass eine frühere Entscheidung sich geändert hat und fragen Sie, welche Entscheidung aktuell ist und warum. Prüfen Sie Hindsights UI und gespeicherte Beobachtungen, anstatt anzunehmen, dass memory status beweist, dass Ingestion und Recall korrekt sind.

Wenn die Antwort leer zurückkommt, inspizieren Sie die Kontrollfläche, bevor Sie Modelle ändern. Ein Retain kann erfolgreich sein und immer noch für Recall unsichtbar, während recall_types nur Beobachtungen ist und Konsolidierung nicht gelaufen ist — das Erweitern von recall_types ist der erste Check. Ein Connection Refused im Embedding-Server-Log bedeutet, dass der Container den Embedding-Port nicht erreichen kann, und alle Nullen-Reranker-Scores bedeuten, dass die GGUF die falsche Konversion ist.

Schreibpfad-Wahlen (auto_retain, Missions, Genehmigungs-Lücke) werden in Kontrolle, was erinnert wird abgedeckt.

Fehlerbehebung und operative Hinweise

Symptom Wahrscheinliche Ursache Erster Check
Hermes sagt Anbieter nicht verfügbar Falsche local_external URL oder Netzwerkregel curl http://HINDSIGHT_VM_IP:8888/health
Docker startet, PostgreSQL-Fehler Fehlende Erweiterung, falsche Anmeldedaten oder unzureichender Freigedaten-Speicher Container-Logs und pg_extension
Embeddings geben 401 oder 404 zurück Falsche OpenAI-kompatible URL, falscher Umgebungsvariablenname oder Modell-Alias-Unstimmigkeit Direkter /v1/embeddings-Test und Variablennamen
Reranking schlägt fehl Endpunkt- oder Antwortformat-Unstimmigkeit, einschließlich doppelter /rerank-Pfad Direkter /v1/rerank-Test und Container-Log
Recall liefert nichts Brauchbares recall_types auf Beobachtungen beschränkt oder Nullen-Reranker-Scores Kontrollfläche, dann recall_types, dann Reranker-Konversion
Vorhandene Bank meldet Dimensions-Unstimmigkeit Embedding-Modell geändert Vektoren neu aufbauen/Reimportieren mit einem konsistenten Modell
Hermes-Antworten verlangsamen sich Synchoner Recall oder geteilter LLM-Konflikt Synchronen Recall ausschalten; Retain-Konvergenz begrenzen
Irrelevante Erinnerungen wiederholen sich Schwache Extraktion, rauschige Abfrage oder unzureichende Konsolidierung Beobachtungen und Relevanz-Scores inspizieren

Eine praktische kleine Bereitstellung ist 2-4 vCPUs und 4-6 GB RAM für die Hindsight-API-VM, wenn PostgreSQL und alle Inferenz extern sind. Die Festplatten-Zuweisung hängt immer noch vom gewählten Docker-Image und beibehaltenen Image-Schichten ab; weisen Sie ungefähr 30-40 GB initial mit Raum zum Erweitern zu. Dimensionieren Sie den PostgreSQL-Host basierend auf tatsächlicher Speichergröße, Speicherleistung und den anderen Datenbanken, die er bedient.

Sicherung und Wiederherstellung der Hindsight-Bank

Die Speicherbank ist der einzige Zustand, der wichtig ist, und sie lebt in PostgreSQL. In Option B ist das eine Datenbank, die Sie verwalten; in Option A ist es das eingebettete pg0 benannte Volume innerhalb des Containers. Sichern Sie es unabhängig vom Hindsight-Container — das Neu-erstellen des Containers, ohne zuerst das Volume oder die Datenbank zu erfassen, verwirft die Bank, und hermes backup erreicht keine Bank, die in einem separaten Dienst läuft.

Option B — externes PostgreSQL. Dumpen Sie die hindsight-Datenbank im Custom-Format und wiederherstellen Sie sie in eine Scratch-Datenbank, um das Archiv zu verifizieren, bevor Sie ihm vertrauen:

pg_dump -h POSTGRES_IP -U hindsight -Fc hindsight > hindsight-bank.dump

# restore into a scratch database to prove the dump is usable
createdb -h POSTGRES_IP -U postgres hindsight-verify
pg_restore -h POSTGRES_IP -U postgres -d hindsight-verify hindsight-bank.dump

Bestätigen Sie die pgvector-Erweiterung und eine Beispiel-Recall in der wiederhergestellten Kopie, bevor Sie das ursprüngliche Dump-Ziel löschen. Bewahren Sie das Dump auf einem anderen Host als der Hindsight-VM auf und führen Sie dies als PostgreSQL-Administrator (eine Rolle, die Datenbanken erstellen kann) aus, nicht als Anwendungsrolle.

Option A — alle-in-einem-Container. Die eingebettete Datenbank ist ein benanntes Volume, also stoppen Sie den Container und packen Sie das Volume über ein Wegwerf-Image:

docker stop hindsight
docker run --rm -v hindsight-pg0:/data -v "$PWD":/backup alpine \
  tar czf /backup/hindsight-bank.tgz -C /data .
docker start hindsight

Der Mount-Punkt innerhalb des tar-Containers (/data) ist willkürlich; er aliasiert einfach das benannte Volume, damit tar es lesen kann. Zum Wiederherstellen, stoppen Sie den Container, leeren Sie das Volume und entpacken Sie das Archiv zurück hinein, oder zeigen Sie den Container auf die externe PostgreSQL-Wiederherstellung aus Option B.

Nehmen Sie einen Snapshot in drei Momenten, anstatt auf einem Kalenderplan: bevor Sie das Embedding-Modell ändern, vor einem großen Hindsight- oder PostgreSQL-Upgrade und vor einem reflect- oder Konsolidierungsdurchgang, der die Bank umschreibt. Eine Sicherung, die Sie in eine Scratch-Bank wiederhergestellt haben, ist mehr wert als eine, die Sie nur geschrieben haben.

Exportieren, Importieren und Migrieren der Speicherbank

Sicherung und Wiederherstellung schützen die Bank vor Ort. Export/Import bewegt sie zwischen Hindsight-Instanzen, und das ist, was eine Modelländerung tatsächlich zwingt zu tun.

Das Ändern des Embedding-Modells ist keine Konfigurationsbearbeitung. Die Vektoren in der Bank wurden mit dem alten Modell berechnet, und ein anderes Modell — zum Beispiel der gebündelte 384-dimensionale BGE-Embedder gegenüber 1024-dimensionalem Qwen3-Embedding-0.6B — schreibt in einen anderen Raum und normalerweise eine andere Breite. Sie können die vorhandene Instanz nicht neu auf den neuen Embedder zeigen lassen und die alten Vektoren behalten; die Dimensionen müssen durch Re-Embedding jeder Erinnerung mit dem neuen Embedding-Modell neu berechnet werden.

Weil der Embedder und seine Konfiguration pro Hindsight-Instanz gesetzt sind, ist der saubere Weg, eine neue Instanz mit der neuen Embedding-Konfiguration aufzubauen und die Bank in sie zu migrieren, anstatt Vektoren innerhalb der bereits Recall bereitstellenden neu aufzubauen. Die Hindsight-API kann die Bank auch bewegen, aber für eine einmalige Änderung ist Export/Import der einfachere und besser inspizierbare Weg:

# export the bank from the old instance
docker exec hindsight \
  hindsight-admin export-bank \
    --bank hermes2 \
    --output /tmp/hermes2.zip

docker cp hindsight:/tmp/hermes2.zip ./hermes2.zip

ls -lh hermes2.zip
unzip -t hermes2.zip

# import the bank into the new instance
docker cp ./hermes2.zip hindsight-q06:/tmp/hermes2.zip

docker exec hindsight-q06 \
  hindsight-admin import-bank \
    --archive /tmp/hermes2.zip

unzip -t verifiziert das Archiv, bevor Sie es zur neuen Instanz schicken. Nach dem Import, zeigen Sie Hermes neu auf die api_url der neuen Instanz in ~/.hermes/hindsight/config.json, starten Sie das Gateway neu und führen Sie die Speicher-Validierung von früher aus: eine bewahrte Tatsache sollte durch den neuen Embedder erinnert werden. Lassen Sie die alte Bank und ihre Vektoren in der alten Instanz, bis die neue funktioniert, so dass Sie immer noch einen funktionierenden Fallback haben.

Überwachen, beschneiden und die Bank stabil halten

Mit der laufenden Bank ist die tägliche Arbeit, zu beobachten, was das Extraktionsmodell zum Speichern entschieden hat, und abgeleitete Zustände im Griff zu halten. Verwenden Sie die Kontrollflächen-UI (hindsight-embed -p hermes ui start), um Beobachtungen, Relevanz-Scores und Konsolidierungsoutput zu inspizieren, anstatt anzunehmen, dass memory status beweist, dass Ingestion und Recall korrekt sind. Duplizierte oder veraltete Erinnerungen sind normalerweise eine schwache Extraktion oder eine unterlaufenen Konsolidierung, also beheben Sie die Extraktionsebene oder die Konsolidierungsfrequenz, bevor Sie die Abfrage erweitern.

Zwei Wartungsfallen sind es wert, getestet zu werden, bevor Sie sich auf die Bank verlassen. Erstens, das Löschen einer Beobachtung garantiert nicht, dass jede abgeleitete Darstellung damit verschwindet — ein reflect-Fakt oder eine Grafik-Kante, die daraus gebaut wurde, kann das Löschen überleben, also verifizieren Sie das Löschen von Ende zu Ende, dasselbe Provenienz-Bedenken, das in selbst verstärkende Speicherschleifen abgedeckt wird. Zweitens, halten Sie HINDSIGHT_API_WORKER_ID über Neuanlegungen hinweg stabil und fixieren Sie ein spezifisches Image-Tag: eine Aufgabe, die in der Luft hing, als der Container starb, bleibt unter der alten Worker-ID stecken, und ein sich bewegendes Tag ist eine schlechte Wahl für eine Datenbank, die Sie behalten möchten.

Referenzen

Abonnieren

Neue Beiträge zu Systemen, Infrastruktur und KI-Engineering.