Jawaban singkat
Bagaimana cara memberi model OpenAI alat pencarian web?
Deklarasikan fungsi google_search dengan JSON Schema di tools, lalu lakukan loop: saat model mengembalikan tool_calls, jalankan setiap pencarian di https://serpcrypto.com/api/v1/search dan tambahkan hasilnya sebagai pesan tool sampai ia menjawab. SerpCrypto menagih 1 kredit per pencarian yang berhasil, mulai dari US$0,30/1K pencarian, dibayar dengan kripto tanpa KYC.
Seperti apa skema tool-nya?
Sebuah function tool memiliki nama, deskripsi, dan parameter dalam JSON Schema. Model hanya melihat ketiga hal ini, jadi deskripsi harus menjelaskan apa yang dikembalikan tool dan kapan menggunakannya. Hanya query yang wajib; country dan language bersifat opsional dan secara default disetel ke US English di dalam kode.
{
"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"]
}
}
}Bagaimana cara kerja loop tool-calling?
Kirim pertanyaan dengan tools. Jika balasan berisi tool_calls, jalankan masing-masing, tambahkan pesan assistant dan satu pesan tool per panggilan dengan tool_call_id yang sesuai, lalu panggil model lagi. Saat balasan tidak berisi tool call, itulah jawaban akhir.
Loop di bawah berhenti setelah tiga pencarian. Batas ini melindungi kredit Anda jika model terus mencari, dan tiga pencarian sudah menjawab sebagian besar pertanyaan faktual.
"""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."))Apakah schema yang sama berfungsi dengan Claude dan model lain?
Ya, dengan wrapper yang berbeda. Tool use Claude menerima JSON Schema yang sama di bawah input_schema, di samping name dan description. Sebagian besar API tool-calling lain juga menerima JSON Schema untuk parameter; hanya nama field luarnya yang berubah. Fungsi pencariannya sendiri tetap sama, karena hanya memanggil 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"]
}
}Apa yang sebaiknya dikembalikan tool ke model?
Teks singkat dengan link. Lima hasil berisi title, link dan snippet biasanya cukup bagi model untuk menjawab dan mengutip. Mengembalikan JSON penuh juga bisa, tetapi memakan lebih banyak token dan memberi model lebih banyak noise untuk dibaca.
Tambahkan teks AI Overview jika ada bila Anda ingin model melihat ringkasan dari Google sendiri, dan pertahankan link sumbernya agar jawaban dapat mengutip halaman, bukan overview-nya.
Bagaimana cara menjaga biaya pencarian tetap terprediksi?
Hitung tool call: setiap panggilan yang berhasil berarti satu kredit. Batasi jumlah pencarian per pertanyaan, seperti yang dilakukan loop, dan catat setiap panggilan beserta kuerinya agar Anda bisa melihat apa yang diminta model. Pada paket 100.000 pencarian tarifnya US$0,56/1K pencarian, dan Kredit pencarian prabayar tidak pernah kedaluwarsa: pencarian yang belum terpakai tetap ada di akun Anda sampai Anda menggunakannya.
Error tidak dikenakan biaya: 1 kredit = 1 permintaan pencarian yang berhasil, yang mengembalikan satu halaman hasil di mesin mana pun yang didukung. Permintaan yang gagal tidak dikenai biaya.
Pertanyaan seputar function calling
Bisakah saya memakai Responses API alih-alih Chat Completions?
Ya. Responses API menerima function tool dengan JSON Schema yang sama, dengan name, description dan parameters di level teratas setiap tool. Fungsi pencarian dan konsep loop-nya tidak berubah.
Mengapa tidak memakai web search bawaan penyedia model?
Tool search bawaan memilih sumber dan pengaturannya sendiri. Function pada SerpCrypto memberi Anda hasil pencarian Google untuk negara dan bahasa yang Anda pilih, berupa JSON yang bisa Anda catat, dengan harga per pencarian yang diketahui.
Bisakah model memilih negaranya?
Ya. gl adalah parameter dari tool, jadi model dapat mengisinya dari pertanyaan, misalnya gb untuk pertanyaan tentang United Kingdom. Siapkan nilai default di kode Anda untuk pertanyaan yang tidak menyebut negara.
Apakah saya perlu kartu kredit untuk mendapatkan API key pencarian?
Tidak. Kredit SerpCrypto dibayar dengan BTC, USDT, USDC, ETH, SOL, LTC, tanpa ID, tanpa selfie dan tanpa dokumen. Login dengan nomor akun; email bersifat opsional.