Bloga dön

Yeni başlayanlar için AIKılavuz

Modelin karıştırmaması için bir istemdeki her belgeyi etiketleyin

Her yapıştırılan metne bir ad ve bir rol verme, öncesi/sonrası istem ve Python ile curl'de çalışan bir sohbet tamamlama isteği.

Yazan: CheapTokens TeamYayınlanma tarihi: 5 dk okuma

Kapak: her biri kaynak adıyla kendi etiketine sarılmış iki belge içeren bir istem
Bu sayfada
  1. Sadece yapıştırdığınızda ne ters gider
  2. Her metne bir ad ve bir görev verin
  3. Gerçek bir istek olarak gönderin
  4. Etiketlerin maliyeti nedir
  5. Daha büyük metin yığınları için alışkanlıklar

İki metni tek bir mesaja yapıştırdınız ve modelden bunları karşılaştırmasını istediniz. Hangisinin hangisi olduğunu söylemediyseniz, tahmin etmek zorunda kalır. Çözüm küçük: her metne bir ad ve bir görev verin, her birini kendi etiketine sarın. Anthropic'in istem kılavuzu (canlı bir sayfa, 31 Ekim 2026'da kontrol edildi), modelin neyin talimat, neyin arka plan ve neyin girdi olduğunu yanlış okumaması için her içerik türünü etiketlemenizi önerir. Aşağıda bir önce/sonra istemi ve CheapTokens API adresine gönderebileceğiniz çalışan bir sohbet tamamlama isteği bulunmaktadır.

Sadece yapıştırdığınızda ne ters gider#

En basit durumu ele alalım. Bir tedarikçi yeni bir ürün açıklaması gönderiyor ve siz mağaza sayfanızdakine göre neyin değiştiğini bilmek istiyorsunuz. İkisini de "Ne değişti?" başlığının altına yapıştırıp gönder tuşuna basıyorsunuz. Sizin için sıra açıktır. Model için ise aralarında hiçbir şey olmayan iki metin bloğudur ve soru hangisinin eski olduğunu asla söylemez. Doğru tahmin edebilir. Aynı zamanda yeni metni eski metin sanıp size son derece kendinden emin bir sesle tersten işleyen bir değişiklik listesi verebilir.

Aynı tuzak günlük işlerde de gizlidir:

  • bir sözleşmenin iki versiyonu ve siz karşı tarafın neyi değiştirdiğini soruyorsunuz;
  • üç toplantı notu ve siz hangi kararların birbiriyle çeliştiğini soruyorsunuz;
  • bir stil örneği artı bir taslak: hangisi taklit edilecek, hangisi yeniden yazılacak?
  • bir hata günlüğü kodla birlikte yapıştırılmış ve soru "bunu düzelt".

Her birinde modelin metin başına iki şeye ihtiyacı vardır: bir ad (ne olduğu ve nereden geldiği) ve bir rol (onunla ne yapılmasını istediğiniz).

Her metne bir ad ve bir görev verin#

Üç küçük hamle:

  1. Her metni kendi etiketine koyun. Anthropic'in kılavuzu, her metin için bir <document index="1"> içeren bir <documents> sarmalayıcısı ve içinde ad için bir <source> ve metnin kendisi için <document_content> önerir.
  2. Talimatta, etiketlerin dışında her birinin ne olduğunu söyleyin: "Belge 1 mağazamızdan gelen ESKİ metindir. Belge 2 tedarikçiden gelen YENİ metindir."
  3. Soruyu aynı kelimelerle sorun. "Değişen her olguyu eski -> yeni olarak listele" artık işaret edebileceği bir eski ve bir yeniye sahiptir.

İşte şişe örneğinin öncesi ve sonrası:

Karşılaştır

Aynı istek, öncesi ve sonrası

Öncesi

text
What changed?

Steel water bottle, 500 ml. Keeps drinks cold for 12 hours. Dishwasher safe.

Steel water bottle, 750 ml. Keeps drinks cold for 24 hours. Hand wash only.

Sonrası

text
Document 1 is the OLD text from our shop. Document 2 is the NEW text from the supplier. List every fact that changed, one per line, as old -> new.

<documents>
<document index="1">
<source>old description (current shop page)</source>
<document_content>
Steel water bottle, 500 ml. Keeps drinks cold for 12 hours. Dishwasher safe.
</document_content>
</document>
<document index="2">
<source>new description (from the supplier)</source>
<document_content>
Steel water bottle, 750 ml. Keeps drinks cold for 24 hours. Hand wash only.
</document_content>
</document>
</documents>
Talimatın her belgeyi adlandırdığı ve her metnin kendi etiketinde durduğu bir istem
Talimat her belgenin ne olduğunu söyler; etiketler metinleri ayrı tutar

Etiketler birkaç tokena mal olur ve tahmin etmeyi ortadan kaldırır. Anthropic bu tavsiyeyi Claude modelleri için yazdı, ancak etiketler düz metindir, bu yüzden aynı düzeni başka bir sohbet modeline göndermenizi hiçbir şey engellemez.

Gerçek bir istek olarak gönderin#

İşte "sonrası" isteminin bir API çağrısı olarak hali. Adres https://api.cheaptokens.dev/v1, API OpenAI uyumludur ve model deepseek-ai/DeepSeek-V4-Flash-0731'dir. Model kimliklerini CheapTokens belgelerinden alın: adlar sağlayıcılar arasında farklılık gösterir. DeepSeek-V4-Flash 380K bağlam penceresine ve yanıt başına 32.768 çıktı tokenına kadar kapasiteye sahiptir, bu da bir yığın uzun metne yer bırakır. Anahtar bir ortam değişkeninden gelir, asla koddan gelmez.

