Mein Hermes Agent kann seit einer Weile im Web suchen und Seiteninhalte extrahieren. Das habe ich bisher über Tavily für die Suche und ein selbst gehostetes Firecrawl fürs Extrahieren gemacht. Das Setup funktioniert so tadellos bis mein Hermes-Agent die kostenlosen 1.000 API Anfragen an Tavily aufgebracht hat. Aber eine Sache hat mich doch sehr gestört. Jede Websuche lief über Tavily und deren externen API-Dienst mit einem Free-Tier-Limit von besagten 1.000 Suchanfragen im Monat. Für einen Agenten, der gerne mal autonom recherchiert und in CronJobs läuft, ist das eine Zahl, die man im Hinterkopf behalten muss und dann im Monat erreicht wenn noch viele Tage übrig sind.
Also habe ich die Suche dorthin verlagert, wo bei mir ohnehin schon vieles läuft: auf den eigenen Applikation-Server. Einsetzen tue ich jetzt seit neuestem SearXNG. In diesem Beitrag zeige ich dir, wie einfach das Aufsetzen ist und warum die Kombination am Ende das Beste aus drei Welten vereint.
Ich bin der offiziellen Anleitung hier für mein Ubuntu System gefolgt.
Warum überhaupt selbst hosten?
Wer meine Beiträge hier auf ai-box.eu kennt, ahnt die Antwort schon: digitale Souveränität. Mein Inferenz-Setup mit den beiden RTX A6000 läuft lokal, die Modelle liegen bei mir, der Strom kommt zu einem guten Teil vom eigenen Dach. Da fühlt es sich inkonsequent an, ausgerechnet die Websuche, also den Teil, der am meisten über meine Interessen und Recherchethemen verrät, an einen externen Dienst zu delegieren.
SearXNG ist hier die ideale Lösung. Es ist eine datenschutzfreundliche, quelloffene Metasuchmaschine, die Ergebnisse von über 70 Suchmaschinen aggregiert. Keine Tracker, keine Profilbildung, kein API-Key und vor allem: kein Rate-Limit, wenn man es selbst hostet.
SearXNG in fünf Minuten per Docker
Der Aufbau ist erfreulich unkompliziert. Ich habe mir ein Arbeitsverzeichnis angelegt und eine docker-compose.yml geschrieben.
Befehl: mkdir -p ~/searxng/searxng
Befehl: cd ~/searxng/searxng
Befehl: nano nano docker-compose.yml
Jetzt fügt ihr die folgende Konfiguration in die docker-compose.yml Datei ein.
services:
searxng:
image: searxng/searxng:latest
container_name: searxng
ports:
- "8888:8080"
volumes:
- ./searxng:/etc/searxng:rw
environment:
- SEARXNG_BASE_URL=http://localhost:8888/
restart: unless-stopped
Gespeichert wird die docker-compose.yml Datei mit den Befehlen Strg + x gefolgt von einem y.
Ein docker compose up -d später lief der Container. So weit, so einfach.
Befehl: docker compose up -d
Die eine Stolperfalle, die du kennen musst: SearXNG liefert standardmäßig nur HTML aus. Aber der Hermes Agent braucht aber JSON-Format. Das muss man erst aktivieren. Dazu habe ich die generierte Konfiguration aus dem Container herauskopiert:
Befehl: docker cp searxng:/etc/searxng/settings.yml ~/searxng/searxng/settings.yml
Jetzt die Datei öffnen:
Befehl: nano ~/searxng/searxng/settings.yml
In der settings.yml findest du dann den formats-Block (bei mir ungefähr Zeile 84). Dort ergänzt du einfach json. Das sollte dann wie nachfolgend gezeigt aussehen.
formats:
- html
- json
Die Anpassung in der Datei mit den Befehlen Strg + x gefolgt von einem y speichern.
Danach die Datei zurück in den Container kopieren und neu starten:
Befehl: docker cp ~/searxng/searxng/settings.yml searxng:/etc/searxng/settings.yml
Befehl: docker restart searxng
Ob alles passt, prüfst du mit einem schnellen Curl-Test:
curl -s "http://localhost:8888/search?q=test&format=json" | python3 -c \
"import sys,json; d=json.load(sys.stdin); print(f'{len(d[\"results\"])} results')"
Bei mir kamen prompt 21 results zurück. Falls du stattdessen ein 403 Forbidden siehst, ist das JSON-Format noch nicht aktiv. Dann kann es helfen nochmal die Einrückung in der settings.yml zu prüfen.
Hermes Agent: Suche und Extraktion getrennt konfigurieren
Jetzt kommt der eigentlich elegante Teil. Hermes erlaubt es, für Suche und Extraktion unterschiedliche Provider zu nutzen. Genau das brauche ich: SearXNG kann nämlich nur suchen, nicht extrahieren. Das Extrahieren bleibt also weiter bei meinem self-hosted Firecrawl.
In der ~/.hermes/.env habe ich die SearXNG-URL ergänzt. Der bereits genutzte Tavily-Key und die Firecrawl-Base-URL standen ja schon drin:
SEARXNG_URL=http://localhost:8888
FIRECRAWL_API_URL=http://localhost:3002
TAVILY_API_KEY=tvly-...
Und in der ~/.hermes/config.yaml habe ich den web-Abschnitt umgestellt:
web:
backend: ''
search_backend: 'searxng'
extract_backend: 'firecrawl'
Das war’s. Ab sofort läuft jede Websuche über mein lokales SearXNG, und das Extrahieren von Seiteninhalten über mein lokales Firecrawl. Beides auf dem eigenen Server, ohne externen API-Call.
Wichtig zu wissen: Hermes kennt kein automatisches Fallback zwischen zwei Such-Backends. Tavily verschwindet dadurch aber nicht. Der API-Key bleibt in der .env als Reserve liegen. Wenn ich für eine bestimmte Aufgabe doch mal die KI-optimierte Tavily-Suche brauche, stelle ich search_backend einfach kurz um.
Der letzte Cloud-Pfad: Zusammenfassung lokal mit Ollama
Beim Einlesen der Doku ist mir ein Mechanismus aufgefallen, der den Cloud-Verzicht perfekt abrundet. Lange Seiten Forenthreads, Doku-Seiten, News-Artikel mit endlosen Kommentaren jagt Hermes vor der Übergabe an den Agenten durch ein Auxiliary-Modell, das den Inhalt komprimiert. Das hält das Kontextfenster sauber und die Kosten niedrig.
Standardmäßig nutzt dieses Hilfsmodell dasselbe Modell wie der Hauptchat. Und genau hier wird es für mein Setup spannend: Diese Aufgabe muss überhaupt nicht in die Cloud. Ich lasse sie schlicht von einem lokal laufenden Ollama-Modell erledigen. In der config.yaml sieht das so aus:
auxiliary:
web_extract:
provider: dual-a6000 # mein lokaler Ollama-Provider
model: qwen3.6:27b
timeout: 360
Ich nutze hier qwen3.6:27b, weil das Modell bei mir ohnehin als Arbeitspferd läuft und mit 17 GB locker auf die A6000 passt. Wer es noch flotter möchte, nimmt ein kleineres Modell wie mistral-small3.2:24b . Für das reine Zusammenfassen langer Seiten ist das mehr als ausreichend. Damit ist der letzte verbleibende externe Pfad geschlossen: Suche, Extraktion und Zusammenfassung laufen jetzt vollständig auf eigener Hardware.
Fazit
Mit überschaubarem Aufwand habe ich die Websuche meines Hermes Agent von einem externen Dienst auf den eigenen Server geholt. Das Ergebnis ist eine saubere Drei-Schichten-Architektur: SearXNG für die Suche, Firecrawl fürs Extrahieren, ein lokales Ollama-Modell fürs Zusammenfassen. Jetzt läuft alles lokal und ich dachte immer das wäre viel schwieriger. Tavily habe ich nur noch als optionale Reserve.
Was mir daran am besten gefällt: Es gibt kein Suchlimit mehr, das ich im Hinterkopf behalten muss, meine Recherchethemen verlassen den eigenen Server nicht, und die Konfiguration ist so transparent, dass ich jederzeit weiß, welcher Request wohin geht. Genau so stelle ich mir souveräne KI vor. Ich möchte Souveränität nicht als Dogma verstanden haben, sondern als praktische Architektur, bei der jeder externe Baustein eine bewusste Entscheidung ist und ich die volle Kontrolle habe.
Wenn du Hermes ähnlich betreibst: Der Umbau ist eine Sache von einer Viertelstunde. Und das gute Gefühl, die Suche wieder selbst in der Hand zu haben, hält länger.







Ein toller Guide der leicht zugänglich und verständlich ist. Perfekt für ein kleines Side-Project geeignet. Aktuell half mir noch mein…
Thank you for this great tutorial, could you share n8n workflow and comfyui workflow please?
Hallo Anton, die Meldung besagt das in meinem Beisiel Methoden verwendet werden die veraltet (deprecated) sind. Also müsstest Du die…
Danke für das Tool! Ich habe erst kürzlich angefangen mich mit der Thematik zu beschäftigen und bin für meine Erwartungen…
Hallo, ich habe ihre Anleitung befolgt und bekomme im letzten Schritt leider immer folgende Meldung im Terminal: bash <(wget -qO-…