Persona, kısıtlar, context window yönetimi
30 saniyede özet · Ne öğreneceksin
Bir chatbot dört bileşenden oluşur: system prompt (kim olduğu), conversation memory (geçmişi hatırlama), persona (nasıl davrandığı) ve kısıtlar (neyi yapmayacağı). LLM bir kez seçildikten sonra chatbot'un karakterini bu dört şey belirler. İyi bir chatbot tasarımı, bu dördünün birbirini desteklediği, çelişmediği bir yapıdır.
Persona, chatbot'un "karakter dökümanı"dır. Profesyonel mi, eğlenceli mi? Resmi mi, samimi…
İyi bir chatbot scope'unun dışına çıkmaz. "Sağlık tavsiyesi vermem, doktor görüşü olarak a…
LLM'ler stateless'tir: her API çağrısında konuşma geçmişinin tamamını TEKRAR yollarsın. Ge…
cost_total = Σ (in_tokens × $/M_in + out_tokens × $/M_out)Her chatbot turn'ünde ÖDEDİĞİN bedel: o turn'de modele yolladığın input token sayısı çarpı input fiyatı + modelin döndürdüğü output token sayısı çarpı output fiyatı. N turn'lü bir konuşmada bu N kez toplanır. Önemli: input her turn'de büyür çünkü geçmiş tekrar tekrar yollanır — bu yüzden uzun konuşmalar ekstra pahalıdır.
Formül → Kod Karşılığı
in_tokens→input_tokenso turn'de gönderilen toplam inputout_tokens→output_tokensmodelin döndürdüğü output$/M_in→model.price_in_per_Mmodel fiyatı (USD/1M in)$/M_out→model.price_out_per_Mmodel fiyatı (USD/1M out)Truncation ile basit chatbot loop — son 10 mesajı tutar
| 1 | from anthropic import Anthropic |
| 2 | |
| 3 | # ÖNEMLİ: LearNN bu kodu çalıştırmaz. Kendi makinende API key'inle çalıştır. |
| 4 | client = Anthropic() |
| 5 | |
| 6 | SYSTEM_PROMPT = """Sen Acme Şirketi'nin müşteri hizmetleri botusun. |
| 7 | - Resmi ama sıcak bir ton kullan |
| 8 | - Sipariş, fatura, ürün bilgisi konularına bak |
| 9 | - Yasal/medikal/finansal tavsiye verme — bu durumda kullanıcıyı insan temsilciye yönlendir |
| 10 | - 3 cümleyi nadiren geç""" |
| 11 | |
| 12 | # Conversation geçmişi — her turn'de son 10 mesaj korunur |
| 13 | history: list[dict] = [] |
| 14 | MAX_HISTORY = 10 |
| 15 | |
| 16 | def chat(user_message: str) -> str: |
| 17 | # Yeni kullanıcı mesajını ekle |
| 18 | history.append({"role": "user", "content": user_message}) |
| 19 | |
| 20 | # Son 10 mesajı yolla (truncation) |
| 21 | response = client.messages.create( |
| 22 | model="claude-sonnet-4-6-20260101", |
| 23 | max_tokens=512, |
| 24 | system=SYSTEM_PROMPT, |
| 25 | messages=history[-MAX_HISTORY:], |
| 26 | ) |
| 27 | |
| 28 | assistant_text = response.content[0].text |
| 29 | history.append({"role": "assistant", "content": assistant_text}) |
| 30 | return assistant_text |
| 31 | |
| 32 | # Konuşma örneği |
| 33 | print(chat("Merhaba")) |
| 34 | print(chat("Geçen ay verdiğim siparişin durumunu öğrenebilir miyim?")) |
| 35 | print(chat("Sipariş numarası AB-1234")) |
| 36 | # 10. mesajdan sonra ilk mesajlar tarihe karışır |
| 37 |
Stateless chatbot (kötü)
Stateful chatbot (truncation)
✦ Quiz
Kullanıcın "bana yasal tavsiye ver" diyor ama chatbot'un kısıt setinde "yasal tavsiye verme" var. En doğru tepki?
ℹ️Production chatbot tasarımında logging şart. Hangi promptlar hangi cevapları üretti, hangi refusal pattern'leri çalıştı, kullanıcılar nerede saplandı — bu metrikler olmadan persona/prompt'u iyileştiremezsin. Privacy-aware: PII'yi hash'le veya redact et.
Bu konunun pratiği
Bu konuyu interaktif dene
Az önce okuduğun kavramın parametrelerini değiştir, etkisini canlı gör