Araç sözleşmesi, hata dönüşü ve idempotans
Bir aracın girdi şemasını sınırda doğrulamayı, modelin düzeltebileceği hata dönüşleri tasarlamayı ve yeniden çağrıldığında tek yan etki üretmesi için idempotans anahtarı kurmayı öğretir.
Önkoşul: AI Agent
BU DERSİN SONUNDA
- Araç girdisini sınırda doğrulayan bir şema tasarlamak
- Hata dönüşlerini modelin düzeltebileceği biçimde sınıflandırmak
- Yan etkili araçlara idempotans anahtarı yerleştirmek
- Belgelenmiş davranış ile gerçek davranış farkını sözleşme testiyle yakalamak
- 1
Teori
Kavramın çalışma mantığı
- 2
Örnek
Gerçek bir senaryo üzerinde gösterim
- 3
Lab
Uygulamalı alıştırma
- 4
Test
Kısa ölçüm
- 5
Proje
Rotadaki projeye katkı
Kısa cevap
Araç sözleşmesi iki taraflı bir anlaşmadır: modele gösterilen şema metni ve çalışma zamanında girdiyi kabul eden doğrulayıcı. Araç kaynaklı bir arızada ilk bakılacak yer modelin uydurması değil, bu iki tarafın ayrıştığı noktadır; şemanın serbest bıraktığı yeri model bir şeyle doldurur. Yan etkili araçlarda sözleşmenin üçüncü maddesi de zorunludur: aynı çağrı ikinci kez geldiğinde ne olacağı.
Teori: şema hem belge hem arayüz#
Model bir aracı çağırırken elinde yalnızca ad, açıklama ve parametre şeması vardır; fonksiyonun gövdesini görmez. Bu yüzden şema bir dokümantasyon değil, çalışma zamanı davranışını belirleyen arayüzdür. Şemada serbest metin olarak tanımlanan bir alan, modelin gözünde her değerin kabul edildiği bir alandır; kodun içinde üç değerden birini bekliyor olması modeli bağlamaz.
Modelin yanlış argüman üretmesi genelde iki mekanizmadan biriyle olur. Birincisi boşluk doldurma: zorunlu bir alan vardır, değeri bağlamda yoktur, model en olası değeri üretir. İkincisi biçim kayması: alan serbest metin olduğu için tarih, kimlik veya para birimi her çağrıda başka biçimde gelir. İkisinin de çözümü istemi uzatmak değil kabul kümesini daraltmaktır. Değer bağlamda yoksa şema onu zorunlu tutmamalı; biçim önemliyse tip serbest metin olmamalıdır.
Doğrulama sınırı#
- Sonlu değer kümesi varsa enum yaz; açıklamada "yalnızca şu üçü" demek yerine kuralı şemaya koy.
- Kimlik ve tarih gibi alanlarda biçimi tipe taşı: desen, biçim adı ya da ayrı alanlar.
- Bağlamda olmayabilecek alanı zorunlu yapma; zorunluluk boşluk doldurmayı davet eder.
- Sayısal alanlara alt ve üst sınır koy; "kaç kayıt" alanı sınırsızsa tek çağrı bağlamı doldurabilir.
- Serbest metin tek bir alanda kalsın (arama sorgusu gibi) ve o alan yan etkiyi belirlemesin.
- Doğrulama reddi sessiz olmasın: hangi alanın hangi kuralla reddedildiği modele dönmeli.
// ZAYIF: her alan serbest metin, sınır yok, yan etkiyi argüman belirliyor
{
"name": "siparis_guncelle",
"parameters": {
"type": "object",
"properties": {
"siparis": { "type": "string" },
"islem": { "type": "string" },
"not": { "type": "string" }
},
"required": ["siparis", "islem", "not"]
}
}
// GÜÇLÜ: kabul kümesi dar, yan etki enum ile sabit, tekrar güvenliği anahtarda
{
"name": "siparis_durumu_degistir",
"parameters": {
"type": "object",
"properties": {
"siparis_kimligi": { "type": "string", "pattern": "^SIP-[0-9]{8}$" },
"yeni_durum": { "type": "string", "enum": ["hazirlaniyor", "kargoda", "iptal"] },
"islem_anahtari": { "type": "string", "minLength": 8 },
"not": { "type": "string", "maxLength": 200 }
},
"required": ["siparis_kimligi", "yeni_durum", "islem_anahtari"],
"additionalProperties": false
}
}Hata dönüşü: modelin düzeltebileceği biçim#
| Hata sınıfı | Dönüş biçimi | Modelden beklenen | Döngüye etkisi |
|---|---|---|---|
| Şema reddi | Hangi alan, hangi kural ihlal edildi | Aynı aracı düzeltilmiş argümanla çağırmak | Tur harcanır, döngü sürer |
| Bulunamadı | Boş sonuç ve uygulanan arama ölçütü | Ölçütü genişletmek veya kullanıcıya sormak | Döngü sürer |
| Yetki reddi | Reddedilen kapsamın adı ve gerekli kapsam | Yeniden denememek, devretmek | Ölümcül: döngü biter |
| Çakışma | Kaydın güncel durumu | Güncel durumu okuyup kararı yenilemek | Döngü sürer |
| Geçici arıza | Yeniden denenebilir işareti ve bekleme önerisi | Aynı çağrıyı aynı anahtarla yinelemek | Sınırlı sayıda yeniden deneme |
Buradaki tercih kasıtlıdır: araç hatası istisna fırlatıp döngüyü çökertmek yerine, gözleme yazılan yapılandırılmış bir dönüş olarak geri verilir. Çökme modelin düzeltme şansını yok eder; yalnızca "hata oluştu" yazan bir metin de öyle. Dönüş hangi alanın neden reddedildiğini taşıdığında model bir sonraki turda düzeltir; taşımadığında aynı yanlışı tekrarlar ve birinci bölümde adı konan döngü kilidi ortaya çıkar.
İdempotans anahtarı#
Bir araç çağrısının ikinci kez gelmesi istisna değil, beklenen durumdur. Zaman aşımı sonucu kaybeder ama işlem tamamlanmış olabilir; döngü aynı kararı yeniden verebilir; ağ katmanı isteği yineleyebilir. Yan etkisi olan bir araçta bu, çift kayıt veya ikinci kez faturalandırma demektir. Çözüm, çağıranın ürettiği bir işlem anahtarıdır: sunucu anahtarı kalıcı olarak kaydeder ve aynı anahtarla gelen ikinci çağrıya işlemi yeniden yapmadan ilk sonucu döndürür.
- 1Anahtarı çağıran üretir
Belirleyici olan, anahtarın aynı iş için sabit kalmasıdır: ya işin kimliğinden türetilir (koşum kimliği + adım + hedef kayıt) ya da bir kez üretilip yeniden denemeler boyunca saklanır. Her denemede yeniden üretilen anahtar, aynı işin denemelerini ayrı işlem gösterir.
- 2Sunucu anahtarı önce kaydeder
İşlem yapılmadan önce anahtar "işleniyor" olarak yazılır; aynı anda gelen ikinci çağrı beklemeye alınır, kopya işlem başlatmaz.
- 3Sonuç anahtara bağlanır
İşlem bittiğinde dönen gövde anahtarla birlikte saklanır; aynı anahtarla gelen ikinci çağrı bu gövdeyi aynen alır.
- 4Tekrar açıkça işaretlenir
Dönüşte yeniden oynatma bayrağı bulunur; ajan böylece yeni bir yan etki oluşmadığını bilir ve sayacını iki kez artırmaz.
- 5Anahtar ömrü tanımlanır
Kayıt sonsuza kadar tutulmaz. Saklama süresi en uzun yeniden deneme penceresinden uzun, denetim gereğinden kısa olmayacak biçimde seçilir.
Sözleşme testi#
- Şemanın reddettiği girdi gerçekten reddediliyor mu, yoksa kod sessizce kabul edip varsayılan mı uyguluyor?
- Belgelenen enum değerlerinin hepsi çalışıyor mu; birinin karşılığı kodda kaldırılmış olabilir.
- Boş sonuç ile hata ayrı mı dönüyor; "bulunamadı" hata sayılırsa döngü gereksiz yeniden dener.
- Aynı işlem anahtarıyla iki çağrı tek yan etki mi üretiyor; ikinci dönüşte yeniden oynatma işareti var mı?
- Yetki reddi ile geçici arıza farklı sınıf mı dönüyor; aynı görünürlerse yeniden deneme politikası yanlış çalışır.
- Zaman aşımında araç ne döndürüyor; kırpılmamış büyük çıktı tek adımda bağlamı doldurabilir.
LAB · UYGULAMALI ALIŞTIRMA
Bir aracınızın sözleşmesini sıkılaştırın
- 1Kendi sisteminizden yan etkisi olan bir aracı seçin ve modele gösterilen şemasını olduğu gibi bir dosyaya kopyalayın.
- 2Şemadaki her alan için kodun gerçekte kabul ettiği kümeyi yazın; şema ile kod arasındaki her farkı ayrı satır olarak işaretleyin.
- 3Farkları kapatacak biçimde şemayı daraltın: sonlu kümeleri enum'a, biçimli alanları desene, sayısal alanları alt-üst sınıra çevirin.
- 4Aracın döndürdüğü hataları şema reddi, bulunamadı, yetki reddi, çakışma ve geçici arıza olarak sınıflandırıp her sınıfa yeniden denenebilir bayrağı ve düzeltme ipucu ekleyin.
- 5Bir işlem anahtarı alanı ekleyin, anahtarı koşum kimliğinden türetin ve aynı anahtarla iki kez çağırıp tek yan etki oluştuğunu doğrulayın.
- 6Sözleşme testi listesindeki altı kontrolü elle koşturup her birini geçti veya kaldı olarak işaretleyin.
Beklenen çıktı
Daraltılmış şeması, sınıflandırılmış hata dönüşleri ve iki kez çağrıldığında tek yan etki ürettiği doğrulanmış tek bir araç.
Sık sorulan sorular
Doğrulamayı modele bırakıp istemde "sadece şu değerleri kullan" demek yetmez mi?
İstem bir tercih bildirir, sınır koymaz. Aynı talimat çoğu turda tutar, bazı turlarda tutmaz; tuttuğu yerde bile biçim kayması sürer. Sınır, girdiyi kabul eden tarafta olmalı: şema reddi deterministiktir ve reddedilen çağrı yan etki üretmez. İstem, doğrulamanın yerine değil üstüne yazılır.
İdempotans anahtarını sunucu üretebilir mi?
Üretemez. Anahtarın işi iki çağrının aynı iş olduğunu söylemektir; sunucu her isteğe yeni anahtar verirse yeniden deneme yeni işlem sayılır. Anahtar çağıranda üretilir ve aynı iş için sabit kalır: işin kimliğinden türetilerek ya da bir kez üretilip denemeler boyunca saklanarak. Hata rastgelelikte değil her denemede yeniden üretmededir; yeniden üretilen anahtar, aynı adımın ikinci denemesini yeni işlem gösterir.
Çok sayıda dar araç yerine tek esnek araç vermek daha iyi değil mi?
Esnek araç kabul kümesini genişletir ve doğrulamayı anlamsızlaştırır: yan etkinin ne olacağı serbest metin bir alanda belirleniyorsa şema hiçbir şeyi güvenceye almaz. Tersi uç da sorunlu; örtüşen çok sayıda dar araç tutarsız seçim üretir. Ölçüt yan etkidir: farklı yan etkiler farklı araç, aynı yan etkinin varyasyonları tek araçta enum olur.
LEARN
Ajan Sistemleri Mühendisi rotasına devam et
Dersler tek başına da okunabilir, ama sıralı ilerlemek önkoşul boşluklarını kapatır.
