Model karşılaştırmaları · 2026-09-25
Ember-1 ile tool calling ve JSON Schema
Ember-1'de araç çağrısının tool_choice seçenekleri, strict JSON Schema ile yapılandırılmış çıktı, modelin önerdiği çağrı ile uygulamanın yaptığı işlem arasındaki sınır ve moonshot/kimi-k3'e geçişte değişecek olanlar.
Kısa cevap
Ember-1 araç çağrısını destekler: tool_choice auto, required ve belirli bir aracı adıyla zorlayan biçimde çalışır. Yapılandırılmış çıktıda hem json_object hem strict json_schema desteklenir. Her ikisi de düşünme açıkken ve kapalıyken çalışır.
Bu satır 6 Ekim 2026'ya kadar sunulur. Halefi moonshot/kimi-k3 araç çağrısını ve json_object'i destekler, ama strict json_schema listelemez; şemaya dayanan bir akışta doğrulama bu geçişte uygulamanın tarafına geçer.
tool_choice seçenekleri
tool_choice, modelin bir araç çağırıp çağırmayacağını ve hangisini çağıracağını belirler. Üç biçimin her biri farklı bir akışa uyar.
| Değer | Davranış | Uygun olduğu akış |
|---|---|---|
| auto | Model gerektiğinde araç çağırır, gerekmiyorsa metinle yanıt verir | Genel amaçlı asistan |
| required | Model mutlaka bir araç çağırır | Her turda bir işlem gereken ajan döngüsü |
| Adıyla belirtilen araç | Model yalnızca o aracı çağırır | Tek adımlı bilgi çıkarma |
Araç çağrısı bir öneridir
Model bir aracı çağırdığında aslında hiçbir şey yapmaz; hangi fonksiyonun hangi argümanlarla çağrılmasını istediğini söyler. Çağrıyı yapmak, argümanları doğrulamak ve sonucu role: tool mesajıyla modele geri vermek uygulamanın işidir. Yanıttaki finish_reason alanının tool_calls olması bu durumu gösterir. Araç sonucu, çağrının tool_call_id değeriyle eşleştirilerek geri gönderilir; model aynı yanıtta birden fazla çağrı önerdiyse her birinin sonucu kendi kimliğiyle ayrı bir mesaj olarak eklenir.
Bu ayrım güvenliğin de temelidir. Hangi kullanıcının hangi aracı çağırabileceği istemden değil, sunucudaki bir izin listesinden gelir. Ödeme, silme ya da dışarıya mesaj gönderme gibi geri alınması zor işlemlerde modelin önerisi bir onay adımından geçer ve aynı işlemin iki kez yapılmasını önleyen bir anahtar taşır. required seçeneği bir çağrı üretilmesini garanti eder, çağrının doğru ya da yetkili olmasını değil.
Araç tanımlarını yazmak
Modelin bir aracı doğru zamanda ve doğru argümanlarla çağırması büyük ölçüde tanımına bağlıdır. Aracın adı ve açıklaması modelin gördüğü metindir; ne yaptığını ve ne zaman kullanılacağını açıkça söyleyen bir açıklama, benzer iki araç arasındaki karışıklığı azaltır. Parametreler bir JSON şemasıyla tanımlanır; sınırlı değer alabilen bir parametre için enum kullanmak, modelin geçersiz bir değer üretmesini zorlaştırır.
Araç tanımları her istekte girdi tokenı olarak gönderilir. İstemin başında yer aldıkları ve istekten isteğe değişmedikleri sürece, otomatik cache sayesinde indirimli fiyattan okunabilirler. Bir akışa yalnızca gerçekten gereken araçları vermek hem maliyeti hem yanlış araç seçimi ihtimalini azaltır.
Strict JSON Schema ile yapılandırılmış çıktı
json_object modu yanıtın geçerli bir JSON nesnesi olmasını sağlar, ama alanlarını belirlemez. Strict json_schema ise yanıtın verilen şemaya uymasını sağlar: zorunlu alanlar bulunur, tipler tutar, fazladan alan gelmez. Ayrıştırma hatası bu sayede ortadan kalkar.
Şema biçimi garanti eder, değerlerin doğruluğunu değil. Bir iade tutarı sayı olarak gelir, ama siparişin tutarından büyük olabilir; bir sipariş numarası metin olarak gelir, ama var olmayan bir siparişi gösterebilir. Aşağıdaki örnek şemalı çıktıyı alıyor ve değerleri uygulamanın kendi verisiyle karşılaştırıyor.
Strict JSON Schema ile çıkarma ve değer kontrolü
import json, os
from openai import OpenAI
client = OpenAI(base_url=os.environ["LLMTR_BASE_URL"] + "/v1", api_key=os.environ["LLMTR_API_KEY"])
schema = {
"type": "object",
"properties": {
"siparis_no": {"type": "string"},
"iade_tutari": {"type": "number"},
"gerekce": {"type": "string"},
},
"required": ["siparis_no", "iade_tutari", "gerekce"],
"additionalProperties": False,
}
res = client.chat.completions.create(
model="fireworks/ember-1",
messages=[{"role": "user", "content": "Bu destek mesajindan iade talebini cikar:\n" + ticket}],
response_format={"type": "json_schema",
"json_schema": {"name": "iade_talebi", "strict": True, "schema": schema}},
)
data = json.loads(res.choices[0].message.content)
# Sema bicimi garanti eder; degerlerin dogrulugunu uygulama kontrol eder.
order = orders.get(data["siparis_no"])
if order is None or not (0 < data["iade_tutari"] <= order.total):
send_to_review(data)
else:
propose_refund(order, data["iade_tutari"]) # onay ve yetki kontrolu burada
Kimi K3'e geçişte
moonshot/kimi-k3 araç çağrısını destekler, bu yüzden araç tanımları ve döngü olduğu gibi taşınır. Yapılandırılmış çıktıda ise yalnızca json_object vardır. Şemaya uymayı model yerine uygulama denetler: gelen nesne aynı şemayla doğrulanır, uymayan yanıt yeniden istenir ya da incelemeye gider.
Bu doğrulamayı Ember-1 kullanılırken yazmanın bir faydası daha var: geçiş günü yalnızca model kimliği ve response_format değişir, şemaya dayanan kod aynı kalır. Şemanın istemde de kısaca tarif edilmesi, json_object modunda modelin doğru alanları üretme olasılığını artırır.
Beklenmeyen durumlar
auto seçeneğinde model bir araç çağırmak yerine metinle yanıt verebilir; akış bu durumu hata saymadan ele almalıdır. Araç sonuçları modele geri verildikçe konuşma uzar ve her tur, önceki turların tokenlarını yeniden taşır. Bir ajan döngüsüne tur sınırı koymak, modelin aynı aracı tekrar tekrar çağırdığı bir durumun maliyeti büyütmesini önler.
Düşünme açıkken her tur ayrıca düşünme tokenı üretir ve bunlar çıktı olarak ücretlendirilir. Aracın hangisinin çağrılacağı açık olan tek adımlı işlerde düşünmeyi kapatmak, gereksiz tokenları azaltır.
Sık sorulan sorular
required tool_choice güvenli mi?
Tek başına değil. Bir araç çağrısı üretilmesini garanti eder; çağrının doğru ve yetkili olup olmadığını uygulama kendi izin listesi ve kurallarıyla denetler.
Strict JSON Schema değerlerin doğru olduğunu garanti eder mi?
Hayır. Biçimi garanti eder: zorunlu alanlar ve tipler. Tutarların, numaraların ve tarihlerin doğruluğu uygulamanın kendi verisiyle kontrol edilir.
Kimi K3'te JSON Schema kullanabilir miyim?
moonshot/kimi-k3 strict json_schema listelemez; json_object kullanılır ve yanıt aynı şemayla uygulama tarafında doğrulanır.
Araç çağrısı düşünme kapalıyken çalışır mı?
Evet. auto, required ve adlandırılmış tool_choice düşünme açıkken de kapalıyken de çalışır. Tek adımlı işlerde düşünmeyi kapatmak çıktı tokenlarını azaltır.
Araç tanımları maliyete eklenir mi?
Evet, her istekte girdi tokenı olarak sayılır. İstemin başında değişmeden kalan tanımlar cache'ten, 1 milyon token başına 0,30 dolardan okunabilir.