Zum Hauptinhalt springen
Lektion 5 von 20 · API-Tools: Suche, Dateien und Code Interpreter

Web Search API: Programmatische Websuche

Lektion 5 von 20 Aktualisiert am 2. November 2026 Entwickler
Auf dieser Seite
  1. Web Search API: Programmatische Websuche
  2. Websuche aktivieren
  3. Antwortstruktur
  4. Benutzerkontext für Relevanz
  5. Websuche mit benutzerdefinierten Funktionen kombinieren
  6. Produktionsanwendungen
  7. Bekannte Einschränkungen
  8. Kernaussagen

Lektion aktualisiert am 2. November 2026 basierend auf der OpenAI-Dokumentation: Das Tool Code Interpreter erfordert nun einen container-Parameter (in allen Beispielen hinzugefügt), Eingabetexte sind vom Typ input_text, und die Websuche verwendet das Tool web_search (web_search_preview ist nun ein veraltetes Tool ohne Bereichsfilter). Generierte Dateien werden mit den Funktionen fichiers_generes und telecharger aus Lektion 10 abgerufen. Quellen: Code Interpreter · Websuche.

Web Search API: Programmatische Websuche

Das Web Search Tool ermöglicht es dem Modell, Echtzeit-Websuchen direkt über die Responses API durchzuführen. Sie müssen keine externe Such-API mehr integrieren: Das Modell formuliert die Abfrage, führt die Suche aus und synthetisiert die Ergebnisse.

Websuche aktivieren

Die Aktivierung erfolgt mit nur einer Zeile, was einen grundlegenden Wandel markiert: Ihre Anwendung ist nicht mehr durch den Wissensstandsschnitt des Modells begrenzt. Fragen zu Ereignissen von gestern, aktuellen Preisen oder neuen Vorschriften lassen sich beantworten, ohne eine externe Suchmaschine zu integrieren oder dafür zu bezahlen.

from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-5.6-terra",
    input="Was sind die neuesten Ligue 1-Ergebnisse?",
    tools=[{"type": "web_search"}]
)

print(response.output_text)

Das Modell entscheidet selbstständig, wann es suchen soll, und dies verdient Aufmerksamkeit: Es sucht nicht systematisch. Bei Fragen, die es innerhalb seines bestehenden Wissens einordnen kann, antwortet es direkt – schneller und kostengünstiger, aber mit dem Risiko, veraltete Informationen mit derselben Sicherheit vorzutragen. Wenn Aktualität kritisch ist, formulieren Sie dies explizit in Ihrem Prompt, statt darauf zu hoffen, dass das Modell dies korrekt errät.

Antwortstruktur

Quellen kommen als Annotationen an, die der Antwort angehängt sind, getrennt vom Text. Dies ermöglicht es Ihnen, diese nach Ihren Wünschen darzustellen, zu überprüfen oder Antworten zu kennzeichnen, die Quellen fehlen, wenn das Thema dies erfordert.

response = client.responses.create(
    model="gpt-5.6-terra",
    input="Was ist der aktuelle Aktienkurs von LVMH?",
    tools=[{"type": "web_search"}]
)

# Synthetisierter Text
print(response.output_text)

# Quellen prüfen
for item in response.output:
    if hasattr(item, "content"):
        for block in item.content:
            if hasattr(block, "annotations"):
                for annotation in block.annotations:
                    if annotation.type == "url_citation":
                        print(f"Quelle: {annotation.url}")
                        print(f"Titel: {annotation.title}")

Benutzerkontext für Relevanz

Der Standort beeinflusst die Ergebnisse mehr, als man vielleicht erwartet, und nicht nur bei offensichtlich lokalen Suchen. Fragen zu Steuern, Preisen, Verfügbarkeit oder rechtlichen Verpflichtungen liefern je nach Land unterschiedliche Antworten: Ohne user_location verwendet das Modell einen Standardkontext, der oft US-zentriert ist.

response = client.responses.create(
    model="gpt-5.6-terra",
    input="Welches japanische Restaurant ist heute Abend geöffnet?",
    tools=[{
        "type": "web_search",
        "user_location": {
            "type": "approximate",
            "city": "Paris",
            "country": "FR"
        }
    }]
)

