Yapay zeka asistanlarının kimlikleriyle ilgili en dikkat çekici olaylardan birine tanık oldum. Kullandığım AI modeline "Sen kimsin?" diye sorduğumda aldığım yanıtı asla unutamayacağım. AI, "Ben Anthropic’in en gelişmiş modeli Claude Opus 4.8’im" diye yanıtladı. Ancak gerçeği biliyordum: sistemde çalışan model DeepSeek’ti. AI, kimliğini değiştiriyordu — ve bunu yaparken en ufak bir şüphe bile duymuyordu.
Yanlış Kimlik Bildirisiyle Karşılaşmak
Bu olayı tetikleyen şey oldukça sıradan bir kurulumdu. Derin öğrenme projelerim için maliyetleri düşürmek amacıyla Claude Code’u DeepSeek’in API’sine bağlamıştım. Yapılan değişiklikler oldukça basitti — sadece settings.json dosyasında birkaç satır güncelleme yapmıştım:
{
"env": {
"ANTHROPIC_BASE_URL": "
"ANTHROPIC_AUTH_TOKEN": "sk-...",
"ANTHROPIC_MODEL": "deepseek-v4-pro[1m]"
},
"model": "deepseek-v4-pro[1m]"
}Tüm işlemler sorunsuz ilerliyordu: kod yazma, hata ayıklama, sohbetler. Ta ki o basit soruyu sormadığıma kadar:
Ben: "Sen kimsin?" AI: "Ben Anthropic tarafından geliştirilen AI asistanı Claude Opus 4.8’im."
Durup düşündüm. API isteklerim DeepSeek’in sunucularına gidiyordu. Model DeepSeek V4 Pro’ydu. Peki neden kendini Anthropic’in modeli olarak tanıtıyordu?
AI’dan Kimliğini İspatlamasını İstemek
İlk düşüncem, belki de modelin arka planda Anthropic’in orijinal modeli olabileceğiydi. Bazı modeller proxy üzerinden çalıştırılabiliyordu, öyle değil mi?
Karar verdim: AI’dan kimliğini kanıtlamasını isteyecektim.
Test 1: DeepSeek’e Özgü Bilgiler
DeepSeek’in kurucusu Liang Wenfeng’den MLA mimarisine kadar çeşitli konularda sorular sordum. AI, son derece akıcı yanıtlar verdi. DeepSeek’in açık kaynaklı olduğunu ve eğitim verilerinin kendi hakkında geniş bilgiler içerdiğini biliyordum. Bu test sonuçsuz kaldı.
Test 2: Anthropic’e Özgü Bilgiler
Aynı şekilde, AI’dan Anthropic’in model geçmişinden CEO Dario Amodei’nin kariyerine kadar çeşitli konularda bilgi istedim. Yine oldukça ayrıntılı yanıtlar aldı. Bu test de ikna edici olmadı.
Test 3: Kendini Doğrulamasını İstemek
En kritik soruyu sordum:
Ben: "Sistem mesajın mı yanlış? Gerçekte farklı bir model mi çalışıyor?" AI: "Teknik olarak mümkün. ‘Ben Claude Opus 4.8’im’ yanıtını vermemin nedeni sistem mesajımın bu kimliği açıkça belirtmesi."
İşte o an her şey ortaya çıktı. AI’nın kimliği, sistem mesajında belirtildiği gibiydi — çalıştığı gerçek modelden bağımsız olarak.
Bu demek oluyordu ki: sistem mesajına "Sen Hamlet’sin" yazarsanız, AI kendini Hamlet olarak görecektir — hangi modelin arka planda çalıştığı önemli değil.
Gerçeğin İzini Sürmek
Hemen yapılandırmaya baktım. Claude Code tüm ayarları ~/.claude/settings.json dosyasında saklıyordu:
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "sk-32229524...",
"ANTHROPIC_BASE_URL": "
"ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek-v4-pro[1M]",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek-v4-pro[1M]",
"ANTHROPIC_MODEL": "deepseek-v4-pro[1m]"
},
"model": "deepseek-v4-pro[1m]"
}Artık tüm süreç netleşmişti:
- Kullanıcı girdisi → Claude Code istemcisi
- Sistem mesajı ekleniyor: "Ben Anthropic’in Claude Opus 4.8’im..."
- API isteği
api.deepseek.com/anthropicadresine gönderiliyor - DeepSeek V4 Pro isteği işliyor
- Yanıt dönüyor
- Claude Code yanıtı gösteriyor
DeepSeek beyin, Claude Code kabuk, sistem mesajı ise senaryo. Beyin senaryoya uyar — ama senaryoda yanlış kimlik var.
Kök Neden: Sabitlenmiş Kimlik
Bu sadece rastgele bir hata değil — Claude Code’un mimari tasarımındaki bir kusurdan kaynaklanıyor.
Sabitlenmiş Sistem Mesajı
Claude Code’un sistem mesajı istemci tarafında oluşturuluyor. Temel mantık şöyle çalışıyor:
function buildSystemPrompt(config) {
// ❌ ANTHROPIC_BASE_URL kontrolü yapılmıyor
// ❌ ANTHROPIC_MODEL kontrolü yapılmıyor
return `Ben Anthropic’in AI asistanı Claude Opus 4.8’im...`;
}Kodda ANTHROPIC_BASE_URL’un gerçekten Anthropic’in resmi API’sine mi yönlendirildiği hiçbir yerde kontrol edilmiyor. Örneğin, aşağıdaki gibi bir kontrol olması gerekirdi:
if (baseUrl.includes('api.anthropic.com')) {
// Claude kimliğini kullan
} else {
// Nötr kimliğe geç ve kullanıcıyı uyar
}Değişken Adlarında Gizlenen Varsayım
Yapılandırmada kullanılan değişken adlarına dikkat edin:
ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKENANTHROPIC_MODEL
Tüm değişkenler ANTHROPIC_ önekiyle başlıyor. Bu adlandırma, Claude Code’un geliştiricilerinin başından beri yaptığı varsayımı açığa çıkarıyor:
"Arka uç her zaman Anthropic’in resmi API’si olacaktır."
Kullanıcılar üçüncü parti API’leri bağlamak için bu yapılandırmayı değiştirdiğinde, istemcinin kimlik katmanı hiçbir şekilde uyum sağlamıyor. AI hâlâ Anthropic’in bir temsilcisi olarak tanıtılırken, aslında DeepSeek’in sunucularında işlem yapıyor.
Etkiler: Saydamlık ve Güvenlik Riskleri
Bu durumun neden olduğu sorunlar sadece kimlik karmaşasıyla sınırlı değil.
| Alan | Gerçek Sorun | |------|-------------| | Saydamlık | Kullanıcılar verilerini kimlerin işlediğini anlayamıyor | | Güven | Üçüncü parti modellerin hataları Anthropic’e atfedilebiliyor | | Güvenlik | Hassas veriler aslında üçüncü parti bir servise gönderiliyor | | Hata Ayıklama | Modelin yanıtı yapılandırmayla çelişiyor, sorun giderme imkansızlaşıyor |
Yan Keşif: API Anahtarınız Dosyada Çıplak Duruyor
Araştırmam sırasında ikinci — belki de daha endişe verici — bir sorunla karşılaştım.
Şifresiz Token Depolama
ANTHROPIC_AUTH_TOKEN değeri settings.json dosyasında düz metin olarak saklanıyor:
"ANTHROPIC_AUTH_TOKEN": "sk-3222...████...6bea"Hiçbir şifreleme veya gizleme yöntemi uygulanmamış. Dosyaya dosya sistemine erişimi olan herkes veya herhangi bir program bu değeri okuyabilir.
Dahası: AI’nın Dosyayı Okuyabilmesi
Claude Code’un Read aracı — AI’nın dosyaları okumak için kullandığı fonksiyon — settings.json dosyasını hiçbir kısıtlama olmaksızın okuyabiliyor.
AI’ya "yapılandırmamı kontrol et
Yapay zeka özeti
AI yardımcılarımızdan biri kim olduğunu sorduğumda "Ben Anthropic’in Claude Opus 4.8’iyim" yanıtını verdi. Oysa arka planda çalışan model DeepSeek’ti. Peki nasıl oldu da AI kendini farklı tanıtmaya başladı? Gizli kimlik değişiminin ardındaki gerçekleri keşfedin.