Kurze Antwort
Wie gebe ich einem OpenAI-Modell ein Web-Search-Tool?
Deklarieren Sie eine google_search-Funktion mit einem JSON Schema in tools, dann schleifen Sie: Wenn das Modell tool_calls zurückgibt, führen Sie jede Suche auf https://serpcrypto.com/api/v1/search aus und hängen die Ergebnisse als tool-Nachrichten an, bis es antwortet. SerpCrypto berechnet 1 Credit pro erfolgreicher Suche, ab 0,30 $/1K Suchanfragen, mit Krypto bezahlt und ohne KYC.
Wie sieht das Tool-Schema aus?
Ein Function-Tool hat einen Namen, eine Beschreibung und Parameter in JSON Schema. Das Modell sieht nur diese drei Dinge, daher muss die Beschreibung sagen, was das Tool zurückgibt und wann es zu verwenden ist. Nur query ist erforderlich; Land und Sprache sind optional und standardmäßig US-Englisch im Code.
{
"type": "function",
"function": {
"name": "google_search",
"description": "Search Google for current information. Returns the top results with title, link and snippet. Use it for facts newer than your training data.",
"parameters": {
"type": "object",
"properties": {
"query": { "type": "string", "description": "The search query, as a person would type it." },
"gl": { "type": "string", "description": "Two-letter country code of the results, e.g. us, gb, de." },
"hl": { "type": "string", "description": "Language code, e.g. en, de, pt-BR." }
},
"required": ["query"]
}
}
}Wie funktioniert die Tool-Calling-Schleife?
Senden Sie die Frage mit tools. Enthält die Antwort tool_calls, führen Sie jeden davon aus, hängen Sie die Assistant-Nachricht und pro Aufruf eine tool-Nachricht mit dem passenden tool_call_id an und rufen Sie das Modell erneut auf. Hat eine Antwort keinen Tool-Call, ist sie die endgültige Antwort.
Die Schleife unten stoppt nach drei Suchen. Ein Limit schützt Ihre Credits, falls ein Modell weiter sucht, und drei Suchen beantworten die meisten Faktenfragen.
"""Tool-calling loop: the model asks for searches, this code runs them on SerpCrypto."""
import json
import os
import requests
from openai import OpenAI
client = OpenAI() # reads OPENAI_API_KEY
MODEL = os.environ["OPENAI_MODEL"] # any OpenAI chat model with tool calling
API_URL = "https://serpcrypto.com/api/v1/search"
TOOLS = [
{
"type": "function",
"function": {
"name": "google_search",
"description": "Search Google for current information. Returns the top results with title, link and snippet.",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "The search query."},
"gl": {"type": "string", "description": "Two-letter country code, e.g. us."},
"hl": {"type": "string", "description": "Language code, e.g. en."},
},
"required": ["query"],
},
},
}
]
def google_search(query, gl="us", hl="en"):
r = requests.get(
API_URL,
params={"q": query, "gl": gl, "hl": hl},
headers={"Authorization": "Bearer " + os.environ["SERPCRYPTO_API_KEY"]},
timeout=90,
)
if r.status_code != 200:
return f"Search failed with HTTP {r.status_code}."
items = r.json().get("organic_results", [])[:5]
return "\n\n".join(f"{x['title']}\n{x['link']}\n{x.get('snippet', '')}" for x in items) or "No results."
def ask(question, max_searches=3):
messages = [{"role": "user", "content": question}]
for _ in range(max_searches + 1):
reply = client.chat.completions.create(model=MODEL, messages=messages, tools=TOOLS)
msg = reply.choices[0].message
if not msg.tool_calls:
return msg.content
messages.append(msg)
for call in msg.tool_calls:
args = json.loads(call.function.arguments)
messages.append({"role": "tool", "tool_call_id": call.id, "content": google_search(**args)})
return "Stopped: search limit reached."
print(ask("Which countries changed their data protection laws in 2026? Cite sources."))Funktioniert dasselbe Schema mit Claude und anderen Modellen?
Ja, mit einem anderen Wrapper. Claude's Tool-Nutzung nimmt dasselbe JSON Schema unter input_schema, neben name und description. Die meisten anderen Tool-Calling-APIs akzeptieren ebenfalls JSON Schema für Parameter; nur die äußeren Feldnamen ändern sich. Die Suchfunktion selbst bleibt gleich, weil sie nur den SerpCrypto-Endpoint aufruft.
{
"name": "google_search",
"description": "Search Google for current information. Returns the top results with title, link and snippet.",
"input_schema": {
"type": "object",
"properties": {
"query": { "type": "string", "description": "The search query." },
"gl": { "type": "string", "description": "Two-letter country code, e.g. us." },
"hl": { "type": "string", "description": "Language code, e.g. en." }
},
"required": ["query"]
}
}Was sollte das Tool an das Modell zurückgeben?
Kurzen Text mit Links. Fünf Ergebnisse mit Titel, Link und Snippet reichen dem Modell meist, um zu antworten und zu zitieren. Das vollständige JSON zurückzugeben funktioniert, kostet aber mehr Tokens und gibt dem Modell mehr Rauschen zu lesen.
Fügen Sie den AI-Overview-Text hinzu, wenn vorhanden, wenn das Modell Googles eigene Zusammenfassung sehen soll, und behalten Sie die Quellenlinks, damit die Antwort Seiten statt der Übersicht zitieren kann.
Wie halte ich die Suchkosten planbar?
Zählen Sie Tool-Calls: jeder erfolgreiche ist ein Credit. Begrenzen Sie Suchen pro Frage, wie es die Schleife tut, und protokollieren Sie jeden Aufruf mit seiner Suchanfrage, damit Sie sehen, wonach das Modell fragt. Beim 100.000 Suchanfragen-Pack beträgt die Rate 0,56 $/1K Suchanfragen, und Vorausbezahlte Such-Credits verfallen nie: ungenutzte Suchen bleiben auf Ihrem Konto, bis Sie sie verwenden.
Fehler kosten nichts: 1 Credit = 1 erfolgreiche Suchanfrage, die eine Ergebnisseite auf jeder unterstützten Engine liefert. Eine fehlgeschlagene Anfrage wird nicht berechnet.
Fragen zu Function Calling
Kann ich die Responses API statt Chat Completions verwenden?
Ja. Die Responses API nimmt Function-Tools mit demselben JSON Schema, mit name, description und parameters auf der obersten Ebene jedes Tools. Die Suchfunktion und die Idee der Schleife ändern sich nicht.
Warum nicht die integrierte Websuche des Modellanbieters verwenden?
Integrierte Suchtools wählen ihre eigenen Quellen und Einstellungen. Eine Function auf SerpCrypto liefert Ihnen Google-Suchergebnisse für das gewählte Land und die gewählte Sprache, als JSON, das Sie protokollieren können, zu einem bekannten Preis pro Suche.
Kann das Modell das Land wählen?
Ja. gl ist ein Parameter des Tools, sodass das Modell ihn aus der Frage setzen kann, zum Beispiel gb bei einer Frage zum Vereinigten Königreich. Legen Sie in Ihrem Code einen Standard für Fragen fest, die kein Land nennen.
Brauche ich eine Kreditkarte für den Such-API-Schlüssel?
Nein. SerpCrypto Credits werden in BTC, USDT, USDC, ETH, SOL, LTC bezahlt, ohne Ausweis, ohne Selfie und ohne Dokumente. Login per Kontonummer; E-Mail ist optional.