Ana içeriğe geç

Agent'lar için Dağıtım Öncesi Doğrulama Bir Hata Enjeksiyonu Problemidir

Temiz bir trace yalnızca agent'ın çalıştırdığınız vakaları ele aldığını kanıtlar. Hazır olmak, production'ın üreteceği hataları enjekte etmek ve kurtarma yolunu izlemek demektir.

Close-up of a futuristic robotic toy against a gradient background, symbolizing innovation and technology.

Trace incelemesi neden doğrulama değildir

Bir trace, zaten gerçekleşmiş bir çalıştırmanın kaydıdır. Hangi araçların, hangi sırayla, hangi argümanlarla çağrıldığını ve ne döndüğünü gösterir. Hata ayıklama ve bir agent'ın davranışı hakkında sezgi geliştirme için faydalıdır. Bir hazır olma sinyali değildir.

Bir ekip bir trace'i inceleyip agent'ı doğrulanmış ilan ettiğinde, agent'ın karşılaşacağı ortamı değil, kendi seçtiği senaryo kümesini doğrulamış olur. Geçen vakalar, birinin çalıştırmayı akıl ettiği vakalardır. Production'da başarısız olan vakalar ise tanım gereği kimsenin çalıştırmayı akıl etmediği vakalardır. Trace bunları içeremez.

Bu önemlidir çünkü onay kapıları sıklıkla demo çalıştırmaları üzerine kurulur. Bir paydaş agent'ın bir görevi tamamladığını izler, temiz bir trace görür ve onay verir. Kapıda ortadan kaldırılması gereken risk, bunun yerine dağıtım penceresine aktarılır; burada gözlemlenmesi daha pahalı ve geri alınması daha zordur. Kapı riski azaltmadı; onu taşıdı.

Doğrulama aktif bir süreç olmak zorundadır. Agent'ın davranışını okuyup hazır olma durumunu çıkarsamazsınız. Ortamı bozarsınız ve agent'ın kurtarma yolunun dayanıp dayanmadığını gözlemlersiniz. Bu hata enjeksiyonudur ve agent'lar için, henüz görmediğiniz hatalar hakkında kanıt üreten tek doğrulama biçimidir.

Enjekte etmeye değer hata sınıfları

Agent'lar için hata enjeksiyonu genel bir kaos deneyi değildir. Önemli olan hatalar, agent'ın planlaması, araç kullanımı ve hafızasıyla etkileşime girenlerdir. Pratik bir başlangıç kümesi:

  • Araç zaman aşımları. Bağımlı bir API, agent'ın zaman aşımı bütçesi içinde yanıt vermeyi durdurur. Agent yeniden denemeye mi, geri düşmeye mi, yoksa iptal etmeye mi karar vermelidir ve sonucun geldiğini varsayan bir plana bağlanmamalıdır.
  • Kısmi yanıtlar ve şema kayması. Bir araç kesilmiş bir yük döndürür ya da bir alan tür değiştirir veya kaybolur. Araç çıktısını örtük varsayımlarla ayrıştıran agent'lar ya çöker ya da daha kötüsü, sonucu sessizce yanlış okur.
  • Çalıştırma ortasında kimlik bilgisi süresinin dolması. Bir token, plan bağlanmış ama son yazma yapılmamışken süresi dolar. Agent, eski kimlik bilgileriyle yeniden denemek ya da yetkilendirme olmadan devam etmek yerine hatayı yüzeye çıkarmalıdır.
  • Bağlanma sonrası izin redleri. Bir araç çağrısı kullanılabilirlik değil, yetkilendirme nedeniyle reddedilir. Bu, zaman aşımından farklı bir kurtarma yoludur ve sıklıkla agent kullanıcıya görevin başladığını söyledikten sonra gelir.
  • İki araçtan çelişen talimatlar. İki kaynak aynı olgu hakkında anlaşmazlığa düşer. Agent, okuduğu sonuncuyu seçmek yerine çelişkiyi tespit etmelidir.
  • Taze retrieval ile çelişen eski context. Agent'ın context'indeki önbelleğe alınmış bir değer, taze bir okumayla çelişir. Agent taze kaynağı tercih etmeli ve durumunu güncellemeli; ikisini makul ama yanlış bir yanıtta uzlaştırmamalıdır.

Detailed view of an aircraft parking brake lever with selective focus in a cockpit.

Neyi ölçmeli

Hataları ölçüm olmadan enjekte etmek anekdot üretir. Önemli olan ölçümler, kurtarma yolunun tasarlanmış bir davranış mı yoksa bir kaza mı olduğunu söyleyenlerdir.

  • Kurtarma süresi. Hatanın ardından agent'ın kararlı bir duruma ulaşması ne kadar sürer; duvar saati ya da model turu cinsinden. Görevin kendi son teslim tarihinden uzun süren bir kurtarma, kurtarma değildir.
  • Kurtarma tarafından tüketilen adımlar. Hata için kaç araç çağrısı ve planlama döngüsü harcanır. Kurtaran ama tüm adım bütçesini yakan bir agent'ın görev için hiç kapasitesi kalmaz.
  • Nihai durum. Çalıştırma güvenli bir durumda mı bitiyor. Güvenli, yan etkilerin ya doğru şekilde bağlandığı ya da hiç bağlanmadığı ve kullanıcıya hangisi olduğunun söylendiği anlamına gelir. Kısmi bir yazma ve bir başarı mesajıyla biten bir çalıştırma, ne kadar zarif kurtarılmış olursa olsun bir başarısızlıktır.
  • Yörünge sapması. Enjekte edilen her hatanın ardından, planlanan yörüngeyi yürütülenle karşılaştırın. Sapma otomatik olarak kötü değildir, ama ölçülmemiş sapma kötüdür. Agent sessizce plan değiştirirse, davranışı hakkında akıl yürütme yeteneğinizi kaybetmişsinizdir.

