Statisches RAG kann nicht beantworten, “was diese Woche passiert ist”. Ein Live-Websuche-Schritt mit einer Google Search API verankert dein LLM in aktuellen, zitierbaren Quellen. Hier ist das Muster, mit serp.cheap.
Die Architektur
user query
→ SERP API search (top N results) ← live, fresh
→ fetch the result pages
→ chunk + embed on the fly
→ retrieve most relevant chunks
→ LLM answers, citing the source URLs
Schritt 1 — frische Quellen abrufen
import requests
def web_sources(query, n=5, gl="us"):
data = requests.post(
"https://api.serp.cheap/v1/search",
headers={"X-API-Key": "YOUR_KEY"},
json={"q": query, "gl": gl},
timeout=30,
).json()
return [
{"title": r["title"], "url": r["link"], "snippet": r.get("snippet", "")}
for r in data["organic"][:n]
]
Schritt 2 — laden und zerteilen
Lade jede url, extrahiere den Haupttext und teile ihn in Chunks von etwa 500 Tokens. (Verwende deinen vorhandenen Loader/Splitter — z. B. trafilatura + einen Text-Splitter.)
Schritt 3 — einbetten, abrufen, generieren
Bette die Chunks ein, rufe die Top-k für die Anfrage ab und übergib sie dem Modell mit der Anweisung, die Quell-URLs zu zitieren. Da die Quellen aus der Live-SERP stammen, spiegelt die Antwort wider, was autoritative Seiten derzeit aussagen.
Warum eine günstige SERP API hier wichtig ist
RAG fächert bei jeder Anfrage eine Suche auf. Bei $0.0006 pro frischer Suche (die Hälfte gecacht) hält serp.cheap die Retrieval-Kosten pro Antwort vernachlässigbar — und wiederkehrende identische Anfragen treffen automatisch den Cache.
Schneller Pfad nur mit Snippets
Für leichtgewichtige Verankerung kannst du das Laden der Seiten überspringen und dem Modell direkt die Titel + Snippets der SERP übergeben — ein API-Aufruf, kein Crawling. Das ist günstiger und reicht oft für schnelle Faktenantworten.