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.
- İstekte
tools(ve isteğe bağlıtool_choice) gönderirsiniz. - Model bir araç çağırmaya karar verirse, yanıt
finish_reason: "tool_calls"vemessage.tool_callsile döner;message.contentnullolur. - Aracı kendi tarafınızda çalıştırırsınız.
- Sonucu
role: "tool"mesajı olarak (aynıtool_call_idile) geçmişe ekleyip isteği tekrar gönderirsiniz. Model nihai cevabı üretir.
1. Araç tanımı ve ilk istek
Section titled “1. Araç tanımı ve ilk istek”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" }'Yanıt: tool_calls
Section titled “Yanıt: tool_calls”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.
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.
Hy3 reasoning_content geri çağırma
Section titled “Hy3 reasoning_content geri çağırma”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
Section titled “tool_choice”tool_choice ile modelin araç kullanımını yönlendirebilirsiniz:
| Değer | Anlamı |
|---|---|
"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.
Streaming
Section titled “Streaming”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.
SDK örnekleri
Section titled “SDK örnekleri”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);Hangi modeller destekler
Section titled “Hangi modeller destekler”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 modelleretoolsgönderdiğinizde araç çağrısı yapılandırılmış biçimde dönmez. poolside/laguna-xs.2içintools/tool_choicegönderildiğinde istek 400unsupported_operationdöner.
Üretim trafiğine geçmeden önce hedef modelin tool calling desteğini doğrulayın.
İlgili sayfalar
Section titled “İlgili sayfalar”- Chat Completions - endpoint referansı ve sağlayıcıya özgü davranışlar
- Streaming - SSE akış formatı
- Hatalar - hata kodları