RAG-Suche: Elasticsearch direkt statt RAGFlow-API #51
Labels
No labels
flugscanner
fuenfvoracht
infrastruktur
jarvis
ki-tower
nice-to-have
prio-1
wartung
wordpress
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: orbitalo/homelab-brain#51
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
Die RAGFlow Hybrid-Suche liefert für deutsche Dokumente nur 60% Trefferquote:
RERANK_LIMIT(64) zu klein für 172k ChunksLösung
rag.pyim Hausmeister-Bot (CT 116) umbauen: Elasticsearch direkt abfragen statt RAGFlow/retrievalAPI.Architektur
RAGFlow bleibt als Ingestion-Pipeline (Upload, OCR, Chunking, Embedding). Nur der Suchweg ändert sich.
Aufgaben
rag.pyumschreiben: ES-Query mit deutschem Analyzer + Vektor-Suchescp+pct push+systemctl restartTechnische Details
ragflow_61f51c8c279011f1a174bd19863ba33eq_768_vecdc24edda27a311f19fe7fb811de6f016elastic:infini_rag_flowcontent_with_weight(Klartext)docnm_kwd(keyword,__= Ordnertrenner)100.109.101.12Hinweise
scp pve-hetzner:/tmp/ && pct push 116, NICHT SSH-Heredocsystemctl restart hausmeister-bot.servicerag.pyist noch alte Version (RAGFlow-API)Umsetzungsplan (Analyse abgeschlossen)
Erkenntnisse aus der Analyse
content_with_weight"index": false) — nur gespeichert, keine Textsuche moeglichcontent_ltks(whitespace-Analyzer, kein Deutsch)q_768_vec(768d, cosine, nomic-embed-text)germanverfuegbar und getestetArchitektur Vorher/Nachher
Vorher:
Nachher:
RAGFlow bleibt als Ingestion-Pipeline (Upload, OCR, Chunking, Embedding).
Schritt 1: iptables Port-Forward (pve-mu-3)
Auf pve-mu-3 (100.109.101.12):
Persistierung: Beide + bestehende 8080-Regeln als
post-upin/etc/network/interfacesuntervmbr0.Test:
curl -u elastic:infini_rag_flow http://100.109.101.12:1200/von pve-hetzner.Schritt 2: Deutsches Textfeld in ES
Auf CT 700 (pve-mu-3):
Kein Index-Neustart noetig. German Analyzer = lowercase + Stopwords + Stemming (built-in).
Schritt 3: tools/rag.py umschreiben
Datei:
/root/homelab-brain/homelab-ai-bot/tools/rag.pyhttp://100.84.255.83:11434/api/embeddings,nomic-embed-text)q_768_vec(k=20, num_candidates=200) + match aufcontent_de(Fallback:content_ltks)docnm_kwdTOOLS,HANDLERS,SYSTEM_PROMPT_EXTRAurllib.request,json)Schritt 4: Deploy
Standard Git-Workflow: Sync aus → commit → push → restart → logs → Sync an.
Reihenfolge
Umsetzung abgeschlossen (26.03.2026)
Erledigt
192.168.178.154:1200(ES) + FORWARD-Regel; Persistenz: idempotentepost-up-Zeilen in/etc/network/interfacesuntervmbr0(8080 + 1200).content_de(Analyzergerman) angelegt;_update_by_querylaeuft/lief (172k Chunks) — bei Start der Umsetzung ~35k updated, Task laeuft weiter bis complete.homelab-ai-bot/tools/rag.py— Hybrid kNN (q_768_vec) +matchaufcontent_de,content_ltks,docnm_kwd; Filterkb_id; Embedding Ollamanomic-embed-text; OCR-Heuristik; Dedupe nachdocnm_kwd.f9b69ad2aufmain, gepusht.sync-state.sh,systemctl restart hausmeister-botCT 116 — Bot aktiv, Ollama-Warmup inkl.nomic-embed-text.Tests (CT 116 / Host)
handle_rag_search("Grundsteuer", top_k=2)→ sinnvolle Treffer (Grundsteuerbescheid).handle_rag_search("Allianz Versicherung", top_k=2)→ Allianz-PDFs.Hinweis Auto-Sync
/etc/crontabsync-state war kurz auskommentiert, nach Deploy wieder aktiv.E2E-Tests bestanden: 19/20 (26.03.2026)
Commits
f9b69ad2— rag.py: ES direkt statt RAGFlow0e1c7a6e— llm.py: Routing-Fix (Dokument-Keywords in LOCAL_OVERRIDES)a43c0b91— rag.py: bessere Treffer + Anti-Halluzination59e53a27— rag.py: 19/20 E2E bestanden, Dedup + Pflicht-PromptWas wurde gefixt
Routing (llm.py): "aktuell" in Fragen wie "welche versicherungen habe ich aktuell?" routete zu Perplexity Sonar (kein Tool-Calling). Fix: Dokument-Keywords (versicherung, vertrag, steuer, rente, dokument...) in
_LOCAL_OVERRIDES.Dedup (rag.py): Dateinamen-basiert (Extension + Kopie-Marker ignorieren). Vorher: "Kuendigung.txt", "Kuendigung.pdf", "Kuendigung(1).pdf" als 3 verschiedene Treffer.
Anti-Halluzination: Expliziter Ende-Marker "(Ende der Ergebnisse)". LLM-Prompt: "ERFINDE KEINE Details die nicht im Ergebnis stehen".
Pflicht-Aufruf: SYSTEM_PROMPT_EXTRA verstaerkt: rag_search IMMER aufrufen bei Dokument-Fragen, auch wenn Gedaechtnis was zu wissen glaubt.
Testergebnisse (20 Fragen, vollstaendiger LLM+Tool-Flow)
content_de Status
75k/172k Chunks befuellt, zweiter _update_by_query gestartet (Task 738488).
Offene Aufgabe