Published on

Claude mit Web-Suche: Recherche ohne eigene Pipeline

Authors

Web-Suche und Web-Abruf mit Claude

TL;DR

Beide Werkzeuge laufen serverseitig — Sie deklarieren sie, Anthropic führt sie aus, Sie bekommen Ergebnisse mit Quellenangaben zurück. Kein eigener Suchdienst, keine Abrufpipeline. Zwei Dinge muss man wissen: Fehler kommen als HTTP 200, und die Verfügbarkeit unterscheidet sich stark je Plattform.


Die Deklaration

antwort = client.messages.create(
    model="claude-opus-5",
    max_tokens=16000,
    tools=[
        {"type": "web_search_20260209", "name": "web_search"},
        {"type": "web_fetch_20260209", "name": "web_fetch"},
    ],
    messages=[{"role": "user",
               "content": "Welche Fristen gelten aktuell für die EU-Maschinenverordnung?"}],
)

Keine Beta-Kennung, keine eigene Ausführungsschleife. Claude formuliert die Suchanfragen selbst, ruft Seiten ab und verarbeitet die Ergebnisse.

Die Fassung _20260209 bringt dynamische Filterung mit: Claude schreibt und führt Code aus, der Suchergebnisse filtert, bevor sie ins Kontextfenster gelangen. Das verbessert Treffgenauigkeit und Token-Effizienz erheblich.

Wichtig dabei — und ein Fehler, den wir regelmäßig sehen: Deklarieren Sie das Werkzeug zur Code-Ausführung nicht zusätzlich, wenn Sie es nicht für eigene Zwecke brauchen. Die Filterung bringt es intern mit; ein zweites Ausführungsumfeld verwirrt das Modell.

Für ältere Modelle gibt es die Basisvarianten web_search_20250305 und web_fetch_20250910 ohne dynamische Filterung.

Der Unterschied zwischen Suche und Abruf

Web-Suche formuliert Anfragen und liefert Ergebnislisten.

Web-Abruf holt den Inhalt einer konkreten Seite — allerdings nur für URLs, die bereits im Gespräch stehen. Das Werkzeug kann also nicht beliebig im Netz surfen; es vertieft, was die Suche oder der Nutzer eingebracht hat.

Diese Einschränkung ist eine Sicherheitseigenschaft und wird oft für einen Fehler gehalten.

Die Steuerung

{
    "type": "web_search_20260209",
    "name": "web_search",
    "max_uses": 5,
    "allowed_domains": ["eur-lex.europa.eu", "bmwk.de", "din.de"],
    "user_location": {"type": "approximate", "country": "DE"},
}

allowed_domains ist der Parameter, der für Unternehmensanwendungen zählt. Eine Recherche, die ausschließlich amtliche Quellen und Normungsstellen zulässt, liefert belastbar zitierfähige Ergebnisse — statt einer Mischung aus Foren und Anbieterblogs.

Alternativ schließt blocked_domains bestimmte Quellen aus. Beide zusammen sind nicht zulässig.

max_uses deckelt die Zahl der Suchvorgänge je Anfrage. Ohne Deckel kann eine offene Rechercheaufgabe erheblich Zeit und Token verbrauchen.

Die Fehler, die keine sind

Der Punkt, an dem Implementierungen still scheitern.

Werkzeugfehler werfen keine Ausnahme. Sie kommen als HTTP 200 zurück, in einem Ergebnisblock, dessen Inhalt ein Fehlerobjekt ist:

for block in antwort.content:
    if block.type == "web_search_tool_result":
        inhalt = block.content
        if isinstance(inhalt, list):
            for treffer in inhalt:          # Erfolg: eine LISTE von Treffern
                print(treffer.title, treffer.url)
        else:
            print(f"Fehler: {inhalt.error_code}")   # Fehler: ein OBJEKT

Bei Erfolg ist content eine Liste, im Fehlerfall ein Objekt. Wer ungeprüft indiziert, bekommt einen schwer zuzuordnenden Fehler. Prüfen Sie den Typ, bevor Sie zugreifen — etwa bei max_uses_exceeded.

Und pause_turn behandeln. Serverseitige Werkzeuge laufen in einer eigenen Schleife mit einer Obergrenze. Wird sie erreicht, kommt stop_reason: "pause_turn". Dann schicken Sie Nutzernachricht und Assistentenantwort erneut — der Server macht weiter, wo er aufgehört hat:

