Bloga dön

Yeni başlayanlar için AIKılavuz

Few-shot prompting: formatınızı almak için modele 3–5 örnek gösterin

3–5 etiketli örneğin bir modelin sizin etiketlerinizle veya JSON ile yanıt vermesini nasıl sağladığı, bir Python isteği ve istek başına ek girdi maliyetiyle.

Yazan: CheapTokens TeamYayınlanma tarihi: 5 dk okuma

Kapak: örnek bir ticket ve etiketiyle few-shot prompt
Bu sayfada
  1. "Few-shot" ne demek
  2. İşe yarayan örnekler için üç kural
  3. API üzerinden gönderin
  4. Beş örnek faturaya ne ekler
  5. JSON, ton ve örneklerinizi kontrol etme

Ticket botunuz tek kelimeyle yanıt vermeli: billing, bug veya other. Çoğu yanıt tam olarak budur. Sonra biri "Etiket: faturalama — müşteri bir iade konusunda üzgün görünüyor" olarak gelir ve etiketi okuyan kod tıkanır.

Olağan çözüm daha uzun bir talimat değildir. Birkaç örnektir: 3–5 tamamlanmış ticket'ı etiketleriyle birlikte prompt'a koyun, model deseni kopyalar. Bu, few-shot prompting'dir. Anthropic'in prompting kılavuzu ("Use examples effectively" bölümü, 3 Kasım 2026'da kontrol edildi) örnekleri biçim, ton ve yapıyı yönlendirmenin en güvenilir yollarından biri olarak adlandırır ve 3–5 örnek önerir. İşin püf noktası: her örnek, her istekte tekrar ödediğiniz girdidir. Aşağıdaki maliyet bölümü bunu günde 2.000 ticket işleyen bir bot için hesaplar.

"Few-shot" ne demek#

Destek masasında ilk günündeki yeni bir iş arkadaşınızı düşünün. "Her ticket'ı faturalama, hata veya diğer olarak etiketle" deyip gidersiniz. Bazı etiketler sizin fikrinizle eşleşir, bazıları eşleşmez. Şimdi zaten etiketlenmiş üç ticket bırakın ve "bunlar gibi" deyin. Aynı iş arkadaşı, çok daha az sürpriz.

Modeller de aynı şekilde davranır. Yalnızca talimat zero-shot olarak adlandırılır. Talimat artı birkaç çözülmüş örnek few-shot'tır (Anthropic'in sayfası multishot da der). Bir "shot" sadece bir örnektir.

Karşılaştır

Aynı görev, iki prompt

Yalnızca talimat

text
Label the support ticket as billing, bug or other.

Talimat artı örnekler

text
Label the support ticket with one word: billing, bug or other.

Ticket: I was charged twice for one top-up.
Label: billing

Ticket: The export button does nothing.
Label: bug

Ticket: Do you have a dark theme?
Label: other

İkinci prompt billing'nin ne anlama geldiğini asla açıklamaz. Örnekler bunu göstererek yapar ve biçimi anlamla birlikte taşır. Yine de açık bir talimat satırı zarar vermez, bu yüzden aşağıdaki sürüm onu korur.

İşe yarayan örnekler için üç kural#

Anthropic'in sayfası iyi örnekleri üç kelimeye indirger:

  • İlgili: gerçekten aldığınız ticket'lara yakın, başka bir göreve değil.
  • Çeşitli: uç durumları kapsarlar ve birbirlerinden farklıdırlar, böylece model tesadüfi bir desene takılmaz.
  • Yapılandırılmış: etiketlerle sarılmış (<example> ve <examples> içinde birkaç tane) böylece model örnekleri talimatlardan ayırt edebilir. Aynı sayfa etiket adlarının tutarlı tutulmasını söyler.

İşte bu şekilde oluşturulmuş tam bir prompt. prompt.txt olarak kaydedin:

text
<instructions>
Label the support ticket with exactly one word: billing, bug or other.
Reply with the label only.
</instructions>

<examples>
<example>
<ticket>I was charged twice for the same top-up.</ticket>
<label>billing</label>
</example>
<example>
<ticket>The export button does nothing when I click it.</ticket>
<label>bug</label>
</example>
<example>
<ticket>Do you have a dark theme?</ticket>
<label>other</label>
</example>
<example>
<ticket>Please refund me. Also, the page crashes on login.</ticket>
<label>billing</label>
</example>
<example>
<ticket>Is there an API for exporting reports?</ticket>
<label>other</label>
</example>
</examples>

Dördüncü örneğe bakın: aynı zamanda bir çökmeden bahseden bir iade talebi. Bir talimat karışık bir ticket'ı çözemez, bir örnek çözebilir. Burada para kazanır, bu yüzden etiket billing'dir. Hangi kuralı seçerseniz seçin, bir kez gösterin.

Eşleştir

Hangi kural ihlal edilmiş?

  • Örnekleriniz tek satırlık sohbet selamları, ama gerçek ticket'lar uzun e-postalarİlgili değil: örnekler gerçek göreve yakın olmalı
  • Tüm örnekleriniz aynı etiketi taşıyorÇeşitli değil: model tesadüfi bir desen yakalayabilir
  • Örnekler talimatlar arasına gevşek metin olarak yapıştırılmışYapılandırılmamış: talimatlarla karıştırılmamaları için etiketlerle sarın

API üzerinden gönderin#

Prompt her istekte aynı metindir ve yalnızca yeni ticket değişir. Her ticket aynı kısa yolculuktan geçer:

Talimat, örnekler ve yeni ticket tek bir isteğe girer; bir etiket geri döner
Ticket başına bir istek: talimatlar ve örnekler kalır, ticket değişir

