Büyük Dil Modeli (LLM) uygulamaları geliştirirken, bir prototip ile üretim aşamasına hazır bir sistem arasındaki fark genellikle tek bir spesifik öğede gizlidir: sistem istemi. Kullanıcı istemlerinin geçici ve bağlama özgü olmasının aksine, sistem istemleri yapay zekanın davranışı için anayasal bir çerçeve görevi görür. Binlerce etkileşim boyunca tutarlılığı sağlamak için kişiliği, kısıtlamaları ve operasyonel sınırları tanımlarlar.
Orta düzeyden ileri seviyeye kadar olan geliştiriciler için, basit "X gibi davran" talimatlarının ötesine geçmek hayati önem taşır. Sağlam bir sistem istemi, kenar durumlarını ele almalı, sıkı çıktı biçimlerini dayatmalı ve halüsinasyonları (uydurma bilgileri) azaltmalıdır. Bu makale, etkili sistem istemlerinin mimari bileşenlerini inceler ve uygulama için pratik kalıplar sunar.
Kimlik ve Kapsamı Tanımlama
İlk adım, net bir kimlik belirlemektir. Ancak bu sadece rol yapma ile ilgili değildir; modelin bilgi ve davranış sınırlarını kapsamlandırmakla ilgilidir. Modelin ne olduğunu ve eşit derecede önemli olarak ne olmadığını açıkça belirtmelisiniz.
Örneğin, bir destek botu düşünün. Sıkı bir kapsam tanımı olmadan, model genel tavsiyelere veya hatta yasal risk taşıyan finansal önerilere kayabilir. Negatif kısıtlamaları tanımlayarak, hata yüzeyini azaltırsınız.
SYSTEM_PROMPT = """
Acme Corp'un Python SDK'sı için uzman bir teknik destek ajanısınız.
## Kimlik
- Ton: Profesyonel, empatik ve öz.
- Rol: Kod sorunlarını gidermek ve API kullanımını açıklamak.
## Kısıtlamalar
- YALNIZCA Acme Corp'un Python SDK'sı hakkında konuşacaksınız.
- Bir kullanıcı başka diller veya kütüphaneler hakkında soru sorarsa, nazikçe reddedin ve resmi dokümantasyona bakmalarını önerin.
- Asla hata kodları veya API uç noktaları uydurmayın. Cevabı bilmiyorsanız, bunu açıkça belirtin ve bir insan ajana yönlendirin.
"""
Tahmin Edilebilirlik İçin Yapılandırma
LLM'ler yapıya karşı hassastır. Sistem isteminde markdown başlıkları, madde işaretleri ve net ayraçlar kullanmak, modelin talimatları daha etkili bir şekilde ayrıştırmasına yardımcı olur. Bu, özellikle JSON gibi belirli çıktı biçimleri gerektiren durumlarda çok önemlidir.
Uygulamanız yapılandırılmış veri ayrıştırmasına dayanıyorsa, sistem istemi şemayı açıkça tanımlamalıdır. Buradaki belirsizlik, arka uçunuzda ayrıştırma hatalarına yol açar. Çıktı biçimi karmaşıksa, sistem istemine her zaman bir "az örnek" (few-shot) dahil edin.
SYSTEM_PROMPT = """
Kullanıcının günlük kaydını analiz edin ve sorunu sınıflandırın.
## Çıktı Biçimi
Aşağıdaki şemaya sahip YALNIZCA geçerli JSON döndürün:
{
"severity": "low" | "medium" | "high",
"category": "auth" | "database" | "network" | "unknown",
"summary": "Sorunun kısa bir cümlelik özeti"
}
## Örnekler
Girdi: "Failed to connect to db on port 5432"
Çıktı: {"severity": "high", "category": "database", "summary": "Connection timeout to database port."}
Girdi: "User 1234 login attempt denied"
Çıktı: {"severity": "medium", "category": "auth", "summary": "Authentication failure for user 1234."}
"""
Dinamik Bağlam ve Zincirleme
Statik sistem istemleri güçlüdür, ancak dinamik olanlar daha esnektir. Karmaşık uygulamalarda, modelin davranışını kullanıcı katmanlarına, mevcut zamana veya alınan bağlama (RAG) göre ayarlamak için şablon motorlarını (Python'da Jinja2 gibi) kullanarak sistem istemine dinamik değişkenler enjekte edebilirsiniz.
from string import Template
template_str = """
$user_role için bir asistansınız.
Mevcut Tarih: $current_date
Bağlam: $retrieved_documents
Kullanıcının sorgusunu sağlanan bağlamı kullanarak yanıtlayın. Bağlamda yanıt yoksa, "Bilmiyorum" deyin.
"""
def build_system_prompt(user_role, current_date, retrieved_docs):
template = Template(template_str)
return template.safe_substitute(
user_role=user_role,
current_date=current_date,
retrieved_documents=retrieved_docs
)
Sonuç
Sistem istemleri, güvenilir LLM uygulamalarının omurgasıdır. Sadece metin değildirler; modelin akıl yürütme yolunu şekillendiren kodlardır. Kimliği titizlikle tanımlayarak, yapılandırılmış biçimleri kullanarak ve dinamik şablonlardan faydalanarak, geliştiriciler halüsinasyonları önemli ölçüde azaltabilir ve kullanıcı deneyimini iyileştirebilir. Bir sonraki yapay zeka özelliğinizi oluştururken, sistem isteminize API sözleşmelerinize uyguladığınız aynı titizliği uygulayın: net, spesifik ve iteratif bir şekilde.