if antwort.stop_reason == "pause_turn":
    messages = [
        {"role": "user", "content": frage},
        {"role": "assistant", "content": antwort.content},
    ]
    antwort = client.messages.create(model="claude-opus-5", max_tokens=16000,
                                     tools=werkzeuge, messages=messages)

Fügen Sie keine zusätzliche Nachricht wie "mach weiter" hinzu — die API erkennt den offenen Werkzeugblock selbst. Und setzen Sie eine Obergrenze für Fortsetzungen, etwa fünf, sonst läuft die Schleife im Fehlerfall endlos.

Ein Hinweis für alle, die den Tool Runner nutzen: Er setzt pause_turn nicht selbstständig fort. Er beendet die Schleife und gibt die pausierte Runde als Endergebnis zurück — ohne Fehler, ohne Warnung, mit einer stillschweigend abgeschnittenen Antwort.

Die Verfügbarkeit

Der Punkt für die Plattformwahl:

Anthropic-APIBedrockVertexFoundry
Web-Suchejaneinja (nur Basisvariante)Beta
Web-AbrufjaneinneinBeta

Auf Amazon Bedrock steht keines der beiden zur Verfügung. Wer aus Gründen der EU-Datenresidenz dorthin geht, baut Recherche selbst — die Einordnung steht im Beitrag zur EU-Datenresidenz.

Wenn zu selten gesucht wird

Ein Verhalten, das beim Modellwechsel auffällt: Neuere Modelle greifen zurückhaltender zur Suche und beantworten mehr aus dem vorhandenen Kontext. Bei einem Rechercheprodukt senkt das die Tiefe.

Zwei Hebel: Aufwandsstufe erhöhenhigh und xhigh zeigen deutlich mehr Werkzeugnutzung. Und eine ausdrückliche Anweisung:

"Bei Fragen, deren Antwort von aktuellen Informationen abhängt — aktuelle Fristen, Preise, Versionsstände oder alles, was der Nutzer als zeitkritisch kennzeichnet — suche zuerst, statt aus dem Gedächtnis zu antworten. Bei offenen Rechercheaufträgen beginne unmittelbar mit der Suche; stelle keine Rückfrage zur Eingrenzung, wenn der Auftrag nicht wirklich mehrdeutig ist."

Häufig gestellte Fragen

Muss ich für die Web-Suche einen eigenen Suchdienst betreiben?

Nein. Suche und Abruf laufen vollständig auf Anthropics Infrastruktur — Sie deklarieren die Werkzeuge und erhalten die Ergebnisse mit Quellenangaben im selben Antwortstrom. Es gibt keine clientseitige Ausführungsschleife und keine Beta-Kennung.

Kann Claude beliebige Webseiten abrufen?

Nein. Das Abrufwerkzeug holt ausschließlich URLs, die bereits im Gespräch stehen — etwa aus einem Suchergebnis oder aus der Nutzereingabe. Das ist eine bewusste Sicherheitseigenschaft und wird häufig für eine Einschränkung gehalten.

Wie beschränke ich die Recherche auf verlässliche Quellen?

Über allowed_domains am Suchwerkzeug. Eine Recherche, die nur amtliche Quellen und Normungsstellen zulässt, liefert zitierfähige Ergebnisse statt einer Mischung aus Foren und Anbieterinhalten. Alternativ schließt blocked_domains bestimmte Quellen aus; beide Parameter gemeinsam sind nicht zulässig.

Warum scheitert mein Code bei Werkzeugfehlern?

Weil Fehler serverseitiger Werkzeuge keine Ausnahme werfen, sondern als HTTP 200 mit einem Fehlerobjekt im Ergebnisblock zurückkommen. Bei Erfolg ist dessen content eine Liste, im Fehlerfall ein Objekt — prüfen Sie den Typ, bevor Sie indizieren.

Was bedeutet pause_turn?

Dass die serverseitige Werkzeugschleife ihre Obergrenze erreicht hat. Schicken Sie Nutzernachricht und Assistentenantwort erneut, dann setzt der Server fort — ohne zusätzliche Aufforderung wie "mach weiter". Begrenzen Sie die Fortsetzungen, etwa auf fünf. Der Tool Runner behandelt diesen Fall nicht selbstständig und liefert sonst still abgeschnittene Antworten.


Der nächste Schritt

Setzen Sie bei Ihrer ersten Recherche-Anwendung allowed_domains auf die Quellen, die Sie tatsächlich zitieren würden. Das ist eine Zeile und macht aus einer beliebigen Websuche eine belastbare Recherche. Beim Aufbau helfen wir gern.

📖 Verwandte Artikel

Weitere interessante Beiträge zu ähnlichen Themen