Tanpa KYC — tanpa ID, tanpa selfie, tanpa dokumen. Bayar dengan kripto: BTC, USDT, USDC, ETH, SOL, LTC
Bahasa: Bahasa Indonesia
Dapatkan API key

Docs · OpenAI · diperiksa pada 22 Oktober 2026

OpenAI function calling: beri model tool search_web

Jelaskan fungsi search_web ke model, jalankan panggilan yang dimintanya ke API kami, lalu kirim sumbernya kembali. Model kemudian menjawab dengan sitasi. Halaman ini menunjukkan skema JSON, loop Responses API, dan versi OpenAI Agents SDK yang lebih singkat.

Terakhir diperbarui: · 5 menit baca

Jawaban singkat

Bagaimana cara menambahkan pencarian web ke model OpenAI dengan function calling?

Deklarasikan fungsi search_web dengan skema JSON, dan saat model memanggilnya, POST kuerinya ke https://llmwebsearch.com/api/v1/search milik LLMWebSearch. Kembalikan sumber bernomor, dengan 3 halaman teratas sebagai Markdown, sebagai function_call_output; model menjawab dan mengutipnya. Satu pencarian berbiaya 1 kredit, mulai dari US$1,20/1K pencarian per Oktober 2026. Tanpa KYC; bayar dengan kripto.

Yang Anda butuhkan

Paketopenai dan requests (atau openai-agents untuk versi Agents SDK)
API keyOPENAI_API_KEY untuk model, LLMWEBSEARCH_API_KEY untuk pencarian
ModelModel apa pun yang mendukung function calling, diatur di OPENAI_MODEL
API yang dipakaiResponses API: client.responses.create dengan tools dan input
Penagihan di sisi kamiSatu kredit membayar satu pencarian: hingga 20 hasil berperingkat, dengan halaman dari 3 hasil teratas dibaca dan dikembalikan sebagai Markdown. Membaca 4 hingga 10 halaman menjadi 2 kredit. Panggilan yang berakhir dengan error tidak dikenakan biaya

Seperti apa skema tool-nya?

Function tool punya name, description, dan JSON Schema parameters. Buat deskripsinya konkret: apa yang dikembalikan tool, dan bahwa sumber harus dikutip berdasarkan nomor. Dua parameter cukup untuk sebagian besar agen: query, dan berapa hasil teratas yang diambil read secara penuh.

Model tidak pernah melihat API key Anda. Model hanya mengusulkan argumen; kode Anda yang memutuskan cara memanggil API dan apa yang dikirim kembali.

Bagaimana loop panggilannya bekerja?

Kirim pesan pengguna beserta tools. Jika respons berisi item bertipe function_call, parse JSON arguments masing-masing, jalankan pencarian, dan tambahkan function_call_output dengan call_id yang sama. Lalu panggil model lagi dengan daftar input yang lebih panjang. Ketika respons tidak berisi function call, teksnya adalah jawabannya.

Loop di bawah berhenti setelah lima putaran, sebagai pengaman terhadap model yang terus mencari. Panduan function calling OpenAI menjelaskan item function_call dan function_call_output yang sama, dibaca pada 22 Oktober 2026.

search_tool_loop.py (Responses API)
import json
import os

import requests
from openai import OpenAI

client = OpenAI()
MODEL = os.environ["OPENAI_MODEL"]  # any model that supports function calling
SEARCH = "https://llmwebsearch.com/api/v1/search"

tools = [
    {
        "type": "function",
        "name": "search_web",
        "description": "Search the live web. Returns numbered sources with URLs; the first `read` include page text. Cite sources as [1], [2].",
        "parameters": {
            "type": "object",
            "properties": {
                "query": {"type": "string", "description": "What to search for, as a person would type it."},
                "read": {"type": "integer", "minimum": 0, "maximum": 10, "description": "How many top results to read in full."},
            },
            "required": ["query"],
            "additionalProperties": False,
        },
    }
]


