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.

Ember-1'in bir araç çağrısı önerdiği, uygulamanın argümanları doğrulayıp işlemi kendi yetki kurallarıyla yaptığı ve sonucu modele geri verdiği döngüyü gösteren akış.

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.

Ember-1'de tool_choice
DeğerDavranışUygun olduğu akış
autoModel gerektiğinde araç çağırır, gerekmiyorsa metinle yanıt verirGenel amaçlı asistan
requiredModel mutlaka bir araç çağırırHer turda bir işlem gereken ajan döngüsü
Adıyla belirtilen araçModel yalnızca o aracı çağırırTek 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.

İlgili yazılar