İçeriğe geç

Yapay zeka

JSON prompt ile yapay zeka token tasarrufu: adım adım rehber

8 dakikalık okumaletreel ekibi

Yapay zeka API'sini kendi anahtarınla kullanıyorsan faturayı istek sayısı değil, token sayısı belirler. Aynı işi yaptıran iki talimattan biri ötekinden belirgin şekilde fazla token harcayabilir ve fark çoğu zaman modelde değil, talimatın yazılış biçimindedir. JSON prompt yaklaşımı, yani talimatı düz metin yerine sade ve sıkıştırılmış JSON olarak göndermek, bu farkı kapatmanın en pratik yollarından biri.

Bu rehberde token kavramını, aynı talimatın düz metin ve JSON hâllerini, tokenları boşa harcatan alışkanlıkları ve tasarrufu nasıl ölçeceğini örneklerle ele alıyoruz. Kod yazmasan bile yapay zekaya düzenli talimat veriyorsan buradaki ilkelerin çoğunu hemen uygulayabilirsin.

Token nedir ve neden maliyeti belirler?

Token, dil modellerinin metni işlerken kullandığı küçük parçadır. Bir token bazen tam bir kelime, bazen bir kelimenin bir bölümü, bazen de tek bir noktalama işaretidir. Model metni önce bu parçalara böler; hem okuduğu hem de yazdığı her parça için iş yapar.

Anthropic, OpenAI ve Google gibi sağlayıcılar bu yüzden ücreti token üzerinden hesaplar ve genellikle iki ayrı fiyat verir: modele gönderdiğin girdi tokenları ve modelin ürettiği çıktı tokenları. Çoğu modelde çıktı tokenı girdiden daha pahalıdır. Yani hem talimatın uzunluğu hem de cevabın uzunluğu faturaya yansır.

Türkçe gibi eklemeli dillerde bir kelime çoğu zaman birden fazla tokena bölünür; aynı anlamı taşıyan Türkçe metin, İngilizcesinden genellikle daha fazla token tutar. Türkçe talimat yazıyorsan gereksiz kelimeleri ayıklamak bu yüzden daha da önemli.

Bir de dikkat meselesi var: uzun ve dağınık bir talimatta önemli bir ayrıntının gözden kaçma ihtimali artar. Kısa ve düzenli talimat hem daha ucuz hem de çoğu zaman daha isabetlidir.

Düz metin talimat ile JSON prompt karşılaştırması

Bir kafe için kısa video senaryosu isteyen talimatı iki şekilde yazdığını düşün. İçerik birebir aynı, yalnızca biçim farklı.

Düz metin hâli: "Merhaba, senden bir kısa video senaryosu yazmanı istiyorum. Markamız Kahve Durağı adında, üçüncü dalga kahve satan bir dükkân. Hedef kitlemiz 25-40 yaş arası, şehirde çalışan ve öğle arasında kahve alan kişiler. Lütfen samimi ve enerjik bir ses tonu kullan. Video 30 saniye civarında olsun ve 5 sahneden oluşsun. Her sahne için seslendirme metni, ekran yazısı ve saniye cinsinden süre yaz. Sonucu lütfen JSON formatında, scenes adında bir dizi içinde ver."

JSON hâli: {"gorev":"kısa video senaryosu","marka":"Kahve Durağı","urun":"üçüncü dalga kahve dükkânı","kitle":"25-40 yaş, şehirde çalışan, öğle arası kahve alan","ton":"samimi, enerjik","sure":30,"sahne":5}

İkinci hâlde nezaket kalıpları, bağlaç cümleleri ve çıktının nasıl görüneceğine dair tarif yok. Model yine de ne yapacağını bilir: her sahnede hangi alanların olacağını ve yanıtın biçimini ayrıca gönderilen bir JSON şeması belirler (aşağıda anlatıyoruz). Bu tür bir dönüşüm talimatın token sayısını çoğu zaman belirgin şekilde azaltır.

JSON'un ikinci avantajı düzen. Her bilginin bir anahtarı olduğu için talimatı güncellemek, bir alanı çıkarmak ya da başka bir markaya uyarlamak kolaylaşır. Model de yapılandırılmış girdiyi genellikle tutarlı yorumlar; hedef kitle bilgisi paragrafın ortasında kaybolmaz.

Bir uyarı: JSON tek başına sihirli değildir. Tırnaklar, süslü parantezler ve iki noktalar da token tutar. Girintili, satır satır yazılmış bir JSON'daki boşluklar ve satır sonları da öyle. Kısa talimatlarda fark küçük kalabilir. Asıl kazanç JSON'u boşlukları atılmış tek satır hâlinde göndermekten ve aşağıdaki alışkanlıklardan gelir.

Prompt optimizasyonunun ilk adımı: boş alanları gönderme