def search_web(query, read=3):
    resp = requests.post(
        SEARCH,
        headers={"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]},
        json={"q": query, "max_results": 5, "read": read, "max_chars": 5000},
        timeout=60,
    )
    if resp.status_code != 200:
        return "Search failed: " + resp.json().get("error", {}).get("code", str(resp.status_code))
    parts = []
    for i, r in enumerate(resp.json()["results"], start=1):
        text = r["content"] if r["content_status"] == "ok" else "(snippet only) " + r["snippet"]
        parts.append(f"[{i}] {r['title']} - {r['url']}\n{text}")
    return "\n\n".join(parts)


input_list = [{"role": "user", "content": "How should I size a Postgres connection pool?"}]
for _ in range(5):
    response = client.responses.create(model=MODEL, tools=tools, input=input_list)
    calls = [item for item in response.output if item.type == "function_call"]
    if not calls:
        print(response.output_text)
        break
    input_list += response.output
    for item in calls:
        args = json.loads(item.arguments)
        output = search_web(args["query"], int(args.get("read", 3)))
        input_list.append({"type": "function_call_output", "call_id": item.call_id, "output": output})

Apakah ada versi yang lebih singkat dengan Agents SDK?

Ya. OpenAI Agents SDK mengubah fungsi Python menjadi tool dengan decorator dan menjalankan loop panggilannya untuk Anda. Dokumentasi tools-nya, dibaca pada 22 Oktober 2026, menunjukkan decorator @tool dari agents.decorators, dengan deskripsi diambil dari docstring dan deskripsi tiap argumen dari bagian Args-nya. Halaman yang sama juga menyebut bentuk @function_tool.

Runner.run_sync menjalankan agen sampai menghasilkan jawaban akhir, memanggil search_web sesering yang diminta model.

search_agent.py (OpenAI Agents SDK)
import os

import requests
from agents import Agent, Runner
from agents.decorators import tool


@tool
def search_web(query: str, read: int = 3) -> str:
    """Search the live web and return numbered sources with their URLs.

    Args:
        query: What to search for, as a person would type it.
        read: How many top results to read in full, from 0 to 10.
    """
    resp = requests.post(
        "https://llmwebsearch.com/api/v1/search",
        headers={"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]},
        json={"q": query, "max_results": 5, "read": max(0, min(read, 10)), "max_chars": 5000},
        timeout=60,
    )
    resp.raise_for_status()
    parts = []
    for i, r in enumerate(resp.json()["results"], start=1):
        text = r["content"] if r["content_status"] == "ok" else "(snippet only) " + r["snippet"]
        parts.append(f"[{i}] {r['title']} - {r['url']}\n{text}")
    return "\n\n".join(parts)


agent = Agent(
    name="Researcher",
    instructions="Answer from search_web results only and cite them as [1], [2].",
    tools=[search_web],
)
result = Runner.run_sync(agent, "How should I size a Postgres connection pool?")
print(result.final_output)

Mengapa menggunakan alat API alih-alih pencarian web bawaan OpenAI?

Terutama untuk kendali atas apa yang dibaca model dan berapa biayanya. Alat kami menyerahkan sumber mentah ke kode Anda, lengkap dengan URL dan teks halaman, jadi Anda yang menentukan apa yang masuk ke konteks, dapat mencatatnya, dan dapat menyimpannya. Kami tidak melatih model apa pun dengan kueri Anda atau dengan apa yang dikembalikan API, dan kami tidak menambahkan aturan kami sendiri yang melarang penyimpanan hasil; hak situs yang halaman-halamannya Anda baca tetap berlaku.

Harganya juga tetap per pencarian, bukan bergantung pada seberapa banyak konten yang diambil dan dibaca model. Perbandingan alat bawaan menampilkan harga per panggilan OpenAI, Anthropic, Google, dan lainnya secara berdampingan, beserta tanggalnya.

Bagaimana cara menghentikan model agar tidak terlalu banyak mencari?

Katakan di instruksinya: cari sekali, baca sumbernya, cari lagi hanya jika sumbernya saling bertentangan atau meleset dari intinya. Batasi jumlah putaran di loop Anda sendiri, seperti yang dilakukan skrip di atas dengan lima.

Jaga max_chars tetap moderat. Tiga halaman berisi 5.000 karakter sekitar 4.000 token per pencarian, dan setiap putaran menambahkannya ke input panggilan model berikutnya.

OpenAI function calling: pertanyaan umum

Apakah ini berfungsi dengan Chat Completions API?

Ya, dengan format tools lama dari Chat Completions, di mana fungsi berada di dalam objek function dan hasilnya dikirim balik sebagai pesan tool. Fungsi pencariannya sendiri tidak berubah.

Bisakah model membaca halaman yang ditemukannya di sebuah sumber?

Tambahkan fungsi kedua, read_urls, yang mengirim URL ke https://llmwebsearch.com/api/v1/extract. Membaca halaman yang URL-nya sudah Anda miliki dikenakan 1 kredit untuk setiap grup 3 halaman yang mulai dikembalikan beserta kontennya, hingga 20 URL per panggilan; URL yang ditolak atau gagal tidak dihitung.

Model mana yang sebaiknya saya gunakan?

Model apa pun yang mendukung function calling. Coba dua atau tiga model dengan pertanyaan Anda sendiri: jawabannya bergantung pada sumbernya sama besarnya dengan pada model, dan model yang lebih kecil lebih murah per putaran.

Sumber (2)
  1. Function calling — OpenAI API docs (read 2026-10-22)
  2. Tools (OpenAI Agents SDK) — OpenAI Agents SDK docs (read 2026-10-22)

Mulai dari US$1,20/1K pencarian · tanpa KYC

Dapatkan API key