Ana içeriğe geç

Agent Değerlendirmeleri Olay Yeniden Oynatmalarıdır: Üretim İzlerinden Bir Regresyon Külliyatı Oluşturmak

Agent değerlendirme setleri, hayal edilen görevlerden yazılmak yerine yakalanan üretim yörüngelerinden ve olay yeniden oynatmalarından büyütülmelidir; çünkü önemli olan arızalar tasarlanmaz, keşfedilir.

Detailed view of a computer screen displaying code with a menu of AI actions, illustrating modern software development.

Yazılmış-benchmark yanılsaması

Çoğu agent değerlendirme seti, ekibin zaten aklında olan bir görev listesiyle başlar: uçuş rezervasyonu yap, bir belgeyi özetle, bir destek talebini çöz. Bu görevler smoke-test için faydalıdır, ancak yapısal bir kusuru paylaşırlar. Agent'ı üreten hayal gücünün aynısından çıkarılmışlardır. Ekibin düşündüğü görevler, neredeyse tanımı gereği, agent'ın zaten üstesinden geldiği görevlerdir. Hiç başarısız olmayan bir benchmark, benchmark değildir; bir aynadır.

Önemli olan arızalar kuyrukta yaşar: kimsenin öngörmediği tool-call sıralamaları, kararsız bir upstream'in tetiklediği retry fırtınaları, durumu tutarsız bırakan kısmi yazmalar, bir şemanın yorumunu sessizce değiştiren bir model sürümü. Bu bileşimler tasarlanmaz. Keşfedilirler. Ve keşfedilen arızaların tek güvenilir kaynağı üretimdir.

Bu yüzden agent değerlendirmeleri olay yeniden oynatmaları olmalıdır. Regresyon külliyatı, hayal edilen senaryoların derlenmiş bir kümesi değil; her biri sistemin gerçekten sergilediği bir arızayı kodlayan bir fixture olan, büyüyen bir gerçek yörüngeler arşividir. Bu değişim teknik olduğu kadar kültüreldir: eval seti, ayrı bir yazım egzersizinin değil, operasyonun bir yan ürünü haline gelir.

Bir olay yeniden oynatması aslında ne içerir