Marka profili, kampanya notu, kaçınılacaklar listesi gibi alanları bir şablonla gönderiyorsan bazıları çoğu zaman boştur. {"kampanya":"","notlar":[]} gibi alanlar modele hiçbir bilgi taşımaz ama anahtar adı, tırnaklar ve parantezler yine token tutar.

Boş alan bazen modeli yanıltır da. "kampanya" alanını boş gören model, ondan bir şey beklendiğini düşünüp kampanya uydurmaya kalkabilir. Kural basit: bilgi yoksa alan da olmasın.

Bunu her seferinde elle yapmak yerine küçük bir yardımcı fonksiyonla otomatikleştirmek en güvenlisi. Fonksiyonu iç içe nesnelerde de çalışacak şekilde yazarsan, içi tamamen boşalan üst nesneler de kendiliğinden düşer. Göndermeden önce şunları ayıkla:

  • Boş metinler ve yalnızca boşluktan oluşan metinler
  • Boş diziler ve boş nesneler
  • Değeri null ya da tanımsız olan alanlar
  • Varsayılanla aynı olduğu için sonuca hiçbir etkisi olmayan alanlar

Kısa anahtarlar ve uzun kimlikler yerine kısa takma adlar

Anahtar adları her istekte yeniden gider. "hedef_kitle_aciklamasi" yerine "kitle", "icerik_sutunlari" yerine "sutunlar" yazmak her istekte birkaç token kazandırır. Anahtarın anlamı model için açık kaldığı sürece kısaltmak güvenlidir. "x" ya da "a2" gibi anlamsız kodlar ise modelin alanı yanlış yorumlamasına yol açabilir; dengeyi anlamlı ama kısa kelimelerde bul.

Daha büyük kazanç kimliklerde. Veritabanlarının ürettiği otomatik kimlikler çoğu zaman 20 karakter ya da daha uzun rastgele dizilerdir. Model için anlamsız harf yığınları oldukları için çok sayıda tokena bölünürler. Modelden "şu şablonlardan birini seç" diye istiyorsan, her şablonu uzun kimliğiyle değil kısa bir takma adla gönder: v1, v2, p1 gibi.

Örnek: {"sablonlar":[{"k":"v1","ad":"Kanca → Değer → Çağrı"},{"k":"v2","ad":"Liste: 3 şey"}]} listesini alan model yanıtında yalnızca "v2" yazar. Sen de kendi tarafında tuttuğun eşleme tablosundan v2'nin hangi kayda karşılık geldiğini bulursun.

Kısa takma adın ikinci faydası güvenilirlik: model uzun rastgele bir kimliği yanıtta geri yazarken harf karıştırabilir, "v2"yi karıştırması çok daha zordur. Kimlik yanıtta tekrarlandığı için kısaltma, daha pahalı olan çıktı tokenlarından da tasarruf ettirir.

Çıktı biçimini talimatta tarif etme, şemayla zorla

Düz metin talimatların en uzun bölümü çoğu zaman çıktının tarifidir: "Yanıtı JSON olarak ver, scenes adında bir dizi olsun, her öğede şu alanlar bulunsun, süre saniye cinsinden sayı olsun..." Bu paragraf her istekte gider ve model yine de ara sıra biçimi bozar.

Claude, GPT modelleri ve Gemini'nin API'leri, yanıtı bir JSON şemasına uyacak şekilde kısıtlamanın yollarını sunar. Şemayı isteğe ayrı bir parametre olarak eklersin; model yanıtını bu yapıya uygun üretir. Böylece çıktının tarifini talimattan tamamen çıkarabilirsin. Şemadaki alan adları ve kısa açıklamalar modele ne üreteceğini zaten söyler.

Kazanç iki yönlü: talimat kısalır, yanıt da her seferinde ayrıştırılabilir gelir. Bozuk yanıt yüzünden isteği tekrarlamak, yani aynı tokenları ikinci kez ödemek gerekmez.

Şemanın kendisinin de girdiye eklendiğini ve token tuttuğunu unutma. Şemayı da sade tut ve yalnızca gerçekten kullanacağın alanları iste. Ekranda hiç göstermeyeceğin bir "gerekce" ya da "alternatifler" alanı, her yanıtta boşuna yazılıp ödenen paragraflar demektir.

Tekrarı ayıkla: sabit bilgi bir kez gitsin

Aynı bilgiyi talimatın birkaç yerinde söylemek düz metin yazarken çok yapılan bir hatadır. Ses tonu hem girişte hem sonda geçer, "Türkçe yaz" hem sistem talimatında hem kullanıcı mesajında yer alır. Model ilk seferde anlar; tekrarlar yalnızca token harcatır.