İşte openai paketiyle Python'da. Adres CheapTokens API'sidir, anahtar bir ortam değişkeninde durur (bir anahtarı güvenle nasıl saklayacağınızı görün) ve model kimliği dokümanlardaki tam olandır:

python
import os
from openai import OpenAI

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

PROMPT = open("prompt.txt", encoding="utf-8").read()


def label(ticket: str) -> str:
    response = client.chat.completions.create(
        model="deepseek-ai/DeepSeek-V4-Flash-0731",
        max_tokens=64,
        messages=[
            {"role": "system", "content": PROMPT},
            {"role": "user", "content": f"<ticket>{ticket}</ticket>"},
        ],
    )
    print(response.usage.prompt_tokens, response.usage.completion_tokens)
    return response.choices[0].message.content.strip()


print(label("The app shows a blank screen after the update."))

Çalıştığında tek bir satırda iki token sayısı ve ardından etiketin kendisini, bug gibi tek bir kelime görürsünüz. Bunun yerine bir cümle alırsanız, örnekler henüz işlerini yapmıyor demektir: etiketleri ve şemanızdaki her etiketin en az bir kez göründüğünü kontrol edin.

İzlemeniz gereken ilk sayıdır. Bu, talimatlar artı örnekler artı ticket olan tüm prompt'tur ve eklediğiniz her örnekle büyür. Betiği bir kez tam prompt.txt ile ve bir kez yalnızca <instructions> kısmıyla çalıştırın: iki ilk sayı arasındaki fark, örneklerinizin istek başına maliyetidir.

DeepSeek-V4-Flash bu tür toplu etiketlemeye uygundur: günün her saatinde tek fiyat, 380K token bağlam (böylece uzun bir örnek bloğu kolayca sığar) ve yanıt başına 32.768 token'a kadar. 390K bağlamlı GLM-5.3-Flash da kısa etiketleme görevleri için çalışır. Her ikisi de modeller sayfasında, tek bir bakiye arkasında.

Beş örnek faturaya ne ekler#

Botun günde 2.000 ticket işlediğini varsayalım. Bir ticket'ın yaklaşık 120 token ve talimatın yaklaşık 80 token olduğunu varsayın, yani örneksiz bir istek 80 + 120 = 200 girdi token'ıdır. Her biri yaklaşık 60 token olan beş örnek 5 × 60 = 300 ekler, yani onlarla birlikte bir istek 200 + 300 = 500'dür. Yanıt tek kelimedir, her iki durumda da 3 çıktı token'ı diyelim. Bunlar varsayımlardır: betiğinizin yazdırdığı prompt_tokens değerini yerine koyun.

Bir gün boyunca, 200 × 2.000 = 400.000 girdi token'ı 500 × 2.000 = 1.000.000 olurken çıktı 3 × 2.000 = 6.000 token'da kalır. DeepSeek-V4-Flash'te bu, örneksiz günde $0.0066 ve onlarla birlikte $0.0156'dir. Örnekler size bu iki sayı arasındaki farka mal olur ve Anthropic'e göre size daha tutarlı çıktı kazandırır.

Her istekte aynı: talimatlar ve beş örnek. Her seferinde yeni: ticket
İstekler arasında yalnızca ticket değişir

Bu resim yararlı bir ayrıntıyı gizler. Örnekler bloğu her istekte aynıdır, ki bu tam olarak prompt önbelleklemenin konusu olan tekrarlanan başlangıç türüdür; prompt önbellekleme nedir bunun nasıl çalıştığını açıklar.

İşte aynı yük, istek başına 500 girdi ve 3 çıktı token'ı, 2.000 istek, modeller arasında. Tablo güncel fiyatlardan yeniden hesaplar:

Model İstek başına 2.000 istek OpenRouter, 2.000 istek
GLM-5.3-Flash $0.00001 $0.0202 $0.034
DeepSeek-V4-Flash $0.0000078 $0.0156 $0.0708
MiniMax-M2.7 $0.000025 $0.0509 $0.611

İstek başına 500 giriş ve 3 çı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.

Girdi ve çıktı birlikte sayıldığında, DeepSeek-V4-Flash ve GLM-5.3-Flash bu yükte OpenRouter'dan daha ucuza gelir. Tam fiyat listesi fiyatlandırma sayfasında.

JSON, ton ve örneklerinizi kontrol etme#

Aynı numara karşılaşacağınız diğer iki durumu da kapsar. Her seferinde aynı JSON alanlarına mı ihtiyacınız var? Örnek yanıtı JSON'un kendisi yapın:

text
<example>
<ticket>I was charged twice for the same top-up.</ticket>
<output>{"label": "billing", "urgent": true}</output>
</example>

response_format ve bir yanıt hâlâ geçerli değilse ne yapılacağı için bir LLM API'sinden geçerli JSON alın sayfasına bakın. Metnin tek bir tonda yeniden yazılmasını mı istiyorsunuz? "Samimi ama kısa" gibi sıfatlar belirsizdir; iki önce-sonra çifti bunu daha iyi gösterir.

Herhangi bir örnek kümesine güvenmeden önce, elle zaten etiketlediğiniz 20 ticket alın, çalıştırın ve karşılaştırın. Bir geçiş size herhangi bir kuraldan daha fazlasını söyler. Anthropic'in sayfası bir kısayol ekler: modelden örneklerinizi ilgililik ve çeşitlilik açısından derecelendirmesini veya elinizdekilerden daha fazlasını yazmasını isteyin.

Kontrol listesi

Örneklerinize güvenmeden önce

Örnekler işe yaradığında, sıradaki soru birkaç belgenin tek bir prompt'ta birbirine karışmasını nasıl önleyeceğinizdir. Bir prompt'taki her belgeyi etiketleyin bunu kapsar.