TASARIM NOTU 0017 / AERA

Neyin doğru olduğunu söyleyemeyen denetçi

16 Eylül 2026Emir Hüseyin İnci6 dkEnglish

Aera küçük işletmeler için finans sorularını yanıtlıyor. Bir nakit akışı dosyası veriyorsun ve "iki kişi işe alırsam hangi ay beni kırar" gibi bir şey soruyorsun; bir hat işi planlıyor, Rust'ta yazılmış analiz araçlarını çağırıyor ve bir cevap yazıyor. Kullanıcıdan önceki son aşama bir critic: soruyu, taslağı ve çalışan araçların listesini okuyup PASS ya da REVISE dönen ikinci bir model geçişi.

Critic eklemek kolay kısım, ve onu işe yaramaz hale getirmek neredeyse bedava. Bir denetçiyi lastik damgadan ayıran dört karar var ve her birinin bir bedeli var.

1. Neyin doğru olduğunu da söylemiyorsa REVISE diyemez

Critic JSON dönüyor. Bir REVISE kararı, boş olmayan bir improved_answer taşımak zorunda. Karar gelip alan boşsa — ya da alan hiç yoksa — bu sert bir hata, bir yedek yol değil:

"REVISE" => {
    let improved = parsed.improved_answer
        .filter(|s| !s.trim().is_empty())
        .ok_or_else(|| AeraError::AgentExecutionError(
            "Critic REVISE dedi ama improved_answer boş".into()))?;

Reddettiğim alternatif en bariz olanıydı: denetçi itiraz ediyor ama bir şey önermiyorsa, taslağı gönder ve bir uyarı logla. O yol rahat, ve bütün amacı ters çeviriyor. Çünkü critic'in itirazının yok sayıldığı tek durum, critic'in itirazını ifade edemediği durum oluyor — yani tam olarak tuhaf bir şeyin olduğu durum.

Bir denetçi, doğrunun neye benzediğini söyleyebiliyorsa "bu yanlış" diyebilir. Aksi halde hat durur.

Bedeli gerçek: bozuk model çıktısı, sessizce bozulmuş bir cevap yerine kullanıcının gördüğü bir hataya dönüşüyor. Bir hatayı açıklamayı, aylar sonra critic'in baştan beri fail-open çalıştığını ve kimsenin fark etmediğini — çünkü cevaplar iyi görünüyordu — keşfetmeye tercih ederim.

2. Tanınmayan karar bir hatadır, geçiş değil

Aynı şekil, bir seviye yukarıda. Karar dizesi ne PASS ne REVISE ise, hat gerçekten aldığı değerle hata veriyor. Zorlamıyor, ön ekten tahmin etmiyor, varsayılan olarak geçirmiyor.

Ayrıştırılamayan bir kararda geçişe düşmek, bir denetim aşamasının sessizce gecikme vergisine dönüşme biçimidir. Her şey çalışmaya devam eder, hiçbir şey reddedilmez, ve tek kanıt ölçmediğin bir orandır.

3. Critic 0.1 sıcaklıkta koşuyor, ve bu bir duruş

// Critic deterministik olmalı, yaratıcılık değil tutarlılık hedeflenir.
let config = GenerationConfig {
    temperature: 0.1,
    top_p: 0.7,
    max_output_tokens: 2048,
    ..GenerationConfig::default()
};

Taslak aşaması biraz esneklik ister. Denetim aşaması istemez. Aynı girdiye farklı kararlar dönen bir denetçi denetçi değildir — kelime dağarcığı olan bir yazı-turadır, ve çoğunlukla haklı olması işi kötüleştirir, çünkü ona güvenirsin.

Dördü içinde en ucuzu bu ve en sık atlandığını gördüğüm de bu. Aynı generation config bir hattın her aşamasında yeniden kullanılıyor, çünkü tek bir struct — ve denetim aşaması, düzyazı için seçilmiş bir sıcaklığı miras alıyor.

4. Denetlenecek bir şey yoksa denetimi atlıyor

// Sohbet sorularında Critic pas geçilir
if tools_used.is_empty() && draft_answer.len() < 500 {
    return Ok(CriticVerdict::Pass);
}

İki koşul da sağlanmalı: hiçbir analiz aracı çalışmamış, ve taslak kısa. Bu bir selamlaşmanın ya da netleştirme sorusunun şekli. Arkasında kontrol edilecek bir hesap yok, ve "hangi dosyaya bakmamı istersin?" cümlesini denetlemek için ikinci bir modele gitmek bir tur ve bir API çağrısı demek.

Dördü içinde ilke değil sezgi olan tek karar bu, ve yanlış olma ihtimali en yüksek olan da bu. Hiçbir araç çağırmayan ama kendinden emin bir sayı söyleyen 499 karakterlik bir cevap süzülüp geçerdi. Rahat olmamın sebebi ikinci koşul değil, birincisi: araç çağrısı olmayan bir cevabın arkasında yapı gereği hesaplanmış bir rakam yoktur. Uzunluk sınırı üstüne konmuş ikinci bir tahmin, ve bu bir gün ısırırsa oradan ısıracak.

Dördünün ortak yanı

Üçü aynı kararın üç ayrı yerde uygulanmış hali: denetçinin çıktısı düzgün biçimli değilse, devam etmek yerine yüksek sesle başarısız ol. İlke olarak sıradan, pratikte şaşırtıcı biçimde nadir — çünkü tek tek her örnek gereksiz bir katılık gibi görünür, ve hepsini atlamanın toplamı hiçbir şeyi hiç reddetmemiş bir denetim aşamasıdır.

Dördüncüsü türce farklı. İçinde tahmin edilmiş bir eşik olan bir performans takası, ve tahmin olduğu yazılı.

Genel hali: bir modelin başka bir modeli denetlediği bir hatta, tasarımını karşı yapman gereken arıza denetçinin yanılması değildir. Denetçinin var görünürken yok olmasıdır. Bozuk bir denetimi geçişe çeviren her yol oraya giden bir yoldur, ve her biri makul hata yönetimi kılığında gelir.