Ana sayfa → Teknik
Prompt ve Model Sürümü: Metin Değil, Kod
“Prompt’u küçük bir düzelttim” dedi arkadaşım, Perşembe 15:40. Admin ekranındaki kutuya yazdı, kaydetti; canlı o saniye değişti. Ertesi gün cevaplar tuhaflaşınca sorduk: ne değişmişti? Kimse bilmiyordu. Ne eski metin duruyordu, ne kimin değiştirdiği, ne de saati. Prompt bir metin kutusundaydı; oysa yaptığı iş deploy’du.
- Prompt metin gibi görünür, davranış belirler: koddur. Repo’da durur; sürüm geçmişi, inceleme, geri alma ve eval bedavaya gelir.
- Prompt değişikliği bir deploy’dur. Admin kutusundan yapılan düzeltme, kaydı olmayan bir deploy’dur; en tehlikelisi de budur.
- Model sürümü sabitlenir. “En yenisi”, kimsenin onaylamadığı bir değişikliğin bir sabah canlıya girmesidir.
- Davranışı üç şey birlikte üretir: prompt, model ve tool şeması. Üçünün sürümü tek bir “agent sürümü” altında kayıtlıdır ve her koşuda ize yazılır.
- Gölge koşu en ucuz güvencedir. Yeni sürüm gerçek trafikle çalışır, cevabı kullanıcıya gitmez; iki sürüm yan yana karşılaştırılır.
- Geri alma eşiği önceden yazılır. Üç sayı: eval puanı, olumsuz geri bildirim oranı, koşu başına token. Eşik aşıldığında tartışma değil, işlem olur.
Prompt neden kod?
Bir fonksiyonun gövdesini değiştirmek deploy gerektiriyor; aynı davranışı değiştiren bir cümleyi değiştirmek gerektirmiyorsa, ikisi arasındaki fark teknik değil, sadece alışkanlık. Eval yazısındaki olay bunun kanıtıydı: tek kelime, dört bozuk soru.
| Repo’da prompt | Admin ekranında prompt | |
|---|---|---|
| Kim değiştirdi | git blame | Belki bir log satırı |
| Ne değişti | git diff | Eski metin yoksa hiçbir şey |
| İnceleme | PR | Yok |
| Eval | CI’da zorunlu | Hatırlanırsa |
| Geri alma | revert, 2 dk | Eski metni hatırlayana kadar |
| Hız | Pipeline kadar (bizde 6 dk) | Anında |
Son satır, admin ekranını savunanların tek gerçek argümanı: hız. Biz şöyle uzlaştık: prompt repo’da, ama canlıya alma pipeline’ı 6 dakika. Acil bir düzeltme gerektiğinde 6 dakika beklenebiliyor; bekleyemeyecek kadar acil bir şey varsa çözüm prompt değil, akıştaki bir bayrak: o adımı kapat, sonra düzgün düzelt.
Neyi sürümlüyoruz?
Agent’ın davranışını tek başına prompt belirlemiyor. Üç şey birlikte çalışıyor ve üçü de sürümlü:
agent_surum: 14
prompt:
system: prompts/system_v9.md # sha 3f21a7
ozet: prompts/ozet_v4.md # sha 88c1de
model:
ad: qwen3:4b
etiket: q4_K_M # "latest" YOK
sha: 9b7e2c...
tool_semasi: tools/v6.json # 9 tool
akis: flows/mutabakat_v3.py
esikler:
eval_tool_secimi_min: 60 # 60/60, dusmesi yasak
geri_bildirim_oran_max: 0.08
kosu_basi_token_max: 42000
Bu dosyanın tek bir işlevi var: “dün ile bugün arasında ne değişti” sorusunu tek
dosyada cevaplamak. Her koşunun izine agent_surum: 14 yazılıyor; bir şikâyet
geldiğinde önce bu numaraya bakılıyor.
Model sürümü: “latest” yasak
Model etiketini sabitlemek, bağımlılık sürümünü sabitlemekle aynı sebepten: kimsenin onaylamadığı bir değişiklik bir sabah canlıya girmesin diye. Bizde bir kez oldu: yerel model dosyası güncellendi, etiket aynı kaldı, davranış değişti ve iki gün “prompt’ta ne yaptık” diye aradık. Artık dosyanın hash’i de sürüm dosyasında; farklıysa agent açılışta uyarıyor.
Yeni sürüm nasıl çıkar?
Dört adım, sırayla. Hiçbiri atlanmıyor:
| Adım | Ne yapılır | Geçme şartı |
|---|---|---|
| 1. Eval | Tam set, CI’da | Tool seçimi ve argüman puanı düşmeyecek |
| 2. Gölge | Gerçek trafik, cevap kullanıcıya gitmez | 48 saat; iki sürümün farkı incelenmiş olacak |
| 3. Kısmi | Trafiğin %20’si (iç kullanıcılar) | 3 gün; geri bildirim oranı eşiğin altında |
| 4. Tam | %100, eski sürüm bir hafta ayakta | Geri alma bir konfigürasyon satırı |
Gölge koşu neden en değerli adım?
Eval seti 60 maddedir; gerçek trafik günde 200 sorudur ve içinde setin hiç düşünmediği cümleler vardır. Gölge modda yeni sürüm aynı soruları alır, cevabı bir yere yazılır, kullanıcıya gitmez. Sonra iki cevap karşılaştırılır. Bizim ilk gölge koşumuzun 48 saatlik özeti:
| Sonuç | Adet | Not |
|---|---|---|
| Aynı tool, aynı sayı | 371 | Sorun yok |
| Aynı tool, farklı metin | 29 | Elle bakıldı: 26’sı daha iyi |
| Farklı tool | 7 | 5’i yeni sürüm lehine, 2’si aleyhine |
| Hata / zaman aşımı | 3 | Model sunucusu yeniden başladı |
Aleyhte olan 2 soru sete girdi, prompt düzeltildi, gölge tekrar koştu. Eval’in yakalayamadığı şeyi gölge yakaladı; gölgenin yakalayamayacağı şeyi de kısmi çıkış yakalar. Katmanlar birbirinin yedeği.
Geri alma: eşiği önceden yaz
Geri alma kararının en kötü anı, kararın verildiği andır: herkes yorgun, herkesin bir hikâyesi var. Bu yüzden eşikler sürüm dosyasında, önceden yazılı:
- Eval tool seçimi puanı bir puan bile düşerse sürüm çıkmaz (çıkış öncesi kapı).
- Olumsuz geri bildirim oranı iki katına çıkarsa geri alınır (canlıda).
- Koşu başına ortalama token %30’dan fazla artarsa geri alınır — sebebi incelenir, sonra tekrar denenir.
Geri alma agent_surum: 13 yazıp servisi yeniden yüklemek: 2 dakika. Eski sürüm zaten
ayakta olduğu için model yeniden indirilmiyor, prompt yeniden derlenmiyor.
Çökme modları yazısındaki kural burada da geçerli: geri dönüş
yolu, gidiş yolundan daha iyi test edilmiş olmalı.
Sahadan: üç sürüm, üç ders
| Sürüm | Değişiklik | Sonuç |
|---|---|---|
| v9 | System prompt’ta tek kelime | Eval’de tool seçimi 58/60 → çıkmadı, düzeltildi |
| v11 | Özet prompt’una “rakamları tabloya koy” | Gölgede 29 metin farkı, 26’sı iyi → çıktı |
| v12 | Model dosyası güncellendi (etiket aynı) | Fark edilmedi, 2 gün prompt arandı → artık hash kontrolü var |
| v13 | Tool şeması: 23 tool → 9 | Eval 71% → 94%; kısmi çıkışta 3 gün, sorun yok |
| v14 | Akışa fren eklendi | Token %18 düştü, geri bildirim değişmedi |
v12 en öğretici olanı: değişikliği biz yapmadık, ama davranış değişti. “Bir şey değiştirmedik” cümlesi, sürümler yazılı değilse hiçbir şey ifade etmiyor.
- Prompt’u repo’da tut, PR ile değiştir.
- Model etiketini ve dosya hash’ini sabitle.
- Prompt + model + tool şemasını tek sürüm numarasına bağla.
- Sürüm numarasını her koşunun izine yaz.
- Gölge koşuyu 48 saat çalıştır, farkları elle oku.
- Geri alma eşiklerini önceden yaz, eski sürümü ayakta tut.
- Prompt’u admin kutusundan “küçük bir düzeltme” ile değiştirmek.
- Model etiketini “latest” bırakmak.
- Prompt ile tool şemasını aynı anda değiştirip tek sonuca bakmak.
- Gölge adımını “eval yeşil” diye atlamak.
- Geri alma kararını olay anında tartışmak.
Ne izlemeli?
- Sürüm başına eval skoru. Tool seçimi, argüman, sayı ayrı ayrı.
- Gölge fark oranı. Farklı tool seçilen soru yüzdesi; %2’nin üstü dikkat ister.
- Sürüm yaşı. Canlıdaki sürüm kaç günlük? Çok eskiyse değişiklikler birikiyordur.
- Geri alma sayısı ve süresi. Sayı sıfırsa ya çok iyisin ya da eşikler gevşek.
- Sürümsüz değişiklik sayısı. İzde
agent_surumboş görünen koşu var mı? Olmamalı. - Pipeline süresi. 10 dakikayı aşarsa insanlar admin kutusu aramaya başlar.
Kontrol listesi
- Prompt nerede duruyor: repo mu, veritabanı mı?
- Kim değiştirdi, ne değişti, ne zaman — üçü de kayıtlı mı?
- Model etiketi sabit mi? Dosya hash’i kontrol ediliyor mu?
- Prompt, model ve tool şeması tek sürüm numarasına bağlı mı?
- Sürüm numarası koşu izine yazılıyor mu?
- Eval CI’da kapı mı, uyarı mı?
- Gölge koşu var mı? Kaç saat, farkları kim okuyor?
- Kısmi çıkış hangi kullanıcılarla başlıyor?
- Geri alma eşikleri yazılı mı? Kaç sayı?
- Geri alma kaç dakika sürüyor? Denediniz mi?
- Eski sürüm ne kadar süre ayakta kalıyor?
Sonuç
O perşembe yapılan “küçük düzeltme” bir deploy’du; kaydı olmayan, incelemesi olmayan, geri alınamayan bir deploy. Ertesi gün cevapları tartışırken elimizde tek bir bilgi yoktu: ne değiştiğini bilmiyorduk. Yazılımda bu kabul edilmez bir durum; prompt söz konusu olduğunda nedense normal karşılanıyor.
Şimdi prompt repo’da, model etiketi sabit, üçü tek sürüm numarasına bağlı ve her koşunun izinde o numara var. Yeni sürüm dört kapıdan geçiyor: eval, gölge, kısmi, tam. Geri alma iki dakika. Bunların hiçbiri yeni bir fikir değil; hepsi servislerde yıllardır yaptığımız şeyler.
Akılda kalacak cümle: davranışı değiştiren her şey sürümlüdür. Prompt davranışı değiştiriyorsa prompt da sürümlüdür; metin olması onu masum yapmıyor.