İçeriğe geç

Tool Calling (Function Calling)

LLMTR gateway, OpenAI Chat Completions ile birebir uyumlu tool calling (function calling) destekler. Modele bir araç listesi verirsiniz, model gerektiğinde araç çağrısı döndürür, siz aracı çalıştırıp sonucu geri gönderirsiniz. Akış https://llmtr.com/v1/chat/completions üzerinden ilerler ve OpenAI SDK’ları, LangChain, Flowise gibi ajan çerçeveleri ile kod araçları (Cursor, Cline) sorunsuz çalışır.

  1. İstekte tools (ve isteğe bağlı tool_choice) gönderirsiniz.
  2. Model bir araç çağırmaya karar verirse, yanıt finish_reason: "tool_calls" ve message.tool_calls ile döner; message.content null olur.
  3. Aracı kendi tarafınızda çalıştırırsınız.
  4. Sonucu role: "tool" mesajı olarak (aynı tool_call_id ile) geçmişe ekleyip isteği tekrar gönderirsiniz. Model nihai cevabı üretir.
Terminal window
curl https://llmtr.com/v1/chat/completions \
-H "Authorization: Bearer llmtr-your_key" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-4o-mini",
"messages": [
{"role": "user", "content": "Istanbul'\''da hava nasil?"}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Bir sehir icin guncel hava durumunu dondurur",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "Sehir adi"}
},
"required": ["location"]
}
}
}
],
"tool_choice": "auto"
}'

Model araç çağırdığında content null, finish_reason tool_calls olur ve tool_calls dizisi gelir. function.arguments her zaman JSON string’idir (JSON nesnesi değil), kullanmadan önce parse edin.

{
"id": "chatcmpl-xxx",
"object": "chat.completion",
"model": "openai/gpt-4o-mini",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_abc123",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"Istanbul\"}"
}
}
]
},
"finish_reason": "tool_calls"
}
],
"usage": { "prompt_tokens": 62, "completion_tokens": 18, "total_tokens": 80 }
}

2. Araç sonucunu geri gönderme (çok turlu döngü)

Section titled “2. Araç sonucunu geri gönderme (çok turlu döngü)”

Aracı çalıştırdıktan sonra iki mesajı geçmişe ekleyin: modelin döndürdüğü assistant mesajı (tool_calls ile) ve sonucu taşıyan tool mesajı. tool mesajında tool_call_id, modelin verdiği çağrı id’siyle aynı olmalıdır.

Terminal window
curl https://llmtr.com/v1/chat/completions \
-H "Authorization: Bearer llmtr-your_key" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-4o-mini",
"messages": [
{"role": "user", "content": "Istanbul'\''da hava nasil?"},
{
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_abc123",
"type": "function",
"function": {"name": "get_weather", "arguments": "{\"location\":\"Istanbul\"}"}
}
]
},
{
"role": "tool",
"tool_call_id": "call_abc123",
"content": "{\"temp_c\":24,\"condition\":\"sunny\"}"
}
]
}'

Model nihai cevabı düz metin olarak döndürür (finish_reason: "stop"):

{
"choices": [
{
"message": {"role": "assistant", "content": "Istanbul su an 24°C ve gunesli."},
"finish_reason": "stop"
}
]
}

Bir turda birden çok araç çağrısı dönebilir (paralel tool calls). Her tool_call için ayrı bir role: "tool" mesajı eklemeniz gerekir; biri eksikse sonraki istek hata döndürür.

tencent/hy3:low veya tencent/hy3:high bir tool çağırdığında assistant mesajı reasoning_content da içerebilir. Sonraki turda bu alanı aynen geri gönderin:

{
"role": "assistant",
"content": "Hava aracını çağıracağım.",
"reasoning_content": "Kullanıcının verdiği şehir için aracı seçiyorum...",
"tool_calls": [{
"id": "call_abc123",
"type": "function",
"function": {"name": "get_weather", "arguments": "{\"location\":\"Istanbul\"}"}
}]
}

