Cara Menambahkan Web Search Real-Time ke Agen OpenAI atau Claude dalam 4 Langkah

Ingin agen Anda mendasarkan jawaban pada informasi terkini? Anda hanya butuh dua hal: API pencarian yang mengembalikan snippet siap-LLM, dan definisi tool yang bisa dipanggil model. Panduan ini melakukan keduanya dalam 4 langkah.
TL;DR
- •Langkah 1: dapatkan API key (gratis) dan coba endpoint dengan curl.
- •Langkah 2: ambil tool schema OpenAI/Claude langsung dari API — tanpa menulis JSON manual.
- •Langkah 3: daftarkan tool ke agen Anda (OpenAI Assistants, Anthropic Messages, LangChain, atau n8n).
- •Langkah 4: implementasikan handler tool yang memanggil /api/search/web dan mengembalikan hasil ke model.
Kenapa artikel ini singkat
Kebanyakan tutorial \"tambahkan web search ke LLM Anda\" panjang karena sebenarnya itu tutorial tentang SDK API pencarian atau framework agen yang berat. Yang ini tidak. Seluruh pekerjaannya: pilih satu endpoint, daftarkan sebagai tool, tulis handler 5 baris.
1Dapatkan API key (gratis) dan panggil endpoint
Daftar di apipick.com/dashboard/api-keys. Akun baru mendapat 100 credits gratis — tanpa kartu kredit. Buat key dan coba endpoint-nya:
curl -X POST https://www.apipick.com/api/search/web \
-H "x-api-key: pk_yourkey" \
-H "Content-Type: application/json" \
-d '{"query": "what is retrieval augmented generation"}'Anda akan menerima daftar kecil berisi title, URL, dan snippet yang sudah diranking. Memastikan ini berfungsi di curl menghemat waktu debugging nanti.
2Ambil tool schema (jangan tulis manual)
API Pick menyediakan tool schema siap tempel di GET /api/search/web/tool-schema. Respons-nya mencakup definisi function gaya OpenAI sekaligus definisi tool use Claude.
curl https://www.apipick.com/api/search/web/tool-schemaCache hasilnya — tidak berubah antar panggilan. Menulis function schema secara manual adalah sumber bug paling umum dalam kode agen (tipe salah, field required salah, deskripsi hilang).
3Daftarkan tool ke agen Anda
OpenAI Assistants
from openai import OpenAI
import requests
client = OpenAI()
schema = requests.get("https://www.apipick.com/api/search/web/tool-schema").json()
assistant = client.beta.assistants.create(
name="Research Agent",
model="gpt-4o",
instructions="Use web_search whenever the user asks about current events or anything that changes after your training cutoff.",
tools=[{"type": "function", "function": schema["openai"]}],
)Anthropic Claude
import anthropic
import requests
schema = requests.get("https://www.apipick.com/api/search/web/tool-schema").json()
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
tools=[schema["claude"]],
messages=[{"role": "user", "content": "Summarise this week's RAG research."}],
)LangChain
from langchain.tools import tool
import requests
@tool
def web_search(query: str) -> dict:
"""Real-time web search. Use for any question that needs current information."""
return requests.post(
"https://www.apipick.com/api/search/web",
headers={"x-api-key": "pk_yourkey"},
json={"query": query},
).json()n8n
Tambahkan node HTTP Request: method POST, URL https://www.apipick.com/api/search/web, header x-api-key: pk_yourkey, body JSON {"query": "{{ $json.query }}"}. Sambungkan ke node agen atau LLM Chain Anda. Tanpa perlu SDK.
4Tangani panggilan tool
Untuk OpenAI Assistants, ketika run berhenti dengan status requires_action, jalankan pencarian dan kirim output-nya:
import json, time, requests
from openai import OpenAI
client = OpenAI()
KEY = "pk_yourkey"
def run_with_tool(thread_id: str, assistant_id: str):
run = client.beta.threads.runs.create(thread_id=thread_id, assistant_id=assistant_id)
while True:
run = client.beta.threads.runs.retrieve(thread_id=thread_id, run_id=run.id)
if run.status == "requires_action":
outputs = []
for call in run.required_action.submit_tool_outputs.tool_calls:
if call.function.name == "web_search":
args = json.loads(call.function.arguments)
result = requests.post(
"https://www.apipick.com/api/search/web",
headers={"x-api-key": KEY},
json=args,
).json()
outputs.append({"tool_call_id": call.id, "output": json.dumps(result)})
client.beta.threads.runs.submit_tool_outputs(
thread_id=thread_id, run_id=run.id, tool_outputs=outputs,
)
elif run.status in ("completed", "failed", "cancelled", "expired"):
return run
time.sleep(0.5)Loop Anthropic Messages API serupa — ketika respons berisi blok tool_use, panggil API, lalu kirim hasilnya kembali sebagai blok konten tool_result pada giliran berikutnya.
Mengencangkan loop
- Tetapkan deskripsi tool dari sudut pandang model: \"Use this when the user asks about current events, breaking news, or anything that may have changed after your training cutoff.\" Jangan bilang \"ini adalah API web search\".
- Cache hasil di handler Anda ketika query yang sama muncul dua kali dalam satu sesi. Hasil web search stabil selama ~beberapa menit; Anda tidak perlu membayar 15 credits dua kali dalam percakapan yang sama.
- Tambahkan filter
start_datesaat kesegaran penting. \"Berita minggu ini\" tanpa filter tanggal sering mengembalikan headline tahun lalu.
Ke mana selanjutnya
Setelah agen Anda bisa mencari, langkah berikutnya yang alami adalah membaca halaman yang ditautkan. Tambahkan URL Content Extraction API sebagai tool kedua — auth sama, bentuk JSON sama, hingga 25 URL per panggilan. Kombinasi \"search + extract\" adalah agen research berguna paling kecil.
Pertanyaan yang Sering Diajukan
Bisakah saya memakai ini dengan OpenAI Responses API alih-alih Assistants?
Bisa. Tool schema yang sama berfungsi di client.responses.create() — teruskan lewat tools=[{...}] persis seperti yang ditunjukkan di dokumentasi OpenAI. Bentuk handler-nya identik: parse tool_calls, jalankan POST /api/search/web, kembalikan JSON-nya.
Apakah hasilnya perlu diformat sebelum dikembalikan ke model?
Tidak. POST /api/search/web mengembalikan title + URL + snippet LLM-friendly yang sudah diranking. Teruskan JSON mentah sebagai hasil tool. Model akan mengutip snippet dan menautkan URL-nya.
Berapa biaya tiap giliran agen?
Setiap panggilan web search adalah 15 credits (~$0,015 pada $5/5.000 credits). Satu giliran agen biasa yang memakai tool sekali jauh di bawah satu sen AS untuk biaya pencarian — token LLM-lah yang mendominasi.
Bagaimana kalau model tidak pernah memanggil tool-nya?
Buat deskripsi tool spesifik. "Use this for any question that requires current or post-training information" jauh lebih efektif daripada "web search". Model mengarahkan ke tool yang tujuannya mereka pahami.
Bisakah saya membatasi hasil ke suatu negara atau rentang tanggal?
Bisa. Teruskan country_code (ISO 3166-1 alpha-2) dan/atau start_date / end_date (YYYY-MM-DD). Tambahkan sebagai parameter di tool schema Anda jika ingin model yang memilihnya; atau hard-code di handler jika agen Anda punya locale atau kebutuhan kesegaran yang tetap.
API yang digunakan dalam artikel ini
Sarah Choy adalah CEO API Pick. Ia menulis tentang membangun API siap produksi untuk AI agent dan alur kerja LLM.