Szybka odpowiedź
Jak dać modelowi OpenAI narzędzie wyszukiwania w sieci?
Zadeklaruj funkcję google_search ze schematem JSON w tools, a następnie pętl: gdy model zwróci tool_calls, wykonaj każde wyszukiwanie na https://serpcrypto.com/api/v1/search i dołącz wyniki jako wiadomości tool, aż odpowie. SerpCrypto pobiera 1 kredyt za każde udane wyszukiwanie, od 0,30 USD/1K wyszukiwań, płatne kryptowalutą bez KYC.
Jak wygląda schemat narzędzia?
Narzędzie funkcyjne ma nazwę, opis i parametry w JSON Schema. Model widzi tylko te trzy rzeczy, więc opis musi mówić, co zwraca narzędzie i kiedy go użyć. Wymagane jest tylko query; kraj i język są opcjonalne, a w kodzie domyślnie przyjmują angielski (US).
{
"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"]
}
}
}Jak działa pętla wywoływania narzędzi?
Wyślij pytanie z tools. Jeśli odpowiedź zawiera tool_calls, uruchom każde z nich, dołącz wiadomość asystenta i po jednej wiadomości tool na każde wywołanie z pasującym tool_call_id, a następnie ponownie wywołaj model. Gdy odpowiedź nie zawiera wywołania narzędzia, jest to odpowiedź końcowa.
Pętla poniżej zatrzymuje się po trzech wyszukiwaniach. Limit chroni Twoje kredyty, jeśli model wyszukuje w kółko, a trzy wyszukiwania wystarczają, by odpowiedzieć na większość pytań faktograficznych.
"""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."))Czy ten sam schema działa z Claude i innymi modelami?
Tak, z innym wrapperem. Tool use w Claude przyjmuje ten sam JSON Schema pod input_schema, obok name i description. Większość innych API do wywoływania narzędzi również akceptuje JSON Schema dla parametrów; zmieniają się tylko nazwy zewnętrznych pól. Sama funkcja wyszukiwania pozostaje bez zmian, ponieważ wywołuje tylko endpoint SerpCrypto.
{
"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"]
}
}Co narzędzie powinno zwracać modelowi?
Krótki tekst z linkami. Pięć wyników z tytułem, linkiem i snippetem zwykle wystarcza modelowi, by odpowiedzieć i zacytować źródła. Zwrócenie pełnego JSON działa, ale kosztuje więcej tokenów i daje modelowi więcej szumu do czytania.
Dodaj tekst AI Overview, jeśli jest obecny, gdy chcesz, aby model zobaczył własne podsumowanie Google, i zachowaj linki do źródeł, aby odpowiedź mogła cytować strony, a nie overview.
Jak utrzymać przewidywalne koszty wyszukiwania?
Licz wywołania narzędzi: każde udane to jeden kredyt. Ogranicz liczbę wyszukiwań na pytanie, tak jak robi to pętla, i loguj każde wywołanie wraz z zapytaniem, aby widzieć, o co pyta model. W pakiecie 100 000 wyszukiwań stawka wynosi 0,56 USD/1K wyszukiwań, a Prepaid kredyty wyszukiwania nigdy nie wygasają: niewykorzystane wyszukiwania pozostają na Twoim koncie, dopóki ich nie wykorzystasz.
Błędy nic nie kosztują: 1 kredyt = 1 udane zapytanie wyszukiwania, które zwraca jedną stronę wyników na dowolnym obsługiwanym silniku. Nieudane zapytanie nie jest rozliczane.
Pytania o function calling
Czy mogę użyć Responses API zamiast Chat Completions?
Tak. Responses API przyjmuje narzędzia funkcyjne z tym samym JSON Schema, z name, description i parameters na najwyższym poziomie każdego narzędzia. Funkcja wyszukiwania i idea pętli się nie zmieniają.
Dlaczego nie użyć wbudowanego wyszukiwania w sieci dostawcy modelu?
Wbudowane narzędzia wyszukiwania same wybierają źródła i ustawienia. Funkcja na SerpCrypto daje wyniki wyszukiwania Google dla wybranego kraju i języka, jako JSON, który możesz logować, w znanej cenie za wyszukiwanie.
Czy model może wybrać kraj?
Tak. gl to parametr narzędzia, więc model może ustawić go na podstawie pytania, na przykład gb dla pytania o Wielką Brytanię. Zachowaj w kodzie wartość domyślną dla pytań, które nie wskazują kraju.
Czy potrzebuję karty kredytowej, aby uzyskać klucz API do wyszukiwania?
Nie. Kredyty SerpCrypto są opłacane w BTC, USDT, USDC, ETH, SOL, LTC, bez dowodu, bez selfie i bez dokumentów. Logowanie numerem konta; email jest opcjonalny.