Drift detection nasıl çalışır — fingerprint, kosinüs, eşik
Her sohbet yanıtı persona'nın voice fingerprint'ine puanlanır. Skorun içinde ne var, neden kosinüs uzaklığı, eşik neden 0.30, kurtarma (recovery) gerçekten ne yapar.
Voice drift'in en kısa özeti: kosinüs uzaklığı (cosine distance), voice fingerprint, eşik (threshold). Daha uzun hikâye daha ilginçtir — fingerprint'in içinde ne var, neden kosinüs, eşik neden varsayılan olarak 0.30, kurtarma (recovery) gerçekten ne yapar.
Bu yazıda ne anlatılıyor
- Fingerprint nasıl üretilir (50 senaryo, vektör çıkarma — embedding, ortalama)
- Kosinüs uzaklığı neden — Öklid (Euclidean) değil
- Eşik
0.30etiketli örneklemle nasıl kalibre edildi - 3 uyarı eylemi (
warn/auto_recover/block) — hangisinin ne yaptığı - Drift detection'ın ne ölçtüğü ve ne ölçmediği
Kavram sayfası: Drift detection.
Fingerprint — 50 senaryo, 1 vektör
Üretim zamanında, Moonborn persona'ya karşı 50 kısa senaryo koşar — "sürprize tepki ver", "bir yabancıya yaranı anlat", "katılmadığın bir isteği reddet". Her senaryo kısa yanıt üretir; her yanıt voyage-3-large ile vektöre dönüştürülür (embed). 50 vektör tek vektörde ortalanır. Bu voice fingerprint'tir.
Neden 50?
| Senaryo sayısı | Çalıştırmalar arası tutarsızlık | Ödünleşme |
|---|---|---|
| < 30 | Kosinüs uzaklığı > 0.10 | Gürültü baskın |
| 30–50 | < 0.05 | İdeal |
| 50 | < 0.03 | Belirleyici (deterministic) |
| 80+ | < 0.02 | Marjinal kazanç vs maliyet ($0.03 → $0.05) |
50 tatlı noktadır (sweet spot). Dahili kalibrasyon çalıştırmalarının sonucudur.
Neden ortalama, birleştirme (concatenate) değil
Tasarım aşamasında iki seçenek:
| Seçenek | Bilgi yakalama | Sorgu başına maliyet |
|---|---|---|
| Birleştirme (concatenate) (50×1024 matris) | Daha çok detay (senaryo başı aykırı değerleri — outlier — korur) | Yanıt başına 50 kat daha pahalı |
| Ortalama (1024 vektör) | Merkezi eğilim (senaryo başı detay kaybolur) | Tek kosinüs, ucuz |
Sohbette her yanıt skorlanır. Ortalamanın amortisman kazancı büyüktür. Ortalama seçildi. Bilgi kaybı düşündüğümüzden azdı: drift'in tam ölçtüğü şey merkezi eğilimdir.
Skor — kosinüs uzaklığı
Bir sohbet yanıtı geldiğinde, aynı embed modeli:
drift = 1 - dot(reply_embedding, fingerprint) / (||reply|| × ||fp||)Aralık [0, 1]:
| Skor | Anlam |
|---|---|
0 | Ortalama ile özdeş (teorik) |
0.10–0.20 | Normal varyans, seste |
0.30 (varsayılan eşik) | Drift sınırı |
0.50+ | Ciddi kayma |
1 | Dik (orthogonal); gerçek yanıtlarda görünmez |
Gerçek yanıtlar 0.1–0.4 aralığında kümelenir.
Neden kosinüs, Öklid değil
| Metrik | Sorun |
|---|---|
| Öklid (Euclidean) | Büyüklüğe duyarlıdır — iki kat uzun yanıt iki kat ses-dışı (off-voice) DEĞİLDİR ama Öklid böyle okur |
| Kosinüs | Açı ölçer — büyüklük kirlenmesi olmadan anlamsal alanda yön yakalar |
Voice fingerprint makaleleri (Bommasani vd. 2023, diğerleri) tutarlı olarak kosinüs kullanır. Aynı sebep.
Eşik — neden 0.30
Elle etiketlemeden indirildi:
1. 50 değerlendirici, 500 sohbet yanıtını "seste" veya "ses-dışı" etiketler
2. Tüm yanıtlar için drift skorunu hesapla
3. Etiketlere karşı F1'i (F1 skoru) maksimize eden kosinüs eşiğini bul
4. Sonuç: 0.30Daha sıkı eşikler (0.20) daha çok meşru drift yakalar ama iyi yanıtı işaretler. Daha gevşek (0.40) insanların net çağırdığı drift'i kaçırır.
Hedef kitleye göre ayar
| Çalışma alanı tipi | Önerilen threshold |
|---|---|
| Müşteri desteği, düzenlemeye tabi ses | 0.20 (sıkı) |
| Genel ürün sohbeti | 0.30 (varsayılan) |
| Yaratıcı yazım, açık uçlu sohbet | 0.45 (gevşek) |
Persona başına geçersiz kılma: çalışma zamanı sözleşmesi üzerinden.
3 uyarı eylemi
engine.pipeline.drift_detection.action_on_alert:
warn (varsayılan)
Yanıt gider, uyarı kaydedilir, webhook tetiklenir. Üretimde yalnızca-gözlem (observe-only) başlamak için idealdir.
auto_recover
Moonborn fingerprint'i yeniden enjekte ederek bir kez yeniden üretir; hangisi daha düşük skorluyorsa onu gönderir.
Maliyet: uyarı başına ek LLM çağrısı (~$0.005-0.02)
Tetikleyici: üretimde yanıtların ~%5'i (çalışma alanı tipine göre)
Sonuç: yeniden üretilen yanıtın ~%80'i eşiğin altındaDestek yüzeyleri için değerli bir bütçe. Müşteri drift'i fark etmez; sessizce düzeltilir.
block
Yanıt dönmez; istemci 409 Conflict alır. Uyumluluk açısından kritik (sağlık, finans, hukuk) çalışma alanlarında anlamlıdır. Arayüzde yedek (fallback) gösterilmiyorsa kullanıcı "bot bozuldu" der — kullanıcı deneyimi tasarımı kritiktir.
Drift'in ölçtüğü ve ölçmediği
Ölçer
- Kayıt drift'i (register drift) — resmi persona argo (slang) kullanmaya başladı
- Konusal drift (topical drift) — konu değişince ses değişen karakter (sistem isteminin otoritesi soluyor)
- Sağlayıcı model drift'i (provider model drift) — Opus → Sonnet ses yüzeyini değiştirir
- Uzun bağlam çürümesi (long-context decay) — geçmiş büyüdükçe persona genele (generic) drift eder