Agent iş akışları · 2026-10-10
Mistral Large 4 ile araç çağıran ajan: tool_choice ve düşünme izi
mistral/mistral-large-4 ile araç çağıran ajan döngüsü: tool_choice seçenekleri, required yerine adlı fonksiyon ve reasoning_content'in geri gönderilmesi.
Kısa yanıt: araç çağırır, ama tool_choice required yoktur
LLMTR (llmtr.com), Türkiye'de ve global sağlayıcılarda barındırılan dil modellerine tek, OpenAI uyumlu API'den erişim veren bir gateway'dir. Mistral Large 4'ü araç çağıran bir ajanda mistral/mistral-large-4 kimliğiyle, https://llmtr.com/v1 adresindeki /v1/chat/completions uç noktası üzerinden kullanırsınız. Araçlar OpenAI biçimindeki tools dizisiyle tanımlanır, model çağrıyı tool_calls alanında döndürür, siz de sonucu role: "tool" mesajıyla geri verirsiniz.
Mistral, Large 4'ü kodlama ve ajan iş akışları için konumlar. Ajan kurarken üç şeyi bilmek gerekir: tool_choice için auto, none ve adı verilen fonksiyon çalışır, required çalışmaz; model tek yanıtta birden fazla araç çağırabilir; önceki asistan mesajları reasoning_content alanıyla birlikte geri gönderilmelidir.
Mistral Large 4 ile araç çağıran bir ajan nasıl kurulur?
Aşağıdaki Python döngüsü OpenAI SDK'sıyla bir sipariş sorgulama aracı tanımlar. Her turda asistan mesajı model_dump(exclude_none=True) ile olduğu gibi geçmişe eklenir; böylece reasoning_content alanı da korunur. Model araç çağırmadıysa döngü cevabı yazdırıp biter. Çağırdıysa her tool_calls öğesi için aracı çalıştırır ve sonucu tool_call_id ile birlikte role: "tool" mesajı olarak ekler.
Döngüye bir tur sınırı koyun (örnekte 5) ve max_tokens değerini birkaç bin token tutun. Düşünme varsayılan olarak açıktır; düşünme token'ları max_tokens bütçesinden harcanır ve çıktı fiyatından faturalanır. finish_reason değeri length olan yanıt tamamlanmamıştır; bütçeyi artırıp o turu tekrarlayın.
OpenAI Python SDK ile lookup_order aracını kullanan, asistan mesajlarını reasoning_content ile birlikte geçmişte tutan ajan döngüsü.
import json
from openai import OpenAI
client = OpenAI(base_url="https://llmtr.com/v1", api_key="llmtr-your_key")
def lookup_order(order_id: str) -> dict:
return {"order_id": order_id, "status": "shipped"}
tools = [{
"type": "function",
"function": {
"name": "lookup_order",
"description": "Fetches an order by its order number",
"parameters": {
"type": "object",
"properties": {"order_id": {"type": "string"}},
"required": ["order_id"],
},
},
}]
messages = [{"role": "user", "content": "Where are orders 4417 and 4418?"}]
for _ in range(5):
response = client.chat.completions.create(
model="mistral/mistral-large-4",
messages=messages,
tools=tools,
tool_choice="auto",
max_tokens=4096,
)
message = response.choices[0].message
# Keep reasoning_content: the model reads its earlier reasoning from it.
messages.append(message.model_dump(exclude_none=True))
if not message.tool_calls:
print(message.content)
break
for call in message.tool_calls:
args = json.loads(call.function.arguments)
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": json.dumps(lookup_order(**args)),
})
tool_choice: auto, none, adlı fonksiyon ve required
auto, aracı çağırıp çağırmayacağına modelin karar vermesidir ve birden fazla aracınız varsa çoğu turda doğru seçimdir; istemde hangi aracın ne zaman kullanılacağını açıkça yazın. none araç çağrısını kapatır. Bir aracı zorunlu kılmak için fonksiyonu adıyla verin. Aşağıdaki curl isteği lookup_order fonksiyonunu adıyla zorunlu kılar ve düşünmeyi kapatır.
tool_choice: "required" bu modelde yoktur: istek 400 invalid_request ile reddedilir ve error.details.reason alanı tool_choice_required_unsupported değerini taşır. required kullanan bir ajanı Large 4'e taşırken tek araç varsa fonksiyon adını, birden çok araç varsa auto ile istemdeki talimatı kullanın.
| tool_choice | Sonuç |
|---|---|
| auto | Model aracı çağırıp çağırmayacağına kendisi karar verir |
| none | Araç çağrılmaz, model metinle cevap verir |
| {"type": "function", "function": {"name": "lookup_order"}} | Adı verilen fonksiyon çağrılır |
| required | 400 invalid_request, error.details.reason: tool_choice_required_unsupported |
lookup_order fonksiyonunu adıyla zorunlu kılan ve reasoning_effort none gönderen curl isteği.
curl https://llmtr.com/v1/chat/completions \
-H "Authorization: Bearer $LLMTR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "mistral/mistral-large-4",
"reasoning_effort": "none",
"max_tokens": 512,
"messages": [{"role": "user", "content": "Fetch order 4417."}],
"tools": [{
"type": "function",
"function": {
"name": "lookup_order",
"description": "Fetches an order by its order number",
"parameters": {
"type": "object",
"properties": {"order_id": {"type": "string"}},
"required": ["order_id"]
}
}
}],
"tool_choice": {"type": "function", "function": {"name": "lookup_order"}}
}'
Paralel araç çağrıları ve araç sonuçları
Model tek yanıtta birden fazla araç çağrısı döndürebilir; örnekteki iki siparişli soru iki lookup_order çağrısı üretebilir. tool_calls dizisinin tamamını işleyin ve her sonucu kendi tool_call_id değeriyle ayrı bir role: "tool" mesajı olarak ekleyin; sonucu eksik çağrı bırakmayın. Çağrıların tek tek gelmesini istiyorsanız parallel_tool_calls: false gönderin.
Araç sonuçlarını kısa ve yapılandırılmış tutun: geçmişe eklenen her sonuç sonraki turlarda girdi token'ı olarak sayılır. Ajanın son cevabı bir şemaya uymalıysa response_format ile json_schema ve strict: true gönderebilirsiniz.
Düşünme izini geri göndermek ve turların maliyeti
Çok turlu konuşmada önceki asistan mesajlarını aldığınız gibi, reasoning_content dahil geri gönderin. Model önceki turda ne düşündüğünü bu alandan okur; araç döngülerinde turlar arası tutarlılık buna bağlıdır. Geri gönderilen düşünme girdi token'ı olarak faturalanır. Alanı silerseniz daha az token harcarsınız, ama model önceki turda neye karar verdiğini bilmez.
Örnek: 1.500 token'lık bir düşünme izi bir sonraki turda önbellekten okunmadan girdi olarak gönderilirse 20 Ekim 2026 00:00 UTC'ye kadar 1.500 x 0,68 $ / 1 milyon = 0,00102 $, o andan itibaren 1,36 $ fiyatıyla 0,00204 $ tutar. Maliyeti düşürmenin yolu izi silmek değil, düşünmeyi gereken turda açmaktır: hangi aracın çağrılacağı belli olan basit yönlendirme turlarında reasoning_effort: "none" ya da mistral/mistral-large-4:none, plan çıkarma ve sonuçları birleştirme turlarında high kullanın. Seviye her istekte ayrı seçilir.
Sınırlar ve LLMTR'de başlamak
Yanıt başına çıktı en fazla 262.144 token'dır; daha büyük bir max_tokens 400 döndürür. Bağlam penceresi 524.288 token'dır ve uzun araç geçmişleri bu pencereye sığmalıdır. temperature 0 ile 1,5 arasında olmalıdır; seed ve user alanları 422 alır. Akışta düşünme delta.reasoning_content, cevap delta.content ile gelir.
Başlamak için llmtr.com'da hesap açın, ön ödemeli kredi yükleyin ve Dashboard > API Anahtarları altında bir anahtar oluşturun; yukarıdaki döngüde base_url olarak https://llmtr.com/v1 kullanın. Her istek işlendiği andaki katalog fiyatıyla krediden düşülür; ajanın tur tur maliyetini kullanım sayfasında anahtar ve model bazında görürsünüz.
Mistral Large 4 ile araç çağıran ajan kurma
Bir araç tanımlayın, mistral/mistral-large-4 ile döngüyü kurun ve asistan mesajlarını reasoning_content ile birlikte geçmişe ekleyin.
- Araç tanımı. tools dizisinde fonksiyonu adı, açıklaması ve JSON Schema parametreleriyle tanımlayın.
- tool_choice. Birden fazla araçta auto kullanın, tek zorunlu araçta fonksiyonu adıyla verin; required göndermeyin.
- Döngü. Asistan mesajını reasoning_content ile geçmişe ekleyin, her tool_calls öğesinin sonucunu role tool mesajıyla ekleyin ve bir tur sınırı koyun.
Sık sorulan sorular
Mistral Large 4 tool_choice required destekliyor mu?
Hayır. tool_choice: "required" gönderilen istek 400 invalid_request döndürür ve error.details.reason alanında tool_choice_required_unsupported yazar. Bir aracı zorunlu kılmak için fonksiyonu adıyla verin.
Mistral Large 4'te reasoning_content geri gönderilmeli mi?
Evet. Çok turlu konuşmalarda ve araç döngülerinde önceki asistan mesajlarını reasoning_content dahil geri gönderin; model önceki düşünmesini oradan okur. Geri gönderilen iz girdi token'ı olarak faturalanır.
Mistral Large 4 aynı anda birden fazla araç çağırabilir mi?
Evet, tek yanıtta birden fazla tool_calls öğesi dönebilir. Hepsini işleyip sonuçlarını ayrı role: "tool" mesajlarıyla ekleyin ya da çağrıların tek tek gelmesi için parallel_tool_calls: false gönderin.