Bilgiyi doğru yere koy. Değişmeyen kurallar (rol, genel üslup, yasaklar) sistem talimatına, isteğe özel bilgiler (bu videonun konusu, süresi) kullanıcı mesajına gider. Marka profili gibi her istekte aynı kalan bilgileri tek bir nesnede topla. Bazı sağlayıcılar, her istekte değişmeden giden başlangıç bölümünü önbelleğe alıp daha düşük ücretle faturalandırma seçeneği de sunar; sabit bilgiyi başa, değişen bilgiyi sona koymak için bir sebep daha.

Uzun sohbet geçmişi de gizli bir tekrardır. API'de her yeni mesajla önceki konuşma yeniden gönderilir ve yeniden ödenir. Senaryo ya da gönderi metni gibi tek seferlik üretimlerde geçmiş taşımak yerine her isteği bağımsız ve eksiksiz kurmak çoğu zaman daha ucuzdur. Göndermeden önce kendine şunları sor:

  • Aynı kural iki kez geçiyor mu?
  • Modelin zaten bildiği genel bilgileri mi anlatıyorsun?
  • Talimata koyduğun örnek çıktıyı şema zaten karşılıyor mu?
  • Nezaket kalıpları ve dolgu cümleleri ayıklandı mı?

Yapay zeka token tasarrufunu nasıl ölçersin?

Tahmin yerine ölç. Her sağlayıcı, yanıtla birlikte o istekte kullanılan token sayısını girdi ve çıktı olarak ayrı ayrı bildirir. Fatura bu sayılara dayanır. Karakter sayısından yapılan tahminler, örneğin Türkçe metinde bir tokenın ortalama birkaç karaktere denk geldiğini varsaymak, yalnızca kaba bir fikir verir; oran modele ve metne göre değişir.

Basit bir ölçüm döngüsü şöyle kurulur:

  • Mevcut talimatınla aynı görevi birkaç kez çalıştır, bildirilen girdi ve çıktı token sayılarını not et.
  • Tek bir değişiklik yap: örneğin boş alanları at ya da çıktı tarifini şemaya taşı.
  • Aynı görevi aynı modelle yeniden çalıştır ve sayıları karşılaştır.
  • Sonucun kalitesine de bak. Token düştü ama içerik zayıfladıysa o kısaltma fazla gitmiştir.
  • İşe yarayan değişikliği kalıcı yap ve bir sonrakine geç.

letreel'de JSON talimatlar nasıl çalışır?

letreel'de yapay zekaya giden talimatlar bu rehberdeki ilkelerle kurulur. Talimatlar JSON olarak düzenlenir ve boşlukları atılmış tek satır hâlinde gönderilir. Boş alanlar hiç gönderilmez, şablonlar uzun kimlikler yerine v1, p1 gibi kısa anahtarlarla gider, çıktı biçimi de JSON şemasıyla zorlandığı için talimatta tarif edilmez.

Alanının yapay zeka talimatlarını düzenlediğin editör geçersiz JSON'u kaydetmez; tahmini token sayısını ve modele gidecek örnek isteğin tamamını gösterir. Örnek bir video senaryosu isteği yaklaşık 470 girdi tokenı tutar. Kendi API anahtarını kullandığın için bu tasarruf doğrudan senin faturana yansır, aylık token kullanımını da sağlayıcı bazında görürsün. Desteklenen sağlayıcılar ve görev bazında model seçimi için yapay zeka modelleri sayfasına, senaryonun kendisi için yapay zeka ile video senaryosu yazma rehberine bakabilirsin.

Sık sorulan sorular

JSON prompt her zaman daha az token mı harcar?

Hayır. JSON'un tırnakları ve parantezleri de token tutar; girintili yazılmış bir JSON düz metinden bile uzun olabilir. Tasarruf, JSON'u tek satır göndermekten, boş alanları atmaktan, çıktı tarifini şemaya taşımaktan ve tekrarı ayıklamaktan gelir.

Talimatı İngilizce yazmak token tasarrufu sağlar mı?

Çoğu modelde aynı anlamı taşıyan İngilizce metin daha az token tutar. Ama Türkçe içerik istiyorsan çıktı dilini açıkça belirtmen gerekir ve çıktının kendisi yine Türkçe tokenlarla ödenir. Anahtarları kısa tutup içerik dilini tek bir alanda belirtmek çoğu zaman makul bir orta yoldur.

Kısa anahtarlar modelin anlamasını zorlaştırır mı?

"kitle", "ton", "sure" gibi anlamlı kısaltmalar zorlaştırmaz. Sorun, modelin anlamını çıkaramayacağı harf kodlarıdır. v1, p1 gibi takma adlar ise yalnızca seçilecek öğeleri işaretler; anlamı yanlarındaki ad ya da açıklama taşır.

Bu yazıdakileri letreel'de uygula.

Takvimini yapay zekayla planla, senaryoları yazdır, videoları tarayıcıda hazırla.

Ücretsiz başla