İçeriğe geç

Output Kısaltma Teknikleri: max_tokens, Stop Sequences ve "Be Terse" Promptun Gerçek Etkisi

Output 3-5× pahalı olduğundan, output'u küçültmek faturana doğrudan etki eder. Bu derste max_tokens stratejisi, stop sequence'lerin doğru kullanımı, "be terse" prompt'larının ölçülmüş etkisi ve format-driven kısıtlamalar.

Şükrü Yusuf KAYA
15 dakikalık okuma
Orta
Output Kısaltma Teknikleri: max_tokens, Stop Sequences ve "Be Terse" Promptun Gerçek Etkisi
✂️ Output, faturanın yarısı
Tipik LLM faturası output'tan gelir (3-5× input fiyatından). Modül 5'in zirvesinde: output kısaltmanın 6 tekniği. Hepsi A/B test edilmiş, hepsi production'da çalışıyor.

Teknik 1 —
max_tokens
Her İstekte Set Et#

Default'ta her API'nin max_tokens'ı çok yüksek (4K-8K). Model verbose olunca tam buna kadar gidebilir.

Doğru ayar#

TASK_LIMITS = { "yes_no": 10, "extract_email": 30, "classify": 20, "short_summary": 150, "medium_response": 400, "long_summary": 800, "code_generation": 1500, } response = completion( model="claude-sonnet-4-6", messages=[...], max_tokens=TASK_LIMITS[task_type], )

Kullanım pattern'ı izle#

Her görev tipi için gerçek output token dağılımını logla. P95'in biraz üstüne max_tokens koy — outlier'lar çok ucuza kesilir, normal kullanım etkilenmez.
SELECT feature, quantile(0.50)(output_tokens) AS p50, quantile(0.95)(output_tokens) AS p95, quantile(0.99)(output_tokens) AS p99, max(output_tokens) AS max FROM llm_telemetry.requests WHERE feature = 'summarization' AND ts >= now() - INTERVAL 7 DAY
Eğer P95 = 320, P99 = 480 ise: max_tokens=500 koy. %1 outlier kesilir, %99'u etkilenmez.

Teknik 2 — Stop Sequence'ler#

stop
parametresi ile modeli belirli string'lerle durdurursun.

Kullanışlı durumlar#

2.1 — Few-shot pattern sonlandırma

messages = [{ "role": "user", "content": "Soru: ...\nCevap:" }] # Stop sequence: "\nSoru:" — model bir sonraki "Soru:"'ya gelince durur response = completion(model=..., messages=messages, stop=["\nSoru:"])

2.2 — JSON wrap'i sonlandırma

# Anthropic prefill ile messages = [ {"role": "user", "content": "..."}, {"role": "assistant", "content": "{"}, ] response = completion(model=..., messages=messages, stop=["}"]) result = "{" + response.choices[0].message.content + "}"

2.3 — Markdown section kesme

# Model markdown üretiyor, sadece ilk section'ı al response = completion(model=..., messages=[...], stop=["\n## ", "\n### "])

Kaç stop sequence?#

OpenAI/Anthropic genelde max 4 stop sequence destekler. Stop sequence token sayılmıyor — pure tasarruf.

Teknik 3 — "Be Terse" Prompt#

Sistem prompt'una eklenen tek cümle bazen %30-50 output tasarrufu sağlar:
Be extremely concise. Respond with the minimum text needed. Never use phrases like "Of course!", "Certainly", or "Here is...". Skip greetings and closings.
veya Türkçe:
Aşırı kısa cevap ver. Selamlama, "Tabii", "İşte burada" gibi kalıpları kullanma. Sadece istediği bilgiyi ver.

