KYC yok — kimlik yok, selfie yok, belge yok. Kripto ile ödeme: BTC, USDT, USDC, ETH, SOL, LTC
Dil: Türkçe
API anahtarı alın

Dokümanlar · OpenAI · 22 Ekim 2026'da kontrol edildi

OpenAI function calling: modele bir search_web aracı verin

Modele bir search_web fonksiyonu tanımlayın, istediği çağrıyı API'mize karşı çalıştırın ve kaynakları geri gönderin. Model ardından kaynak göstererek yanıtlar. Bu sayfa JSON schema'yı, Responses API döngüsünü ve daha kısa OpenAI Agents SDK sürümünü gösterir.

Son güncelleme: · 5 dk okuma

Kısa yanıt

Function calling ile OpenAI modeline web search nasıl eklenir?

Bir JSON schema ile bir search_web fonksiyonu tanımlayın ve model onu çağırdığında sorguyu LLMWebSearch'ın https://llmwebsearch.com/api/v1/search endpoint'ine POST edin. Numaralandırılmış kaynakları, en iyi 3 sayfa Markdown olarak, bir function_call_output içinde döndürün; model yanıtlar ve bunlara atıfta bulunur. Bir arama 1 kredi tutar; Ekim 2026 itibarıyla $1,20/1K arama. KYC yok; kripto ile ödeme.

İhtiyacınız olanlar

Paketleropenai ve requests (veya Agents SDK sürümü için openai-agents)
AnahtarlarModel için OPENAI_API_KEY, arama için LLMWEBSEARCH_API_KEY
ModelOPENAI_MODEL içinde ayarlanan, function calling destekleyen herhangi bir model
Kullanılan APIResponses API: tools ve input ile client.responses.create
Bizim tarafımızdaki faturalandırmaBir kredi bir aramayı karşılar: en fazla 20 sıralı sonuç, ilk 3'ün sayfaları okunur ve Markdown olarak döndürülür. 4 ile 10 arası sayfa okumak 2 kredi eder. Hata ile biten bir çağrı hiçbir ücrete tabi değildir

Araç şeması nasıl görünür?

Bir function tool'un bir name, bir description ve JSON Schema parameters'si vardır. Açıklamayı somut tutun: aracın ne döndürdüğünü ve kaynakların numaraya göre gösterilmesi gerektiğini. Çoğu agent için iki parametre yeterlidir: query ve tam olarak kaç en iyi sonucun read tutulacağı.

Model API anahtarınızı asla görmez. Yalnızca argümanlar önerir; API'nin nasıl çağrılacağına ve ne gönderileceğine kodunuz karar verir.

Çağrı döngüsü nasıl çalışır?

Kullanıcının mesajını tools ile gönderin. Yanıt function_call türünde öğeler içeriyorsa, her birinin JSON arguments'unu ayrıştırın, aramayı çalıştırın ve aynı call_id ile bir function_call_output ekleyin. Ardından daha uzun giriş listesiyle modeli yeniden çağırın. Bir yanıt hiç function call içermiyorsa, metni yanıttır.

Aşağıdaki döngü, sürekli arama yapan bir modele karşı bir önlem olarak beş turdan sonra durur. OpenAI'nin function-calling rehberi aynı function_call ve function_call_output öğelerini açıklar (22 Ekim 2026'da okundu).

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})

Agents SDK ile daha kısa bir sürüm var mı?

Evet. OpenAI Agents SDK, bir Python fonksiyonunu bir decorator ile araca dönüştürür ve çağrı döngüsünü sizin için çalıştırır. 22 Ekim 2026'da okunan tools dokümantasyonu, açıklamanın docstring'den ve her argümanın açıklamasının Args bölümünden alındığı agents.decorators'tan gelen @tool decorator'unu gösterir. Aynı sayfa @function_tool formundan da söz eder.

Runner.run_sync, nihai bir yanıt üretene kadar agent'ı çalıştırır ve search_web'ı modelin istediği sıklıkta çağırır.

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)

OpenAI'nin yerleşik web araması yerine neden bir API aracı kullanmalıyım?

Çoğunlukla modelin neyi okuduğu ve ne kadar maliyet oluşturduğu üzerindeki kontrol için. Aracımız kodunuza ham kaynakları URL'ler ve sayfa metniyle birlikte verir; böylece bağlama neyin gireceğine siz karar verir, kaydedebilir ve saklayabilirsiniz. Sorgularınız veya API'nin döndürdükleri üzerinde hiçbir model eğitmeyiz ve sonuçları saklamaya karşı kendi kurallarımızı eklemeyiz; sayfalarını okuduğunuz sitelerin hakları hâlâ geçerlidir.

Fiyat da modelin ne kadar getirilen içerik okuduğuna bağlı olmak yerine arama başına sabittir. Yerleşik araçlar karşılaştırması OpenAI, Anthropic, Google ve diğerlerinin çağrı başına fiyatlarını tarihleriyle yan yana koyar.

Modelin çok fazla arama yapmasını nasıl durdururum?

Talimatta söyleyin: bir kez ara, kaynakları oku, yalnızca çelişirlerse veya konuyu kaçırırlarsa tekrar ara. Kendi döngünüzdeki tur sayısını sınırlayın, yukarıdaki betikte olduğu gibi beşle.

max_chars değerini ölçülü tutun. 5.000 karakterlik üç sayfa arama başına yaklaşık 4.000 token eder ve her tur bunları bir sonraki model çağrısının girdisine ekler.

OpenAI function calling: sık sorulan sorular

Bu, Chat Completions API ile çalışır mı?

Evet, Chat Completions'ın eski tools biçimiyle; burada function bir function nesnesinin içinde yer alır ve sonuçlar tool mesajları olarak geri döner. Arama fonksiyonunun kendisi değişmez.

Model bir kaynakta bulduğu sayfayı okuyabilir mi?

URL'leri https://llmwebsearch.com/api/v1/extract adresine gönderen ikinci bir read_urls fonksiyonu ekleyin. URL'sini zaten bildiğiniz sayfaları okumak, içerikle birlikte döndürülen her başlamış 3 sayfalık grup için 1 kredi eder, çağrı başına en fazla 20 URL; reddedilen veya başarısız olan URL'ler sayılmaz.

Hangi modeli kullanmalıyım?

Function calling destekleyen herhangi bir model. Kendi sorularınızda iki üç tanesini deneyin: yanıt, modele olduğu kadar kaynaklara da bağlıdır ve daha küçük bir model tur başına daha az maliyetlidir.

Kaynaklar (2)
  1. Function calling — OpenAI API docs (read 2026-10-22)
  2. Araçlar (OpenAI Agents SDK) — OpenAI Agents SDK docs (read 2026-10-22)

$1,20/1K arama'dan · KYC olmadan

API anahtarı alın