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

Dokumentasi · tool OpenAI

OpenAI function calling: tool read_url untuk model Anda

Jelaskan satu fungsi, read_url, dan jalankan saat model memintanya. Model memilih halaman mana yang dibaca; kode Anda memanggil API dan mengembalikan Markdown. Skema yang sama berfungsi dengan model lain yang mendukung tool calling.

Terakhir diperbarui: · 4 menit baca

Jawaban singkat

Bagaimana cara membiarkan model OpenAI membaca halaman web dengan function calling?

Deklarasikan fungsi read_url dalam daftar tools, lalu jalankan loop: saat model mengembalikan tool call, panggil endpoint /read dari WebReaderAPI dengan URL dan kirim Markdown kembali sebagai pesan tool. Setiap halaman berbiaya 1 kredit, 2 dengan browser, mulai dari US$0,07/1K halaman per Oktober 2026. Tanpa KYC; bayar dengan kripto.

Seperti apa skema read_url?

Dua parameter sudah cukup: url yang akan dibaca, wajib, dan max_chars opsional yang memungkinkan model meringkas halaman panjang. Deskripsi adalah bagian terpenting: memberi tahu model apa yang dikembalikan tool dan kapan menggunakannya. Jaga tetap faktual dan singkat.

Kami menamai tool ini read_url alih-alih web_fetch untuk menghindari bentrok dengan tool yang sudah disediakan sebagian agent runtime dengan nama tersebut.

Definisi tool
{
  "type": "function",
  "function": {
    "name": "read_url",
    "description": "Read a public web page and return its main content as Markdown, with its title and source URL. Use it when the user gives a link or when a page must be read to answer.",
    "parameters": {
      "type": "object",
      "properties": {
        "url": { "type": "string", "description": "The http or https address of the page." },
        "max_chars": { "type": "integer", "description": "Most characters to return, 1000 to 500000. Default 20000." }
      },
      "required": ["url"],
      "additionalProperties": false
    }
  }
}

Bagaimana cara kerja loop tool calling?

Kirim percakapan dengan daftar tools. Jika balasan berisi tool call, jalankan masing-masing, tambahkan hasilnya sebagai pesan dengan role tool dan tool_call_id yang sesuai, lalu tanyakan lagi ke model. Saat balasan datang tanpa tool call, itulah jawaban akhir.

Batasi jumlah putaran. Tiga atau empat sudah cukup untuk pertanyaan tentang beberapa halaman, dan batas ini melindungi Anda dari model yang terus meminta lebih banyak.

Python: loop lengkap dengan package openai
import json
import os

import requests
from openai import OpenAI

READ_URL = {
    "type": "function",
    "function": {
        "name": "read_url",
        "description": "Read a public web page and return its main content as Markdown, with its title and source URL.",
        "parameters": {
            "type": "object",
            "properties": {
                "url": {"type": "string", "description": "The http or https address of the page."},
                "max_chars": {"type": "integer", "description": "Most characters to return. Default 20000."},
            },
            "required": ["url"],
            "additionalProperties": False,
        },
    },
}


def read_url(url, max_chars=20000):
    resp = requests.get(
        "https://webreaderapi.com/api/v1/read",
        headers={"Authorization": "Bearer " + os.environ["WEBREADER_API_KEY"]},
        params={"url": url, "max_chars": max_chars},
        timeout=75,
    )
    body = resp.json()
    if resp.status_code != 200:
        return "Could not read the page: " + body["error"]["code"]
    return "# " + (body.get("title") or url) + "\nSource: " + body["final_url"] + "\n\n" + body["markdown"]


client = OpenAI()
model = os.environ.get("OPENAI_MODEL", "gpt-4.1-mini")
messages = [{"role": "user", "content": "What does https://example.com/blog/first-post announce? Answer in two sentences."}]

for _ in range(4):
    reply = client.chat.completions.create(model=model, messages=messages, tools=[READ_URL])
    msg = reply.choices[0].message
    if not msg.tool_calls:
        print(msg.content)
        break
    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": read_url(**args)})

Bagaimana cara menekan penggunaan token dan biaya?

Tiga pengaturan penting. Jaga max_chars tetap moderat, sekitar 8.000 hingga 20.000 karakter per halaman, karena setiap karakter yang Anda kembalikan dibaca oleh model. Pertahankan main_content=true default, agar menu dan footer tidak pernah masuk ke context. Dan batasi loop, seperti di atas, agar satu pertanyaan tidak memicu puluhan pembacaan.

Di sisi kami, biaya dihitung per halaman, bukan per karakter: 1 kredit = 1 halaman dibaca tanpa browser; 2 kredit jika halaman memerlukan browser untuk merender JavaScript. Permintaan yang gagal, atau yang ditolak oleh robots.txt suatu situs, tidak dikenai biaya. Asisten dukungan yang membaca 300 halaman sehari memakai sekitar 9.000 kredit sebulan, di dalam 10.000 halaman (US$3,75).

Apakah skema ini berfungsi dengan model lain?

Ya, dengan sedikit perubahan pada wrapper. Sebagian besar API tool calling menerima JSON Schema untuk parameter serta nama dan deskripsi untuk tool, jadi read_url dapat dipindahkan antar penyedia apa adanya. Halaman MCP mengemas fungsi yang sama untuk klien yang berbicara Model Context Protocol, dan halaman LangChain membungkusnya untuk agent LangChain dan LlamaIndex.

Apa yang harus dilihat model saat halaman ditolak?

Kalimat singkat dan jelas, seperti yang dikembalikan loop di atas: "Could not read the page: blocked_by_robots". Model menanganinya dengan baik dan beralih ke sumber lain atau memberi tahu pengguna. Kami menghormati robots.txt: crawler kami mengidentifikasi diri sebagai WebReaderAPI, mengikuti aturan yang ditulis untuknya atau untuk semua robot, dan tidak membaca halaman yang tidak diizinkan situs. Halaman yang ditolak tidak dikenai biaya. Jika suatu situs menolak permintaan kami, kami mengembalikan jawabannya: kami tidak pernah menyelesaikan CAPTCHA, masuk ke akun, atau mencoba mengatasi blokir atau paywall. Tidak ada dari penolakan ini yang memakai kredit.

Function calling: pertanyaan umum

Apakah ini memerlukan Responses API atau Chat Completions?

Contoh menggunakan Chat Completions dengan parameter tools. Definisi fungsi yang sama dan body read_url yang sama berfungsi dengan antarmuka OpenAI lain yang menerima function tool; hanya loop di sekitarnya yang berubah.

Bisakah model membaca beberapa halaman dalam satu giliran?

Ya. Satu balasan bisa berisi beberapa tool call; loop menjalankan masing-masing dan mengembalikan setiap hasil sebelum bertanya lagi ke model. Jaga max_chars lebih rendah saat model membaca banyak halaman sekaligus.

Apakah API key terekspos ke model?

Tidak. Key tetap berada di environment kode Anda. Model hanya melihat nama tool, deskripsinya, dan teks yang dikembalikan fungsi Anda.

Berapa biaya halaman yang ditolak?

Nol. 1 kredit = 1 halaman dibaca tanpa browser; 2 kredit jika halaman memerlukan browser untuk merender JavaScript. Permintaan yang gagal, atau yang ditolak oleh robots.txt suatu situs, tidak dikenai biaya.

Mulai dari US$0,07/1K halaman · tanpa KYC

Dapatkan API key