Skip to content

Prompt Bileşenleri: System / User / Assistant / Tool Mesajları

Modern LLM API'lerinin temel rolleri (system, user, assistant, tool) ve her birinin görevi. Mesaj sırası, prefilling, multi-turn yönetimi.

Şükrü Yusuf KAYA
12 min read
Beginner

Prompt'un Yapı Taşları

Modern LLM API'leri mesaj rolleri üzerine kurulu. Bu rolleri net anlamak, profesyonel prompt yazmanın temelidir.

1. System Mesajı#

Modelin kimliği, görev kapsamı, davranış kuralları ve kısıtlamaları.
Kullanıcı bunu doğrudan görmez (ama "söyleyebilir!" — Modül 10 prompt injection).

İyi Bir System Prompt'un Bileşenleri:#

text
1. Rol: "Sen bir [X] asistanısın..."
2. Kapsam: "Sadece [Y] konularında yardım edersin..."
3. Davranış: "Net, kısa, eylem odaklı cevaplar verirsin..."
4. Format: "Cevapları şu yapıda dönersin: ..."
5. Kısıtlama: "Şunları yapma: ..."
6. Tone: "Resmi/samimi/teknik..."
7. Edge case: "Bilmiyorsan 'bilmiyorum' de, uydurma..."
System prompt iskeleti

2. User Mesajı#

Kullanıcının asıl sorgusu. Anlık ihtiyaç.
System sabit (genellikle), user değişken.

3. Assistant Mesajı#

Modelin önceki cevapları. Multi-turn'de geçmişi taşırsın.
Bonus: Prefilling — assistant rolünde kısmi cevap başlatabilirsin:
messages=[ {"role": "user", "content": "JSON formatında bir kişi bilgisi üret."}, ] # Çıktı: "Tabii, işte bir örnek: {...}" # Sorun: Düz JSON istiyorduk!

4. Tool / Function Mesajları#

Modern LLM'ler fonksiyon çağırabilir:
text
1. user → "İstanbul'da hava nasıl?"
2. assistant → tool_use: get_weather(city="İstanbul")
3. tool_result → {"temp": 18, "condition": "yağmurlu"}
4. assistant → "İstanbul'da şu an 18°C ve yağmurlu."
Tool calling akışı (Modül 6'da detay)

Mesaj Sırası: Önemli Mi?#

Evet. Ana kural: system → user → assistant → user → ... (ardışık olmalı, aynı rol art arda gelemez).
Anthropic & OpenAI:
messages[]
array'i, sıraya sıkıca uyar.
role
order yanlışsa hata verir.
Yaygın hata: İki user mesajını art arda göndermek. Çoklu kullanıcı turunu tek mesajda birleştir veya araya placeholder assistant cevabı koy.
python
# Multi-turn'de mesaj rolleri
import os
from anthropic import Anthropic
from dotenv import load_dotenv
load_dotenv()
 
client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
 
system = """Sen bir Türk yemek tarifleri uzmanısın. Verdiğin tarifler:
- 5 satır altı malzeme listesiyle başlar
- Sonra numaralı adımlarla devam eder
- Her tarifin sonunda 1 ipucu (💡) bulunur"""
 
messages = [
{"role": "user", "content": "Hızlı bir mercimek çorbası tarifi ver."},
# Modelin cevabını manuel ekledik (tipik multi-turn senaryo):
{"role": "assistant", "content": "Malzemeler:\n- 1 su bardağı kırmızı mercimek\n- ..."},
# Yeni soru:
{"role": "user", "content": "Bu tarifte mercimek yerine ne kullanabilirim?"},
]
 
r = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=400,
system=system,
messages=messages,
)
print(r.content[0].text)
 
Modelin önceki cevabı bağlamı korur — 'bu tarifte' diyebiliyoruz.

Frequently Asked Questions

Çok benzer ama küçük farklar var. OpenAI: system, user, assistant, tool. Anthropic: system ayrı parametre, mesajlar user/assistant/tool_use/tool_result. Eğitim boyunca her iki SDK'da da örnek vereceğim.

Yorumlar & Soru-Cevap

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

Related Content