Aynı istek iki araçta

Python

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

old = "Steel water bottle, 500 ml. Keeps drinks cold for 12 hours. Dishwasher safe."
new = "Steel water bottle, 750 ml. Keeps drinks cold for 24 hours. Hand wash only."

prompt = f"""Document 1 is the OLD text from our shop. Document 2 is the NEW text from the supplier. List every fact that changed, one per line, as old -> new.

<documents>
<document index="1">
<source>old description (current shop page)</source>
<document_content>
{old}
</document_content>
</document>
<document index="2">
<source>new description (from the supplier)</source>
<document_content>
{new}
</document_content>
</document>
</documents>"""

response = client.chat.completions.create(
    model="deepseek-ai/DeepSeek-V4-Flash-0731",
    messages=[{"role": "user", "content": prompt}],
    max_tokens=300,
)
print(response.choices[0].message.content)
print(response.usage)

curl

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-ai/DeepSeek-V4-Flash-0731",
    "max_tokens": 300,
    "messages": [{
      "role": "user",
      "content": "Document 1 is the OLD text from our shop. Document 2 is the NEW text from the supplier. List every fact that changed, one per line, as old -> new.\n\n<documents>\n<document index=\"1\">\n<source>old description (current shop page)</source>\n<document_content>\nSteel water bottle, 500 ml. Keeps drinks cold for 12 hours. Dishwasher safe.\n</document_content>\n</document>\n<document index=\"2\">\n<source>new description (from the supplier)</source>\n<document_content>\nSteel water bottle, 750 ml. Keeps drinks cold for 24 hours. Hand wash only.\n</document_content>\n</document>\n</documents>"
    }]
  }'

Yanıt choices[0].message.content içinde düz metindir ve yanındaki usage tokenları sayar. İyi bir yanıt üç değişiklik listeler: 500 ml -> 750 ml, 12 saat -> 24 saat, bulaşık makinesinde yıkanabilir -> sadece elde yıkama. Oklar ters yönde gidiyorsa, model etiketleri takip etmeyi kaybetmiştir. Talimatın belgelere etiketlerle aynı adı verdiğini kontrol edin.

Etiketlerin maliyeti nedir#

Etiketler metindir ve metin faturalandırılır. Bir ekip liderinin her biri yaklaşık 2.000 token olan üç toplantı notu verdiğini ve hangi kararların çeliştiğini sorduğunu varsayalım. Üç not: 3 × 2.000 = 6.000 token. Talimat ve etiketler için yaklaşık 150 token ekleyin (bir varsayım) ve istek 6.150 token girdi ve 300 token yanıt çıktısı taşır. DeepSeek-V4-Flash'te bu tek istek $0.00012 tutarındadır ve etiketlerin kendisi notların yanında yuvarlama hatasıdır. İşte aynı isteğin 1.000 kez gönderilmiş hali, yanında OpenRouter ile:

Model İstek başına 1.000 istek OpenRouter, 1.000 istek
GLM-5.3-Flash $0.00014 $0.135 $0.231
DeepSeek-V4-Flash $0.00012 $0.122 $0.473
MiniMax-M2.7 $0.00035 $0.353 $4.23

İstek başına 6.150 giriş ve 300 çıkış token'ı. 1M token başına fiyatlar günceldir ve tarifelerimizle birlikte değişir; OpenRouter sütunu aynı iş yükü için referans fiyatları gösterir.

6.150 tokenın tamamı 380K pencereye bolca sığar (bağlam penceresi nedir). Toplamda, girdi ve çıktı birlikte sayıldığında, istek OpenRouter'dan daha ucuza gelir. Girdi ve çıktı farklı oranlarda faturalandırılır ve girdi vs çıktı tokenları bunun nedenini açıklar. Her model için güncel rakamlar fiyatlandırma sayfasında bulunmaktadır.

Daha büyük metin yığınları için alışkanlıklar#

İkiden fazla metin olduğunda, sadece numaralar yeterli değildir: her birinin kendi adına ihtiyacı vardır. Aşağıdaki resim örnekteki düzeni gösterir: önce soruyla birlikte talimat, sonra her belge kendi etiketinde.

Akış: talimat ve soru, belge 1 (eski), belge 2 (yeni)
Talimat ve soru, ardından etiketlenmiş her belge: örnek istemin düzeni
  • Numarayla değil, içerikle adlandırın. Yanıt size geri alıntı yaptığında <source>contract v2, sent by the client</source>, document 2'dan daha iyidir.
  • Talimatınızı etiketlerin dışında tutun, böylece yapıştırılan bir metnin içindeki bir satır emir sanılmasın.
  • Bir metin, bir etiket. Uzun bir dosya hâlâ tek etikettir; iki dosya iki etikettir.
  • Adları soruda yeniden kullanın: "monday-notes'taki hangi kararlar wednesday-notes ile çelişiyor?"
  • Örneklere de rol verin. "Belge 1 bir stil örneğidir: tonunu kopyalayın, olgularını değil. Belge 2 yeniden yazılacak taslaktır."
Kendin deneDeneyin: tek bir istemde bir hata günlüğünüz ve onu üreten kodunuz var. Her birine ne eklersiniz?Cevabı göster

Bir ad ve bir görev. Günlük için: <source>error log from the last run</source> artı "bu semptomdur, düzenlemeyin". Kod için: <source>app.py</source> artı "düzeltilecek olan budur". Sonra düzeltmeyi bu adlarla isteyin.

İstemin geri kalanının temelleri (hedef, bağlam, biçim) için iyi bir istem nasıl yazılır sayfasına bakın.