Snel antwoord
Hoe geef ik een OpenAI-model een webzoektool?
Declareer een functie google_search met een JSON Schema in tools en loop dan: wanneer het model tool_calls teruggeeft, voer je elke zoekopdracht uit op https://serpcrypto.com/api/v1/search en voeg je de resultaten toe als tool-berichten tot het antwoordt. SerpCrypto rekent 1 credit per geslaagde zoekopdracht, vanaf US$ 0,30/1K zoekopdrachten, betaald met crypto zonder KYC.
Hoe ziet het toolschema eruit?
Een function tool heeft een naam, een beschrijving en parameters in JSON Schema. Het model ziet alleen deze drie dingen, dus de beschrijving moet aangeven wat de tool teruggeeft en wanneer je hem gebruikt. Alleen query is vereist; land en taal zijn optioneel en staan in de code standaard op US English.
{
"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"]
}
}
}Hoe werkt de tool-calling-lus?
Stuur de vraag mee met tools. Als het antwoord tool_calls bevat, voer je elk daarvan uit, voeg je het assistant-bericht en één tool-bericht per aanroep toe met de bijbehorende tool_call_id, en roep je het model daarna opnieuw aan. Als een antwoord geen tool call bevat, is het het definitieve antwoord.
De lus hieronder stopt na drie zoekopdrachten. Een limiet beschermt je credits als een model blijft zoeken, en drie zoekopdrachten beantwoorden de meeste feitelijke vragen.
"""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."))Werkt hetzelfde schema met Claude en andere modellen?
Ja, met een andere wrapper. Claude's tool use gebruikt hetzelfde JSON Schema onder input_schema, naast name en description. De meeste andere tool-calling-API's accepteren ook JSON Schema voor parameters; alleen de namen van de buitenste velden veranderen. De zoekfunctie zelf blijft hetzelfde, want die roept alleen het endpoint SerpCrypto aan.
{
"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"]
}
}Wat moet de tool aan het model teruggeven?
Korte tekst met links. Vijf resultaten met titel, link en snippet zijn meestal genoeg voor het model om te antwoorden en te citeren. De volledige JSON teruggeven werkt, maar kost meer tokens en geeft het model meer ruis om te lezen.
Voeg de AI Overview-tekst toe wanneer die aanwezig is als je wilt dat het model Google's eigen samenvatting ziet, en houd de bronlinks erbij zodat het antwoord naar pagina's kan verwijzen in plaats van naar de overview.
Hoe houd ik de zoekkosten voorspelbaar?
Tel tool calls: elke geslaagde aanroep is één credit. Beperk het aantal zoekopdrachten per vraag, zoals de lus doet, en log elke aanroep met de zoekopdracht zodat je kunt zien waar het model om vraagt. Op het 100.000 zoekopdrachten-pack is het tarief US$ 0,56/1K zoekopdrachten, en Prepaid zoekcredits verlopen nooit: ongebruikte zoekopdrachten blijven op je account staan tot je ze gebruikt.
Fouten kosten niets: 1 credit = 1 geslaagde zoekopdracht, die één pagina met resultaten oplevert op elke ondersteunde engine. Een mislukte zoekopdracht wordt niet in rekening gebracht.
Function calling-vragen
Kan ik de Responses API gebruiken in plaats van Chat Completions?
Ja. De Responses API accepteert function tools met hetzelfde JSON Schema, met name, description en parameters op het hoogste niveau van elke tool. De zoekfunctie en het idee van de lus veranderen niet.
Waarom niet de ingebouwde webzoekfunctie van de modelprovider gebruiken?
Ingebouwde zoektools kiezen hun eigen bronnen en instellingen. Een functie op SerpCrypto geeft je Google-zoekresultaten voor het land en de taal die je kiest, als JSON die je kunt loggen, tegen een bekende prijs per zoekopdracht.
Kan het model het land kiezen?
Ja. gl is een parameter van de tool, dus het model kan die uit de vraag afleiden, bijvoorbeeld gb voor een vraag over het Verenigd Koninkrijk. Houd een standaardwaarde in je code voor vragen die geen land noemen.
Heb ik een creditcard nodig voor de zoek-API-sleutel?
Nee. SerpCrypto credits worden betaald in BTC, USDT, USDC, ETH, SOL, LTC, zonder ID, zonder selfie en zonder documenten. Inloggen met accountnummer; e-mail is optioneel.