Der Parameter user_location akzeptiert verschiedene Ebenen der Präzision:

# Ungefähre Position
"user_location": {
    "type": "approximate",
    "city": "Lyon",
    "region": "Auvergne-Rhone-Alpes",
    "country": "FR"
}

Websuche mit benutzerdefinierten Funktionen kombinieren

Die produktivste Kombination folgt immer demselben Muster: Das Web liefert externe Informationen, Ihre Funktionen stellen den internen Kontext bereit, und das Modell verbindet die Punkte. Diese Verbindung ist der Wert – weder die Suche noch Ihre Daten allein beantworten die Frage „beeinflusst uns diese Änderung?”.

tools = [
    {"type": "web_search"},
    {
        "type": "function",
        "name": "sauvegarder_veille",
        "description": "Speichert ein Überwachungsresultat in der Datenbank",
        "parameters": {
            "type": "object",
            "properties": {
                "titre": {"type": "string"},
                "resume": {"type": "string"},
                "url_source": {"type": "string"},
                "categorie": {
                    "type": "string",
                    "enum": ["concurrent", "marche", "reglementation", "technologie"]
                }
            },
            "required": ["titre", "resume", "categorie"],
            "additionalProperties": False
        },
        "strict": True
    }
]

response = client.responses.create(
    model="gpt-5.6-terra",
    input="Suchen Sie nach den neuesten Nachrichten zur KI-Regulierung in Europa "
          "und speichern Sie wichtige Ergebnisse",
    tools=tools
)

Produktionsanwendungen

Automatisierte Wettbewerbsanalyse

def veille_quotidienne(entreprises: list[str]):
    """Startet eine Webüberwachung für jeden Wettbewerber."""
    resultats = []
    for entreprise in entreprises:
        response = client.responses.create(
            model="gpt-5.6-terra",
            input=f"Welche neuesten Nachrichten gibt es über {entreprise}? "
                  "Konzentrieren Sie sich auf Produktankündigungen, Finanzierungsrunden "
                  "und Partnerschaften der letzten 7 Tage.",
            tools=[{"type": "web_search"}]
        )
        resultats.append({
            "entreprise": entreprise,
            "synthese": response.output_text
        })
    return resultats

Faktenprüfung

def verifier_affirmation(affirmation: str) -> dict:
    """Überprüft eine Behauptung durch Abgleich mit mehreren Webquellen."""
    response = client.responses.create(
        model="gpt-5.6-terra",
        input=f"Überprüfen Sie diese Behauptung durch Suche nach zuverlässigen Quellen: "
              f"'{affirmation}'. Geben Sie an, ob sie wahr, falsch oder unsicher ist, "
              f"und nennen Sie die Quellen, die Ihre Schlussfolgerung stützen.",
        tools=[{"type": "web_search"}]
    )

    # Zitate extrahieren
    sources = []
    for item in response.output:
        if hasattr(item, "content"):
            for block in item.content:
                if hasattr(block, "annotations"):
                    for ann in block.annotations:
                        if ann.type == "url_citation":
                            sources.append(ann.url)

    return {
        "analyse": response.output_text,
        "nombre_sources": len(sources),
        "sources": sources
    }

Bekannte Einschränkungen

  • Das Modell kann für sehr spezialisierte Themen möglicherweise keine relevanten Ergebnisse finden
  • Ergebnisse hängen vom Web-Index zum Zeitpunkt der Anfrage ab
  • Die Anzahl der Suchen pro Aufruf ist begrenzt: Das Modell optimiert dies durch die Formulierung präziser Abfragen
  • Inhalte hinter Paywalls oder Login-Bildschirmen sind nicht zugänglich

Kernaussagen

  • Fügen Sie web_search in einer Zeile innerhalb von tools hinzu
  • Das Modell entscheidet autonom, wann es das Web durchsuchen soll
  • user_location verbessert die Relevanz für lokale Ergebnisse
  • url_citation-Annotationen liefern Quellen
  • Kombinieren Sie Websuche mit Ihren Funktionen, um Überwachungsprozesse zu automatisieren