Bu assistant mesajının arkasına eşleşen role: "tool" sonucunu ekleyin. low + tools istekleri Hy3 tarafından adaptif olarak high reasoning ile yürütülür.

tool_choice ile modelin araç kullanımını yönlendirebilirsiniz:

DeğerAnlamı
"auto" (varsayılan)Model araç çağırıp çağırmamaya kendisi karar verir
"none"Araç çağrısı yapılmaz, düz metin üretilir
"required"Model en az bir araç çağırmaya zorlanır
{"type": "function", "function": {"name": "get_weather"}}Belirli bir aracın çağrılması zorlanır

Bazı modeller yalnızca auto ve none kabul eder (örn. Moonshot Kimi K2 ailesi; kimi-k3 ek olarak required destekler). Sağlayıcıya özgü kısıtlar için Chat Completions sayfasına bakın.

stream: true ile araç çağrıları delta.tool_calls içinde akar. İlk chunk araç çağrısını (id, ad, argümanlar) taşır; kapanış chunk’ı finish_reason: "tool_calls" ile gelir, ardından data: [DONE].

data: {"choices":[{"index":0,"delta":{"role":"assistant","tool_calls":[{"index":0,"id":"call_abc123","type":"function","function":{"name":"get_weather","arguments":"{\"location\":\"Istanbul\"}"}}]},"finish_reason":null}]}
data: {"choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
data: [DONE]

Akış formatının genel detayları için Streaming sayfasına bakın.

Resmi OpenAI SDK’ları base_url / baseURL LLMTR’ye yönlendirildiğinde tool calling ile değişiklik gerektirmeden çalışır.

from openai import OpenAI
client = OpenAI(api_key="llmtr-your_key", base_url="https://llmtr.com/v1")
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Bir sehir icin guncel hava durumunu dondurur",
"parameters": {
"type": "object",
"properties": {"location": {"type": "string"}},
"required": ["location"],
},
},
}]
resp = client.chat.completions.create(
model="openai/gpt-4o-mini",
messages=[{"role": "user", "content": "Istanbul'da hava nasil?"}],
tools=tools,
)
print(resp.choices[0].message.tool_calls)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "llmtr-your_key",
baseURL: "https://llmtr.com/v1",
});
const resp = await client.chat.completions.create({
model: "openai/gpt-4o-mini",
messages: [{ role: "user", content: "Istanbul'da hava nasil?" }],
tools: [
{
type: "function",
function: {
name: "get_weather",
parameters: {
type: "object",
properties: { location: { type: "string" } },
required: ["location"],
},
},
},
],
});
console.log(resp.choices[0].message.tool_calls);

Tool calling, global sağlayıcıların sohbet modellerinde desteklenir: OpenAI (GPT / o-serisi), Anthropic Claude, Google Gemini, xAI Grok, Tencent Hy3, zai GLM, Qwen, DeepSeek, Moonshot Kimi, MiniMax, Xiaomi MiMo, StepFun, AionLabs ve Mistral. Bir modelin desteği, katalogdaki / model detay sayfasındaki function_calling yeteneği ile işaretlenir.

Türkiye-barındırmalı modeller arasında llmtr/qwen3-5-4b tool calling destekler; verilerinizin Türkiye’de işlenmesi gereken ajan akışlarında bu modeli kullanabilirsiniz.

Desteklemeyen modeller:

  • Diğer Türkiye-barındırmalı first-party modeller (llmtr/gemma-4, llmtr/qwen3-6-35b, llmtr/trendyol-7b, llmtr/magibu-11b-v8) şu an function calling parse etmez; bu modellere tools gönderdiğinizde araç çağrısı yapılandırılmış biçimde dönmez.
  • poolside/laguna-xs.2 için tools / tool_choice gönderildiğinde istek 400 unsupported_operation döner.

Üretim trafiğine geçmeden önce hedef modelin tool calling desteğini doğrulayın.