Hybride Suche mit RRF verbessert KI-Gedächtnissystem im Vergleich zu reiner Vektorsuche

Ein Open-Source-Gedächtnissystem für KI-Assistenten wurde entwickelt, das PostgreSQL mit pgvector in einer lokal-first, selbst-gehosteten Umgebung nutzt. Das System speichert Informationen, die KI-Assistenten sich über Sitzungen hinweg merken sollen, und macht sie durchsuchbar.
Warum reine Vektorsuche nicht ausreichte
Der Entwickler begann mit reiner Vektorsuche: Einbetten von Abfragen, Nutzung der Kosinusähnlichkeit und Rückgabe der Top-k-Ergebnisse. Während dies bei vagen Fragen funktionierte, scheiterte es konsequent bei exakten Übereinstimmungen. Beispielsweise würde die Suche nach "RRF merging" Abschnitte über "combining ranked lists" von vor Monaten zurückgeben, anstatt des Dokuments, das wörtlich "RRF merging" enthält.
Hybrid-Suchlösung
Die Lösung umfasste das Hinzufügen eines zweiten Sucharms: Volltextsuche mit PostgreSQLs tsvector und einem GIN-Index. Diese Schlüsselwortabgleichung fängt auf, was die Vektorsuche verpasst. Dies erzeugte jedoch zwei Ranglisten, die fusioniert werden mussten.
Reciprocal Rank Fusion (RRF)
Reciprocal Rank Fusion erwies sich als die Lösung zum Zusammenführen der beiden Ranglisten. Die Formel ist einfach: score = 1 / (k + rank), wobei k=60 (der Standardwert). Ergebnisse, die in beiden Listen erscheinen, erhalten beide Scores addiert. Dieser Ansatz erfordert keine Gewichtungsanpassung und keine Score-Normalisierung zwischen Kosinusähnlichkeit und ts_rank – er nutzt nur Rangpositionen.
Abfrageanreicherungstechnik
Vor der Suche leitet das System Abfragen durch den WordPiece-Tokenizer des Embedding-Modells, um Schlüsselbegriffe zu extrahieren (Multi-Subword-Tokens, die wahrscheinlich technische oder domänenspezifische Begriffe sind). Dies generiert bis zu 3 Abfragevarianten, bettet alle ein und sucht parallel. So werden Ergebnisse erfasst, die eine Formulierung verpassen könnte.
Technischer Stack
- PostgreSQL 16 + pgvector (HNSW-Index für Vektoren, GIN-Index für Volltext)
- all-MiniLM-L6-v2 für Embeddings (384 Dimensionen, läuft auf CPU)
- Python mit async psycopg 3
- 3 Aufnahmeadapter: Markdown, Klartext und Claude-Konversations-JSON
Das gesamte System läuft lokal ohne API-Aufrufe für Embeddings und ohne Cloud-Abhängigkeiten. Der Code wurde kürzlich ausgeliefert, und der Entwickler hat einen detaillierten Blogbeitrag über den vollständigen Ansatz verfasst.
📖 Read the full source: r/LocalLLaMA
👀 Siehe auch

Lokales RAG-Tool, erstellt mit Nemotron Nano 9B v2 und vLLM-Tool-Aufrufen
Ein Entwickler hat ein lokales RAG-Forschungstool erstellt, das vollständig auf einer einzelnen GPU läuft, indem er Nemotron Nano 9B v2 Japanese auf vLLM mit benutzerdefinierten Parser-Plugins für Tool-Aufrufe verwendet. Das System verfügt über einen zweistufigen Extraktions-Ausführungs-Flow mit zweisprachiger Schlüsselwortextraktion und paralleler FTS5/DuckDuckGo-Suche.

Sonicker: Voice-Cloning-Web-App, erstellt mit Claude Code in 4 Tagen
Sonicker ist eine Voice-Cloning-Web-App, die nur 3 Sekunden Audioeingabe benötigt und 10 Sprachen unterstützt. Der Entwickler hat sie allein in 4 Tagen mit Claude Code für das gesamte Frontend, die API-Integration und das Deployment erstellt.

So verschieben oder benennen Sie Claude-Code-Projektordner, ohne Sitzungsverlauf zu verlieren
Claude Code speichert die Sitzungshistorie mithilfe absoluter Projektpfade, sodass das Verschieben oder Umbenennen von Ordnern mit mv den Zugriff auf Sitzungen unterbricht. Das Tool clamp behebt dies, indem es Sitzungsdaten migriert, um sie an neue Pfade anzupassen.

Fable 5 in Claude Code: Kostenanalyse des ersten Tages — 210 Dollar API-Äquivalent, 0 Dollar bezahlt
Ein Entwickler wechselte in Claude Code zu claude-fable-5 und maß die Token-Nutzung bei 742 Antworten. API-äquivalente Kosten: 210,15 $. Tatsächlich bezahlt: 0 $ während des Aktionszeitraums bis zum 22. Juni.