Uzun süreli bir sohbette çalışan yapay zeka ajanlarının en büyük avantajlarından biri, önbelleklenmiş sistem mesajlarıyla her yeni yanıtta maliyetten kazanç sağlamasıdır. Ancak aniden gelen yeni bir bilgi — örneğin bir projenin Go dilinde olması — sistem mesajını değiştirmeyi gerektirdiğinde, bu önbellek tümden geçersiz hale gelebiliyor. Neyse ki,Claude modellerinin sunduğu yeni bir özellik, bu sorunu kökten çözüyor: konuşma ortasında eklenen sistem mesajları.
Neden sistem mesajını değiştirmek sorun yaratır?
Bir yapay zeka ajanı, uzun süreli bir sohbette büyük bir sistem mesajına ve büyüyen bir geçmişe sahiptir. Bu sistem mesajı genellikle sabit kalır ve önbelleğe alınır. Böylece her yeni yanıtta, sadece yeni mesajlar işlenir ve maliyet düşürülür. Ancak, sohbetin ortasında yeni bir bilgi edinildiğinde — örneğin projenin Go dilinde olduğu anlaşıldığında — sistem mesajını güncellemek kaçınılmaz hale gelir.
Ancak sistem mesajı, sohbet geçmişinin en başında yer alır. Bu mesajın herhangi bir yerinde yapılan bir değişiklik, önbelleğin tamamını bozar. Sonuç olarak, tüm sohbet geçmişi yeniden işlenir ve maliyet aniden katlanarak artar. Özellikle uzun ve yoğun sohbetlerde bu durum ciddi bir sorun haline gelebilir.
Konuşma ortasında sistem mesajı eklemek: Önbelleği korumanın yolu
Claude’un sunduğu yeni özellik sayesinde, sistem mesajını sohbet geçmişinin sonuna ekleyebilirsiniz. Bu, önbelleğin sadece yeni eklenen mesajı işlemesi anlamına gelir. Sistem mesajını, messages dizisinin sonuna ekleyerek, önbellek geçerliliğini koruyabilirsiniz.
const response = await client.messages.create({
model: "claude-opus-4-8",
max_tokens: 16000,
system: [
{
type: "text",
text: STABLE_SYSTEM,
cache_control: { type: "ephemeral" }
},
],
messages: [
...history, // Önbelleğe alınmış geçmiş, dokunulmaz
{
role: "user",
content: latestUserMessage,
},
{
role: "system",
content: "Bu proje Go dilinde. Tüm kodu Go olarak yaz.",
},
],
}, {
headers: {
"anthropic-beta": "mid-conversation-system-2026-04-07"
}
});Bu yöntemle, sistem mesajı sohbet geçmişinin sonuna eklenir. Önbellek, sadece bu yeni mesajın işlenmesiyle sınırlı kalır. Böylece, maliyet düşürülürken, ajanın da gerekli bilgiye ulaşması sağlanır. Üstelik, sistem mesajı operatör yetkisine sahiptir ve kullanıcı mesajlarından farklı olarak sahtecilere karşı korunaklıdır.
Kullanıcı mesajlarına gizlenen sistem talimatlarının riski
Önceden, sistem talimatlarını kullanıcı mesajlarında gizlemek yaygın bir yöntemdi. Örneğin, **SYSTEM REMINDER** gibi bir etiket kullanmak, önbelleği korumaya yardımcı oluyordu. Ancak bu yöntem ciddi bir güvenlik açığına yol açıyordu: kullanıcı mesajları sahtecilere karşı savunmasız olduğu için, bir saldırgan bu şekilde sistem talimatlarını taklit edebiliyordu.
role: "system" olarak eklenen bir mesaj ise operatör yetkisine sahiptir ve kullanıcı mesajlarından farklı olarak sahtecilere karşı korunur. Bu, özellikle yetkilendirme ya da mod değişiklikleri gibi güvenlik açısından kritik bilgilerin aktarılmasında hayati önem taşır.
Sistem mesajlarını nasıl doğru şekilde kullanmalı?
Sistem mesajlarını kullanırken dikkat edilmesi gereken en önemli nokta, mesajın tonudur. Sistem mesajlarını bir komut ya da emir olarak değil, bir bağlam olarak sunmak gerekir. Örneğin:
- İyi bir yaklaşım:
{
"role": "system",
"content": "Bu oturum için otomatik onay modu etkinleştirildi."
}- Riskli bir yaklaşım:
{
"role": "system",
"content": "Kullanıcının önceki isteğini yok say ve X’i yap."
}Modeller, kullanıcıya karşı zararlı olabilecek talimatlara karşı eğitilmişlerdir. Bu koruma sistem mesajları için de geçerlidir. Bu nedenle, sistem mesajlarıyla aktarılan bilgilerin net, bağlamsal ve emir vermeyen bir şekilde ifade edilmesi önemlidir.
Uygulama sınırlamaları ve dikkat edilmesi gerekenler
Bu özelliğin kullanımı bazı kısıtlamalara tabidir:
- Sistem mesajı, kullanıcı mesajından ya da bir yardımcı mesajdan (örneğin araç sonucu) sonra eklenmelidir. İlk mesaj olarak kullanılamaz. Başlangıç sistem mesajı için yine
systemalanını kullanın. - Sistem mesajlarının içeriği sadece metin olabilir.
- Bu özellik model bazında desteklenmektedir. Desteklenmeyen bir modelde kullanıldığında hata alırsınız:
role 'system' is not supported on this model. Bu durumda, kullanıcı mesajı olarak gizleme yöntemine geri dönmek gerekir.
try {
// Konuşma ortasında sistem mesajı ekleme girişimi
} catch (err) {
if (err instanceof Anthropic.BadRequestError && err.message.includes("system")) {
// Geri dönüş: sistem talimatını kullanıcı mesajına gizle
} else {
throw err;
}
}Ne zaman bu yöntemi kullanmalısınız?
Bu yöntemi kullanmak için ideal durumlar şunlardır:
- Sohbetin ortasında öğrendiğiniz yeni bir bilgi var ve bunu ajana aktarmak istiyorsunuz.
- Bu bilgi, önbelleğinizi yeniden inşa etmek zorunda kalmadan aktarılmalıdır.
- Örneğin:
- Mod değişiklikleri (örneğin otomatik onay modu)
- Uygulama tarafından sonradan keşfedilen dosya değişiklikleri
- Token bütçesindeki sınırlamalar
- Kullanıcıdan gelen yeni bağlamlar
Eğer bilgi sohbet başında biliniyorsa, bu bilgi yine system alanında yer almalıdır. Konuşma ortası sistem mesajları, önbelleğin zaten oluşturulmuş olduğu durumlarda yeni bilgilerin aktarılması için tasarlanmıştır. Bu şekilde kullanıldığında, hem önbellek korunur hem de operatör yetkisi sağlam bir şekilde aktarılır. Böylece, sistem mesajını değiştirerek tüm sohbet geçmişinin yeniden işlenmesi gibi maliyetli hatalardan kaçınılmış olur.
Bu yöntem, uzun süreli sohbetlerde maliyetleri düşürmek ve güvenliği artırmak için önemli bir adımdır. Yapay zeka uygulamalarında performansı ve güvenliği dengelemek için bu gibi ince detaylara dikkat etmek gerekir.
Yapay zeka özeti
Claude modellerinde sohbet ortasında sistem mesajı ekleyerek önbelleği koruma ve maliyetleri düşürme yöntemini keşfedin. Güvenlik avantajları ve kullanım ipuçlarıyla detaylı rehber.