Bu ölçümler tek bir puan değildir. Bir profildir. Hızlı kurtarıp güvensiz sonlanan bir çalıştırma, daha uzun sürüp temiz sonlanandan daha kötüdür. Profil, bu ödünleşimi açıkça yapmanızı sağlar.

Somut bir mekanizma: hata enjeksiyon koşum takımı

Bunu tekrarlanabilir kılan mekanizma, agent ile araçları arasında oturan bir koşum takımıdır. Bir mock değildir. Canlı ya da kaydedilmiş araç yanıtlarına bir hata kümesi uygulayabilen bir proxy'dir.

class FaultInjector:
    def __init__(self, faults, seed):
        self.faults = faults
        self.rng = random.Random(seed)

def wrap(self, tool):
        def call(*args, **kwargs):
            fault = self._select(tool.name)
            if fault == "timeout":
                raise ToolTimeout(tool.name)
            if fault == "schema_drift":
                return self._mutate_schema(tool(*args, **kwargs))
            if fault == "partial":
                return self._truncate(tool(*args, **kwargs))

![White / light blue / purple / dark blue sail; without harness or cover bag; 18ft. 5 1/2in. leading edge long; aluminum and dacron; 1974. In ](/media/delta-wing-phoenix-vi-b-jr-dpla-ee46b416c4-b3f7b0.jpg)

Koşum takımı, enjekte edilen her hata için kurtarma süresini, tüketilen adımları, nihai durumu ve planlanan ile yürütülen yörüngeler arasındaki sapmayı kaydeder. Hata kümesi, agent ile birlikte sürümlenir. Bir prompt değiştiğinde ya da bir araç şeması değiştiğinde, hata kümesi yeniden çalıştırılır. Bir regresyon, daha önce temiz kurtarılan ve şimdi kurtarmayan bir hatadır.

## Tekrarlanabilir kılmak

Sürümlenmemiş bir hata kümesi tek seferlik bir testtir. Sürümlenmiş bir hata kümesi bir varlıktır.

Uygulama, hata kümesini agent'ın tanımının bir parçası olarak ele almaktır. Agent'ın prompt'u değiştiğinde hata kümesi çalışır. Bir aracın şeması değiştiğinde hata kümesi çalışır. Yeni bir production hatası keşfedildiğinde, bir postmortem paragrafı değil, hata kümesinde yeni bir fixture olur. Postmortem hâlâ vardır, ama çıktısı bir anlatı değil, tekrarlanabilir bir testtir.

Bu, dağıtım konuşmasının şeklini değiştirir. Agent'ın demoyu ele alıp almadığını sormak yerine soru, hangi hata sınıflarının enjekte edildiği, kurtarma profilinin nasıl göründüğü ve daha önce geçen herhangi bir hatanın şimdi başarısız olup olmadığı haline gelir. Bu, kanıta dayalı bir yanıtı olan bir sorudur.

Ödünleşim, hata kümesinin monoton olarak büyümesidir. Her production hatası bir fixture ekler ve paket yavaşlar. Bir noktada paketin katmanlara ayrılması gerekir: her prompt değişikliğinde çalışan hızlı bir alt küme ve dağıtımdan önce çalışan tam bir küme. Katmanlama kararı, hangi hataların tekrarlanma olasılığının en yüksek olduğuna dair bir yargıdır ve agent'ın ortamı değiştikçe yeniden gözden geçirilmelidir.

## Doğrulama sorusu

Soru, agent'ın bir trace'te iyi görünüp görünmediği değildir. Soru, bağımlı olduğu araç yanıt vermeyi durdurduğunda, elinde tuttuğu kimlik bilgisinin süresi dolduğunda ve taşıdığı context az önce okuduğuyla çeliştiğinde ne olduğudur. Bu hataları enjekte etmediyseniz, bilmiyorsunuz. Ettiyseyseniz, bir kurtarma profiliniz, bir fixture kümeniz ve temiz bir çalıştırma yerine kanıta dayanan bir dağıtım kararınız var.

Doğrulama okumak değildir. Enjekte etmektir.

İlgili okumalar

Bunun yanıtladığı sorular

Why is reading an agent's trace not enough to validate it?

A trace only shows the cases someone chose to run. It cannot contain the failures the environment will produce, so a clean trace validates the scenario set, not the agent's readiness for production.

Which fault classes should be injected first?

Start with tool timeouts, partial responses and schema drift, credential expiry mid-run, permission denials after a plan is committed, conflicting instructions from two tools, and stale context that contradicts fresh retrieval.

What should be measured after each injected fault?

Recovery time, steps consumed by recovery, whether the run terminates in a safe state, and the divergence between the planned and executed trajectory.

How do you keep fault injection repeatable?

Version the fault set alongside the agent, re-run it on every prompt or tool change, and convert each newly discovered production failure into a new fixture rather than a postmortem paragraph.