A/B Test sonucu (kendi production'umda)#

VariantOrtalama output tokenQuality skoru
Baseline (no instruction)3804.2/5
"Be terse"2104.1/5
%45 output tasarrufu, kalite düşüşü %2 (negligible).

Teknik 4 — Format Constraint#

Output formatını explicit kısıtla:
"Cevabını maksimum 2 cümlede ver." "Bullet point liste, her bullet 5-7 kelime." "Sadece sayı dön, kelime yok." "Tek kelimelik cevap."

Test sonuçları#

ConstraintAvg output token
(none)400
"max 3 cümle"150
"bullet 5 madde"220
"sadece sayı"5
"tek kelime"1-2
Model çok iyi takip ediyor bu kısıtlamaları. Use it.

Teknik 5 — Preamble Yasaklama#

Modeller cevaba "Tabii ki!", "Elbette", "İşte burada:" gibi açılışlarla başlamayı sever. Bunlar 5-15 token / cevap israf.

Sistem prompt'a ekle#

Asla cevaba "Tabii", "Elbette", "Anladım", "İşte" ile başlama. Direkt asıl cevabı ver.
Tasarruf küçük per-istek ama high-volume'da değer. 1M istek × 10 token × 15/M=15/M = **150/ay**.

Teknik 6 — Erken Streaming Cancel#

Streaming response'da, modelin gereksiz uzun cevap üretmeye başladığını algılarsan stream'i kes.

Heuristic#

async def stream_with_smart_cancel(): total_tokens = 0 repeated_phrases = [] async for chunk in stream: delta = chunk.choices[0].delta.content if not delta: continue total_tokens += 1 yield delta # Erken kes - 200 token'dan fazlaysa ve tekrar ediyorsa if total_tokens > 200 and is_repeating(repeated_phrases): stream.close() break
Aşırı uzun cevap üreten edge case'lerde işe yarar (bot-like behavior, infinite loop).

Combined Impact#

Tek teknik %5-15. Hepsi birlikte:

Baseline (bir RAG cevap)#

  • Output: 600 token
  • Cost (Sonnet 4.6): $0.009

Optimize edilmiş#

  • max_tokens=350 → %42 cap
  • "Be terse" prompt → %45 ek azalma
  • "No preamble" → 10 token tasarruf
  • Format constraint ("max 3 cümle") → güçlü kısıtlama

Sonuç#

  • Output: 150 token (-%75)
  • Cost: $0.00225 (-%75)
100K istek/ay = $675 tasarruf sadece output kısaltmaktan.

Kalite Monitoring#

Output kısaltırken kalite riskli — sürekli izle.

Metric'ler#

  • Customer satisfaction (CSAT) — kullanıcı feedback'i
  • Task completion rate — cevap kullanıcı sorununu çözdü mü?
  • Re-ask rate — kullanıcı aynı soruyu tekrar mı soruyor?
  • Human escalation rate — human-handoff oranı arttı mı?

Alert#

Eğer output kısaltma sonrası: - CSAT %5'ten fazla düştü → rollback - Re-ask rate %20'den fazla arttı → rollback - Task completion %3'ten fazla düştü → rollback Aksi takdirde → ship
🎉 Modül 5 Tamamlandı
Artık prompt'unu kalite kaybetmeden %40-70 küçültebilirsin. Bu kursun en doğrudan tasarruf üreten modülü. Şimdi Modül 6'da daha radikal bir teknik var: LLM ile prompt sıkıştırma (LLMLingua).
▶️ Modül 6'ya geçiyoruz
Modül 6: Prompt Sıkıştırma. LLMLingua, Selective-Context, gisting — modern prompt compression teknolojileri. Manuel optimizasyondan otomatik AI-driven compression'a. %80 sıkıştırma, %3 kalite kaybı — pattern devamı.

Sık Sorulan Sorular

Cevap ortasında kesilir, UX kötü. Çözüm: P95-P99 dağılımına bak, %95-99 isteğin geçeceği seviyede tut. Outlier %1-5 kullanıcı feedback'i değerlendirilebilir. Streaming response'da kullanıcı kesintiyi daha kolay fark eder — UX'a dikkat.

Yorumlar & Soru-Cevap

(0)
Yorum yazmak için giriş yap.
Yorumlar yükleniyor...

İlgili İçerikler