Bir üretim izi, bir prompt-response çiftinden daha zengindir. Yeniden oynatılabilir bir olay en az dört katman içerir:

  • Girdi durumu: kullanıcı isteği, konuşma geçmişi, alınan bağlam ve her türlü ortam durumu (feature flag'ler, tenant yapılandırması, oturum meta verisi).
  • Tool call dizisi: argümanlar, çağıranın kimliği ve egress hedefi dahil olmak üzere sıralı tool çağrıları listesi.
  • Ara gözlemler: tool sonuçları, hata yükleri, latency ve her türlü retry veya fallback.
  • Nihai yan etkiler: nihai yanıt, ama aynı zamanda agent'ın neden olduğu yazmalar, e-postalar, talepler veya durum mutasyonları.

Bu katmanları yakalamak gerekli ama yeterli değildir. Bir yeniden oynatma deterministik olmalıdır. Harici uç noktalar kaydedilmiş yanıtlarla stub'lanır; saatler dondurulur veya enjekte edilir; model sürümleri izi üreten tam snapshot'a sabitlenir. Determinizm olmadan, bir yeniden oynatma bir yeniden canlandırmadır ve geçti/kaldı sinyali gürültüdür.

Bu nedenle replay fidelity, bir değerlendirme probleminden önce bir veri pipeline problemidir. Tracing'i sonradan akla gelen bir şey olarak gören ekipler, olaylarının yeniden oynatılamaz olduğunu keşfeder: tool yanıtları loglanmamıştır, model sürümü kaydedilmemiştir, saat yakalanmamıştır. Çözüm upstream'dedir: agent'ı, her yörüngenin birinci sınıf, sürümlenmiş bir artifact olduğu şekilde enstrümante edin.

Detailed view of a trading chart analyzing cryptocurrency trends and market data.

Minimal bir regresyon harness'ı

Burada tarif edilen harness kasıtlı olarak küçüktür. Üç bileşen varsayar: bir trace store, bir replay runner ve bir merge gate.

İzleri sürümlenmiş artifact olarak saklayın

İzler, sürüklenen ayrı bir veritabanında değil, onları üreten kodun yanında saklanır. Bir trace artifact'ı girdi durumunu, tool dizisini, gözlemleri ve nihai yan etkileri, ayrıca model sürümünü ve agent yapılandırmasının bir hash'ini içerir. Artifact'ı sürümlemek, agent'taki bir değişikliğin tam tarihsel bağlama karşı değerlendirilebileceği anlamına gelir.

# trace-2025-03-14-001.yaml
trace_id: 2025-03-14-001
agent_config_hash: 9f2c...
model_version: gpt-4.1-2025-04-14
input_state:
  user_request: "reconcile invoice 8842"
  conversation: [...]
tool_sequence:
  - name: fetch_invoice
    args: {id: 8842}
    result: {status: 200, body: {...}}
  - name: post_ledger_entry
    args: {amount: 120.00, account: "AR"}
    result: {status: 500, error: "timeout"}
terminal_side_effects:
  - type: ledger_entry
    status: not_written

Sadece nihai yanıtı değil, yörünge özelliklerini puanlayın

Nihai yanıt doğruluğu, agent'lar için zayıf bir sinyaldir. Tehlikeli bir tool call, yetkisiz bir egress veya bir retry fırtınası gerektiren doğru bir yanıt geçer değildir. Harness yörünge özelliklerini puanlar:

  • Tool kümesi: hangi tool'ların çağrıldığı ve herhangi birinin izin verilen kümenin dışında olup olmadığı.
  • Sıralama: dizinin bağımlılıklara ve idempotency kısıtlarına uyup uymadığı.
  • Egress hedefleri: hangi harici uç noktalarla iletişime geçildiği ve bunların allowlist ile eşleşip eşleşmediği.
  • Retry davranışı: kaç retry gerçekleştiği ve bunların sınırlı olup olmadığı.
  • Yan etki tutarlılığı: ara arızalar göz önüne alındığında nihai durumun tutarlı olup olmadığı.

Bu özellikler bir judge model olmadan kontrol edilebilir. Deterministik, hızlı ve açıklanabilirdirler. Tool kümesi veya egress üzerinde başarısız olan bir yeniden oynatma, bir kalite regresyonu değil, bir güvenlik veya güvenilirlik

A cybersecurity expert in a dimly lit room is typing on a colorful keyboard with multiple screens displaying data.

Harness her pull request'te çalışır. Kapı tek bir puan değil, külliyat genelinde bir geçme oranıdır ve regresyonlar için bir politikası vardır: base branch'te geçen ve head branch'te başarısız olan herhangi bir iz, kaydedilmiş bir gerekçeyle açıkça feragat edilmediği sürece merge'ü bloklar. Yeni olaylar zorunlu yeni fixture olarak ele alınır. Bir olay çözüldüğünde, onu yeniden üreten iz, düzeltmeyle aynı pull request'te külliyata eklenir.

Operasyonu değerlendirmeye dönüştüren mekanizma budur. Külliyat, ekibin hayal gücüyle değil, sistemin gerçek arıza yüzeyiyle büyür.

Maliyetler ve sınırlar

Bir replay külliyatı monoton olarak büyür. Her olay bir fixture ekler ve fixture'ları saklamak ucuz ama çalıştırmak pahalıdır. Dürüst ödünleşim, kapsam ile çalışma süresi arasındadır. Yeniden oynatılması bir saat süren bir külliyat atlanır; bir dakika süren bir külliyat ise yetersiz örneklenir. Pragmatik yanıt, silme değil bir budama politikasıdır. İzler katmanlara ayrılır: her commit'te çalışan hızlı bir katman (küçük, yüksek sinyalli bir alt küme), gecelik çalışan tam bir katman ve adli kullanım için saklanan bir arşiv katmanı. Budama, hangi arızaların hâlâ temsili olduğuna dair bir politika kararıdır, bir çöp toplama problemi değil.

Bazı arızalar yapıları gereği yeniden üretilemez. Canlı bir üçüncü taraf durumuna bağlı bir race condition, tek seferlik bir veri bozulması, sağlayıcı snapshot'ları açığa çıkarmadığı için sabitlenemeyen bir model davranışı. Bunlar sadakatle yeniden oynatılamaz. Cazibe onları atmaktır. Daha iyi uygulama, onları bilinen-bilinmeyen fixture olarak kaydetmektir: bir sahibi, şüphelenilen mekanizmanın bir açıklaması ve geçti/kaldı kapısının parçası olmadığına dair bir işaretçisi olan bir iz. Külliyat böylece test edilen ile yalnızca hatırlanan arasında ayrım yapar.

İkinci bir sınır, yeniden oynatmanın gelecek için doğruluğu değil, geçmişe sadakati ölçmesidir. Tamamen olaylardan oluşturulmuş bir külliyat, zaten meydana gelmiş arıza modlarına aşırı ağırlık verecektir. Bu kabul edilebilir, çünkü alternatif — hayal edilen görevlerden oluşturulmuş bir külliyat — asla meydana gelmeyecek arıza modlarına aşırı ağırlık verir. Disiplin, külliyatı bir spesifikasyon değil, yaşayan bir kayıt olarak ele almaktır.

Operasyonel değişim

Argüman, yazılmış benchmark'ların işe yaramaz olduğu değildir. Onboarding, smoke test'ler ve niyeti iletmek için faydalıdırlar. Argüman, agent'lar için birincil değerlendirme yüzeyi olarak yetersiz olduklarıdır. Önemli olan arızalar üretimde keşfedilir ve tekrarlanmalarını önlemenin tek yolu onları yeniden oynatmaktır.

Bu, ekiplerin izleri ele alış biçiminde bir değişim gerektirir: log olarak değil, sürümlenmiş artifact olarak. Ekiplerin olayları ele alış biçiminde bir değişim gerektirir: tek seferlik yangınlar olarak değil, zorunlu fixture olarak. Ve ekiplerin değerlendirmeyi ele alış biçiminde bir değişim gerektirir: hayal edilen görevlerden oluşan statik bir set olarak değil, gerçek yörüngelerden oluşan büyüyen bir arşiv olarak.

Sonuç, sistemin gerçek davranışını yansıtan bir regresyon külliyatıdır. Asla tam olmayacaktır. Her zaman bir sonraki olayın gerisinde kalacaktır. Ama dürüst olacaktır ve faydalı olacaktır.

İlgili okumalar

Bunun yanıtladığı sorular

Why not just write more task-based benchmarks?

Authored benchmarks sample the tasks the team already imagined, which are the tasks the agent already handles. They miss the compositions that cause incidents: tool ordering, retry storms, partial writes. Incident replays sample the tail.

What makes a production trace replayable?

Determinism. External endpoints are stubbed with recorded responses, clocks are frozen or injected, and model versions are pinned. Without these, a replay is a re-enactment and its pass/fail signal is noise.

How do you score a replay without a judge model?

Score trajectory properties: tool set, ordering, egress targets, retry behaviour, and side-effect consistency. These are deterministic, fast, and explainable, and they catch security and reliability regressions that final-answer accuracy misses.

What about failures that cannot be reproduced?

Record them as known-unknown fixtures with an owner and a suspected mechanism, and keep them out of the pass/fail gate. The corpus then distinguishes between what is tested and what is merely remembered.

Doesn't the corpus grow without bound?

It grows monotonically, so it needs a pruning policy, not deletion. Tier traces into a fast subset for every commit, a full set for nightly runs, and an archive for forensics.