Neural Knowledge Brain
Eigenständiger Go-Dienst für Agent, lokale Knowledgebase, GLPI-Knowledgebase und autonome AI-THINK-Anreicherung. Der Dienst hält einen vollständigen Wissensgraphen im Arbeitsspeicher und rendert eine hierarchisch verdichtete Fullscreen-Ansicht als lebende Hirnaktivität.
Kernfunktionen
- Fullscreen-Canvas mit 3D-Hirnform, semantischen Cortex-Regionen und hierarchischem Level-of-Detail.
- Drei Visualisierungen: Neural-Brain, gleichmäßige 3D-Honeycomb-Wabe und semantische Constellation-Ansicht mit Themensternen.
- Persistierbarer ECO-Modus für schwächere Systeme sowie weiche Node-, Edge- und Ansichtsübergänge ohne sichtbaren Komplett-Reload.
- Laufzeitsteuerung für Learning und Thinking sowie drei einfache, exakte
source-Filter für Lernen, Anzeige und AI-THINK. - Echtzeitaktivierung über Server-Sent Events: Nodes glühen, aggregierte Edges leuchten und Partikel folgen tatsächlichen Wissenspfaden.
- Ingest lokaler produktiver Knowledge-JSONs sowie separater AI-THINK-Staging-Dateien.
- Optionaler read-only Ingest sichtbarer Beiträge aus der GLPI-Knowledgebase.
- Read-only Tailing der Agent-
runs.jsonlund optionale Suchtelemetrie aus Agent und KB. - Ollama-Pool mit mehreren unabhängigen Instanzen, Routing, Healthchecks, Cooldown und Failover.
- Embeddings über
embeddinggemma, Beziehungsanalyse überqwen3:8b. - Mehrstufiger AI-THINK-Worker: Relation Thinking, quellengebundene Wissenskonsolidierung, Recherche offener Punkte und reine Knowledge-Synthesis für vollständige KB-Artikel.
- Persistente Autonomous-Research-Queue: selbstständige Wissenslückensuche, externe Trigger, Leerlauf-/Budgetsteuerung und niedrig priorisierte Übergabe an den vorhandenen Ollama-Pool.
- Inkrementelle SQLite/WAL-Persistenz über
modernc.org/sqlite: binäre Float32-Embeddings und standardmäßig alle fünf Minuten gebündelte Row-Updates. - Separates BRAIN ANALYSIS CENTER mit persistenter Laufhistorie, exakten Node-/Edge-/Vektoränderungen, Similarity-/Confidence-Auswertung, Research-Ergebnissen und technischem Roh-Eventstream.
Vertrauens- und Schreibgrenzen
Das Brain liest produktive Quellen und GLPI-KB ausschließlich. Es schreibt niemals in produktive Knowledge-Dateien oder nach GLPI zurück.
Schreibbar sind nur:
- das eigene
BRAIN_DATA_DIRfür Graphzustand und GLPI-KB-Cache; - der erste Pfad aus
BRAIN_STAGING_DIRSfür AI-THINK-Entwürfe.
AI-THINK bleibt auto_reply: false, trägt die Kategorien AI-THINK und AI-Staging und wird erst nach einer expliziten Freigabe im bestehenden Editor produktiv. Artikelentwürfe erhalten zusätzlich AI-Synthesis; text und answer enthalten ausschließlich den fachlichen Artikel. Planung, Bewertung, Confidence, Quellen-IDs und Rechercheprotokolle werden separat unter BRAIN_DATA_DIR/article-metadata/ gespeichert.
Grounded Knowledge Synthesis
Verwandtes Wissen wird nicht direkt als Bewertungsbericht gespeichert. Das Brain konsolidiert zunächst belegte Fakten, Lösungsschritte, Widersprüche sowie kritische und optionale Wissenslücken. Kritische Unklarheiten werden iterativ über präzise deutsche und englische SearXNG-Queries recherchiert. site:-Filter werden grundsätzlich entfernt, damit eine vom Modell falsch zugeordnete Herstellerdomain die Treffer nicht künstlich auf null reduziert. Die besten Treffer durchlaufen ein recall-orientiertes Relevanz- und Quellenqualitäts-Gate, werden als vollständige Webseite geladen und nach einer zweiten Volltextprüfung erneut konsolidiert. Nur akzeptierte Volltextbelege werden sofort eingebettet, mit den Fachkategorien ihrer internen Quellen eingeordnet, unter BRAIN_DATA_DIR/research-evidence/ für spätere Zyklen aufbewahrt und über grounded_by mit dem erzeugten Artikel verbunden. Bereits gelernte Belege werden bei verbundenen Themen erneut konsolidiert, ohne die Webseite unnötig noch einmal abzurufen. Optionale Vertiefungen blockieren keinen ansonsten belastbaren Artikel. Interne Aussagen ohne reale Referenz auf eine tatsächlich vorhandene Quelle werden verworfen. Konzept-, Referenz- und Entscheidungsartikel erhalten eine passende fachliche Struktur statt künstlich erzeugter Schrittfolgen.
Details: KNOWLEDGE-SYNTHESIS.md und ITERATIVE-GROUNDED-RESEARCH.md.
Schnellstart
cp .env.example .env
# Pfade, Ollama-Pool und optional GLPI-Zugangsdaten anpassen.
set -a; . ./.env; set +a
go run ./cmd/brain
Oberfläche: http://localhost:8090
Technisches Analyse-Dashboard: http://localhost:8090/analysis.html
Das Analyse-Dashboard ist von der animierten Gehirnansicht getrennt. Es bewertet Läufe als positives Ergebnis, Aktualisierung, Bereinigung, Prüfung ohne Übernahme oder Fehler und zeigt die konkret betroffenen Node-, Edge- und Vektor-IDs. Die Historie wird in graph.db aufgezeichnet und beginnt ab Installation dieser Version. Details: ANALYSIS-DASHBOARD.md.
Docker:
docker compose up -d --build
Mehrere Ollama-Instanzen
OLLAMA_URLS hat Vorrang vor dem weiterhin unterstützten OLLAMA_URL.
OLLAMA_URLS=http://10.20.30.21:11434,http://10.20.30.22:11434,http://10.20.30.23:11434
OLLAMA_NODE_NAMES=gpu-01,gpu-02,gpu-03
OLLAMA_NODE_WEIGHTS=1,1,4
OLLAMA_ROUTING_MODE=least_inflight
OLLAMA_NODE_MAX_INFLIGHT=1
OLLAMA_FAILOVER_ENABLED=true
OLLAMA_FAILOVER_ATTEMPTS=0
OLLAMA_REQUIRE_SAME_MODEL_DIGEST=true
OLLAMA_REQUIRE_EMBEDDING_MODEL=true
Unterstützte Routing-Modi:
least_inflight– bevorzugt den aktuell am wenigsten belasteten Node;round_robin– zyklische Verteilung;weighted– Verteilung entsprechendOLLAMA_NODE_WEIGHTS;fastest_recent– bevorzugt die zuletzt schnellsten Nodes.
Jeder Node muss das Chatmodell besitzen. Mit OLLAMA_REQUIRE_EMBEDDING_MODEL=true muss außerdem jeder Node das Embeddingmodell besitzen. Bei aktivierter Digest-Prüfung wird ein Pool mit unterschiedlichen Modellständen fail-closed behandelt.
Mehr Details: OLLAMA-POOL.md.
GLPI-Knowledgebase einbeziehen
Die Integration verwendet denselben read-only OAuth-/OpenAPI-Ansatz wie der Agent. GLPI entscheidet anhand des Service-Accounts, welche Beiträge sichtbar sind.
GLPI_KB_ENABLED=true
GLPI_URL=https://glpi.example.org
GLPI_API_VERSION=v2.3
GLPI_CLIENT_ID=...
GLPI_CLIENT_SECRET=...
GLPI_USERNAME=...
GLPI_PASSWORD=...
GLPI_KB_PATH=auto
GLPI_KB_LIMIT=500
GLPI_KB_SYNC_INTERVAL=10m
GLPI_KB_SOURCE=GLPI Knowledge Base
Bei GLPI_KB_PATH=auto sucht das Brain im GLPI-OpenAPI-Dokument die lesbare KnowbaseItem-Collection. Die Beiträge werden als produktive Wissens-Nodes mit glpi://KnowbaseItem/<id>-URI aufgenommen. Kategorien und Quelle erzeugen verifizierte Edges. Es gibt keine GLPI-Schreiboperation.
Manueller Sync:
curl -X POST http://localhost:8090/api/glpi-kb/sync
Mehr Details: GLPI-KB.md.
SQLite/WAL-Persistenz und Vorberechnung
BRAIN_PERSIST_INTERVAL=5m
Der Live-Graph liegt im Arbeitsspeicher. Dauerhaft gespeichert werden nur geänderte Zeilen in BRAIN_DATA_DIR/graph.db:
- AI-THINK-, Metadaten- und Cache-Dateien werden atomar geschrieben;
- danach folgen geänderte Nodes, Edges und Vektoren in einer SQLite-Transaktion;
- Embeddings liegen binär als
float32-BLOBs vor; - unveränderte KB-Scans verursachen keine erneuten Graphwrites.
Manueller Flush:
curl -X POST http://localhost:8090/api/flush
Ein auf einem leistungsfähigen System vorberechneter Graph kann kompakt exportiert und auf ein System mit identischen Dokument-IDs und demselben Embedding-Modell kopiert werden:
curl -fsS http://localhost:8090/api/state/export -o graph.db
Mehr Details: PERSISTENCE.md und SQLITE-STORAGE.md.
Laufzeitsteuerung, Visualisierungen und Performance
Die untere Steuerleiste enthält direkte Schalter für LEARNING, THINKING, NEURAL, HONEYCOMB, CONSTELLATION und ECO. Sind Learning und Thinking deaktiviert, bleibt das System im Living-Modus; eingehende Agent- oder KB-Anfragen können weiterhin die tatsächlich verwendeten Notes aktivieren.
Über FILTER werden ausschließlich die exakten Werte des JSON-Feldes source ausgewählt. Es gibt keine Kategoriefilter, keine technische origin-Aliasauflösung und keine Schnittmenge aus Environment und WebUI mehr.
- Lernen: Nur Nodes mit exakt passendem
sourceerhalten neue Embeddings und dürfen bei semantischen Abfragen verwendet werden. - Anzeige: Nur Nodes mit exakt passendem
sourcewerden gerendert; direkt verbundene Kategorie-, Quellen- und Konzept-Nodes bleiben als visuelle Taxonomie sichtbar. - Thinking: Nur Nodes und explizit mit einer Quelle versehene Webbelege mit exakt passendem
sourcedürfen neue Relationen und Artikel speisen.
Mehrere ausgewählte Quellen verwenden ODER-Semantik. Eine leere Liste bedeutet „alle Quellen“. Der Vergleich ist nach dem Entfernen äußerer Leerzeichen case-sensitiv und exakt:
source: "internal-category" passt zu internal-category
source: "internal-category" passt nicht zu Internal-Category
source: "GLPI Knowledge Base" passt nicht zu glpi-kb
Der GLPI-Quellenname stammt ausschließlich aus:
GLPI_KB_SOURCE=GLPI Knowledge Base
Dieser Wert wird in der WebUI immer als Auswahl angeboten, auch wenn GLPI noch nicht synchronisiert wurde oder aktuell 0 Beiträge vorhanden sind.
Die folgenden Environment-Variablen sind nur Startwerte, wenn noch keine neue versionierte runtime-settings.json existiert. Danach ist die WebUI-Auswahl die einzige aktive Konfiguration; es gibt keine zusätzliche Environment-Obergrenze:
BRAIN_LEARNING_ENABLED=true
BRAIN_THINKING_ENABLED=true
# Exakte Werte des KB-JSON-Feldes source; leer = alle
BRAIN_LEARNING_SOURCES=
BRAIN_DISPLAY_SOURCES=
BRAIN_THINKING_SOURCES=
BRAIN_DEFAULT_VIEW=neural # neural | honeycomb | constellation
BRAIN_MAX_DISPLAY_NODES=0 # 0 = unbegrenzt; alternativ z. B. 5000
BRAIN_LOW_POWER_MODE=false
Alte learning_categories, display_categories, thinking_categories und frühere unversionierte Source-Filter werden beim ersten Start dieser Version bewusst ignoriert. Schalter, Ansicht und Performancewerte bleiben erhalten. Beim nächsten Speichern schreibt die WebUI source_filter_version: 1. graph.db muss dafür nicht gelöscht werden.
Die Ansichten erfüllen unterschiedliche Aufgaben:
- Neural zeigt das lebende semantische Netz mit LOD, Cortex, Synapsen und Partikeln.
- Honeycomb rendert
knowledge,ai-thinkundexternalgleichmäßig in einer 3D-Gehirnwabe. Reguläre Edges und Cortex-Flächen bleiben dort unsichtbar. - Constellation ordnet Wissenselemente als Themensterne um semantische Zentren an. Dezente Bahnen und aggregierte Themenverbindungen machen Fachgebiete und Übergänge leichter lesbar als ein dichtes Gesamtnetz.
Der ECO-Schalter begrenzt die Ausgabe auf ungefähr 30 FPS, reduziert die Device-Pixel-Ratio, teure Gradienten, Hintergrundsterne, gleichzeitig sichtbare inaktive Edges, Partikel und Wolken. Aktivierte Nodes, SearXNG-Animationen, Themenzentren und Übergänge bleiben sichtbar. Das ist zusätzlich zum GPU-Node-Limit; der ECO-Modus entfernt keine Wissenselemente.
Graphupdates verändern vorhandene Node-Objekte und Positionen in-place. Neue Elemente blenden ein, entfernte Elemente blenden aus, Ansichtswechsel morphen zwischen den Koordinatenräumen. Unveränderte Snapshots werden übersprungen und reine Edgeupdates lösen keinen vollständigen Layout-Neuaufbau aus.
Mehr Details: SOURCE-ONLY-FILTERS.md, VISUALIZATION-PERFORMANCE.md und RUNTIME-CONTROLS-HONEYCOMB.md.
Autonomous Research: selbstständige Wissensanreicherung
Die Webrecherche ist nicht mehr an einen einzelnen AI-THINK-Artikelversuch gebunden. Ein eigener Opportunity-Scanner bewertet den Graphen regelmäßig auf Widersprüche, fehlende externe Evidenz, Alter, Zentralität und schwache Verknüpfung. Qwen zerlegt geeignete Kandidaten in konkrete Forschungsfragen sowie deutsche und englische SearXNG-Queries.
Aufgaben landen zuerst persistent in graph.db. Ein Low-Priority-Worker least genau eine Aufgabe, prüft Leerlauf und Tagesbudget und verwendet danach die bestehende iterative SearXNG-/Volltext-/Evidenzpipeline. SearXNG-Suchen, Volltextabrufe und Ollama-Aufrufe teilen jetzt zusätzlich eine gemeinsame begrenzte Work-Queue. Semantisch äquivalente Research-Intents werden über Embeddings erkannt: läuft bereits eine gleichbedeutende Recherche, wartet der zweite Auftrag auf ihr Ergebnis; kürzlich abgeschlossene Evidenz kann ohne erneuten Webabruf wiederverwendet werden. Deutsche und englische Query-Varianten innerhalb derselben Forschungsfrage bleiben ausdrücklich erhalten.
BRAIN_AUTONOMOUS_RESEARCH_ENABLED=false
BRAIN_AUTONOMOUS_RESEARCH_IDLE_ONLY=true
BRAIN_AUTONOMOUS_RESEARCH_INTERVAL=30m
BRAIN_AUTONOMOUS_RESEARCH_TASKS_PER_CYCLE=1
BRAIN_AUTONOMOUS_RESEARCH_MAX_TASKS_PER_DAY=12
BRAIN_AUTONOMOUS_RESEARCH_MAX_QUERIES_PER_TASK=6
BRAIN_AUTONOMOUS_RESEARCH_MAX_PAGES_PER_TASK=8
BRAIN_AUTONOMOUS_RESEARCH_MAX_ROUNDS=3
BRAIN_AUTONOMOUS_RESEARCH_MIN_PRIORITY=0.65
BRAIN_AUTONOMOUS_RESEARCH_COOLDOWN=168h
BRAIN_AUTONOMOUS_RESEARCH_LEASE=45m
BRAIN_AUTONOMOUS_RESEARCH_MAX_ATTEMPTS=3
BRAIN_AUTONOMOUS_RESEARCH_QUERY_TRIGGERS=true
BRAIN_AUTONOMOUS_RESEARCH_OPPORTUNITY_LIMIT=8
Der Agent oder andere Systeme können über POST /api/research/tasks explizit Aufgaben einreihen. Die Eventtypen knowledge.answer_insufficient, knowledge.search.empty und agent.answer.uncertain erzeugen über /api/events ebenfalls eine priorisierte Aufgabe. Die WebUI zeigt Queue, Status, Evidenzzahl und Versuche und bietet manuelles Einreihen, Graphanalyse, Queue-Wakeup sowie Abbruch wartender Aufgaben.
Die aktualisierten Integrationspatches unter integrations/agent/ und integrations/knowledgebase/ senden bei einer Suche ohne Treffer automatisch knowledge.search.empty; die Telemetrie bleibt asynchron und fail-open.
Akzeptierte Webbelege werden automatisch gelernt und verknüpft. Neue oder überarbeitete Artikel bleiben weiterhin ausschließlich im AI-Staging und benötigen eine manuelle Freigabe.
Details: AUTONOMOUS-RESEARCH.md.
Autonome Anreicherung
Der Worker arbeitet bewusst sequenziell, trennt aber jetzt zwei Aufgaben:
- Kandidatenpaar aus bestehenden Vektoren auswählen;
- Relation Thinking bewertet ausschließlich die Beziehung und erzeugt eine Edge oder verwirft sie;
- bei einer bestätigten Relation werden drei bis acht verwandte Quellen gesammelt;
- ein eigener Planungsaufruf entscheidet
create,update,mergeoderskip; - nur bei echtem Mehrwert schreibt ein zweiter Modellaufruf einen strukturierten Helpdesk-Artikel;
- der Artikel landet als
AI-THINK/AI-Staging/AI-Synthesismit realemtext- undanswer-Inhalt im Staging; - der In-Memory-Graph sieht den Entwurf sofort, die Datei wird beim nächsten gebündelten Persistenz-Flush atomar geschrieben.
Qualitätsregeln verhindern reine AI-THINK-Ketten: standardmäßig mindestens drei produktive Quellen, mindestens 70 Prozent Produktionswissen und maximal Generierungstiefe zwei.
BRAIN_AUTO_ENRICH=true
BRAIN_ENRICH_INTERVAL=90s
BRAIN_ENRICH_BATCH_SIZE=3
BRAIN_ENRICH_STEP_DELAY=3s
BRAIN_ARTICLE_SYNTHESIS_ENABLED=true
BRAIN_ARTICLE_LANGUAGE=de-DE
BRAIN_ARTICLE_MIN_SOURCES=3
BRAIN_ARTICLE_MAX_SOURCES=8
BRAIN_ARTICLE_MIN_PRODUCTION_RATIO=0.70
BRAIN_ARTICLE_MAX_GENERATION_DEPTH=2
BRAIN_ARTICLE_MIN_CONFIDENCE=0.74
# offene, recall-orientierte Recherche
BRAIN_ARTICLE_RESEARCH_RESULTS=12
BRAIN_ARTICLE_RESEARCH_FETCH_RESULTS=6
BRAIN_ARTICLE_RESEARCH_EXPLORATION_RESULTS=3
BRAIN_ARTICLE_RESEARCH_PREFETCH_MIN_RELEVANCE=0.25
BRAIN_ARTICLE_RESEARCH_MIN_RELEVANCE=0.55
BRAIN_ARTICLE_RESEARCH_MIN_QUALITY=0.35
# gemeinsame Research/Ollama-Queue und semantische Deduplizierung
BRAIN_RESEARCH_OLLAMA_MAX_INFLIGHT=2
BRAIN_RESEARCH_OLLAMA_QUEUE_SIZE=64
BRAIN_RESEARCH_DEDUPE_THRESHOLD=0.92
BRAIN_RESEARCH_DEDUPE_TTL=45m
Details: KNOWLEDGE-SYNTHESIS.md.
Der manuelle AI-THINK-Button bleibt vorhanden. Alternativ:
curl -X POST 'http://localhost:8090/api/enrich?async=1'
HTTP-Endpunkte
| Methode | Pfad | Zweck |
|---|---|---|
GET |
/api/status |
Gesamtstatus inklusive Ollama-Pool, GLPI-KB und Persistenzqueue |
GET |
/api/graph |
vollständiger aktueller In-Memory-Graph |
GET |
/api/analysis |
strukturelle Graphanalyse |
GET |
/api/analysis/dashboard |
detaillierte aktuelle Analyse, Laufhistorie, Zeitreihe und konkretes Änderungsjournal |
GET |
/api/analysis/export |
vollständige Analyse als formatiertes JSON exportieren |
GET |
/api/runtime-settings |
aktuelle Learning-, Thinking-, exakte Source- und View-Einstellungen |
PUT |
/api/runtime-settings |
Laufzeiteinstellungen ändern und gebündelt persistieren |
GET |
/api/sources |
exakte source-Werte mit Anzahl; enthält immer GLPI_KB_SOURCE |
GET |
/api/stream |
SSE-Aktivitätsstrom |
POST |
/api/query |
programmatische Wissensanfrage; in der Fullscreen-UI verborgen |
POST |
/api/events |
optionale Agent-/KB-Telemetrie |
POST |
/api/reindex |
lokaler Scan und Embedding-Abgleich |
POST |
/api/enrich |
AI-THINK-Zyklus einplanen/ausführen |
POST |
/api/glpi-kb/sync |
GLPI-KB manuell synchronisieren |
POST |
/api/flush |
ausstehende Dateien und geänderte SQLite-Zeilen sofort persistieren |
GET |
/api/state/export |
kompakte, konsistente graph.db exportieren |
GET |
/api/research/tasks |
persistente autonome Research-Queue und Workerstatus |
POST |
/api/research/tasks |
externe oder manuelle Rechercheaufgabe asynchron einreihen |
POST |
/api/research/tasks/{id}/cancel |
wartende, zurückgestellte oder reservierte Aufgabe abbrechen |
POST |
/api/research/autonomous/scan |
Graph sofort nach Wissenslücken analysieren |
POST |
/api/research/autonomous/run |
wartende Queue ohne Umgehung der Kapazitätsregeln wecken |
Mit BRAIN_API_KEY werden POST-Endpunkte über Authorization: Bearer … oder X-Brain-Key geschützt.
Statusdiagnose
curl http://localhost:8090/api/status | jq
Wichtige Bereiche:
ollama_pool.nodes[]: Health, Kompatibilität, Inflight, Requests, Fehler und mittlere Laufzeit;glpi_kb: letzter Sync, Dokumentanzahl, Pfad und Fehler;persistence: ausstehende Dateien, Dirty-Status, letzter Flush und Flush-Fehler;graph_storage: SQLite-/WAL-Größe, Vector-Bytes, Row-Anzahl und ausstehende Änderungen;enrich_*: Zustand des AI-THINK-Workers;autonomous_research: Queue-Zähler, laufende Aufgabe, Budgetparameter, letzte Fehler sowie gelernte Evidenz und erzeugte Staging-Artikel;relations_created,articles_created,articles_skipped: getrennte Relation- und Artikelergebnisse.
Validierung
go test ./...
go vet ./...
node --check internal/web/static/app.js
node --check internal/web/static/analysis.js
Sichtbare SearXNG-Recherche
SearXNG-Suchen werden als eigenständige Aktivität visualisiert. Scanringe markieren die laufende Suche, gefundene Quellen erscheinen als externe Quellenpunkte und fließen anschließend in die neu erzeugten Forschungs-Nodes. Die Animation bleibt bei der Aktualisierung des Graphen bestehen und läuft nach dem Einblenden der neuen Nodes mindestens zwei Sekunden weiter.
Unter FILTER → SearXNG-Diagnose kann eine direkte Testsuche ausgeführt werden. Diese umgeht die fachliche Qwen-Entscheidung, verändert den Graphen nicht und zeigt eindeutig:
- die tatsächlich verwendete Basis-URL,
- HTTP-Status und Content-Type,
- Trefferzahl und Laufzeit,
- DNS-, Netzwerk-, TLS-, HTTP- und JSON-Fehler,
- bei Fehlern den Antwortausschnitt von SearXNG oder Reverse Proxy.
Die automatische Artikelrecherche zeigt zusätzlich Recherche-Runden, deutsch/englische Teilqueries, Deduplizierungsereignisse, Kandidatenauswahl, Volltextabruf, Relevanz, Quellenqualität sowie akzeptierte und verworfene Belege. Im Analyse-Center zeigt der Ollama-Status außerdem aktive und wartende Einträge der gemeinsamen Research/Ollama-Queue. SearXNG-Snippets werden nicht als ausreichender Artikelbeleg verwendet. Die API-Endpunkte sind GET /api/research/status und POST /api/research/test. Details stehen in SEARXNG-VISUALIZATION.md und ITERATIVE-GROUNDED-RESEARCH.md.