React Flow mini map
🌍 Gerçek Dünyaorta14 dk

Chatbot Tasarımı

Persona, kısıtlar, context window yönetimi

🎯

30 saniyede özet · Ne öğreneceksin

  • Tutarlı persona belgesi yazmak
  • Refusal pattern ile scope'u korumak
  • Truncation / summarization / RAG memory stratejilerini seçmek
14 dk okuma·orta·🧪 interaktif sandbox

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_tokensinput_tokenso turn'de gönderilen toplam input
out_tokensoutput_tokensmodelin döndürdüğü output
$/M_inmodel.price_in_per_Mmodel fiyatı (USD/1M in)
$/M_outmodel.price_out_per_Mmodel fiyatı (USD/1M out)

Truncation ile basit chatbot loop — son 10 mesajı tutar

Python
1from anthropic import Anthropic
2
3# ÖNEMLİ: LearNN bu kodu çalıştırmaz. Kendi makinende API key'inle çalıştır.
4client = Anthropic()
5
6SYSTEM_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
13history: list[dict] = []
14MAX_HISTORY = 10
15
16def 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
33print(chat("Merhaba"))
34print(chat("Geçen ay verdiğim siparişin durumunu öğrenebilir miyim?"))
35print(chat("Sipariş numarası AB-1234"))
36# 10. mesajdan sonra ilk mesajlar tarihe karışır
37

Stateless chatbot (kötü)

  • ·Her mesajda "unutmuş" gibi davranır
  • ·Kullanıcı kendini tekrar tanıtır
  • ·Çok uzun konuşmalarda ucuz
  • ·Çoğu kullanım için işe yaramaz

Stateful chatbot (truncation)

  • ·Son N mesajı hatırlar
  • ·Doğal konuşma akışı
  • ·Token maliyeti turn başı artar
  • ·Çoğu uygulama için ideal

✦ 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

Aç →