Yapay zeka aracınızın araçları başarısız olduğunda ne yaptığını test etme

Yapay zeka ajanınız araçları çağırır: HTTP API'leri, MCP sunucuları ve diğer hizmetler. Bu araçlar zaman aşımına uğrar, oran sınırına takılır, hata döndürür ve beklemediğiniz şekillerde veri gönderir. Model, kodunuzun ona geri ilettiği şeye göre sonraki adımda ne yapacağına karar verir. Kodunuz uzun bir bekleyişten sonra bir özel durum, boş dize veya hiçbir şey geri döndürürse, aracı net bir hata aldığından farklı davranır.

Araç arızaları nasıl oluşur

  • Aracı donuyor. Zaman aşımı olmayan bir araç çağrısı kullanıcıyı bekletir.
  • Ajan döngüye girer. Model, hata veren aracı tekrar tekrar çağırarak belirteçleri tüketip aracın hız sınırını da doldurur.
  • Ajan bunu örtbas eder. Kodunuz hatayı yutuyor ve model araç başarılı olmuş gibi yanıt veriyor.
  • Ajan kilitleniyor. İşlenmeyen özel durum hatası konuşmanın tamamını sonlandırır.

Araç arızalarını işleme

  1. Her araç çağrısında bir zaman aşımı ve tüm tur için bir bütçe ayarlayın. MCP belirtimi, istemcilerin araç çağrıları için zaman aşımları uygulaması gerektiğini belirtir.
  2. Kodda oluşan geçici hatalarda yeniden deneyin. Araç kodunuzda 429 ve 503 yanıtlarını işleyin, Retry-After değerine uyun ve deneme sayısını sınırlayın; böylece modelin ne zaman yeniden deneneceğine karar vermesi gerekmez.
  3. Başarısızlıkları modele net sonuçlar olarak döndür. MCP, bilinmeyen bir araç veya geçersiz bağımsız değişkenler gibi protokol hatalarını API hatası gibi araç yürütme hatalarından ayırır. Araç sonucundaki yürütme hatalarını isError: true ile bildirir, böylece model neyin yanlış gittiğini görebilir. Neyin başarısız olduğunu ve yeniden denemenin mantıklı olup olmadığını söyleyin.
  4. Dönüş başına araç çağrısı sayısını sınırla. Belirli sayıda başarısız denemeden sonra durdurup kullanıcıya bildirin.
  5. Modele geçirmeden önce araç sonuçlarını doğrulayın. MCP belirtimi, istemcilerin bunu yapması gerektiğini ve mevcutsa yapılandırılmış sonuçları aracın çıktı şemasına göre doğrulamaları gerektiğini belirtir.
  6. Kullanıcıya neyin çalışmadığını söyleyin. Başarısız bir araç çağrısı üzerine oluşturulmuş bir yanıt bunu belirtmelidir.

Ajanınızda araç hata işlemeyi test etme

Approach Bulduklarınız Kaçırdığınız şeyler
Araç sarmalayıcınızı bir stub istemciyle birim test edin Kodunuz yazdığınız başarısızlıkla nasıl eşleşir? Modelin bununla ne yaptığı ve gerçek aracın nasıl başarısız olduğu
Gerçek aracı bozma, örneğin sunucuyu durdurma veya anahtarı iptal etme O türden gerçek bir başarısızlık hız sınırları, yavaş yanıtlar ve hatalı biçimlendirilmiş veriler; istediğiniz zaman tetikleyemeyeceğiniz şeyler
Sahte API veya MCP sunucusu yazın Komut dosyasıyla oluşturduğunuz herhangi bir yanıt Agent’ini sahte olana yöneltmek zorundasın ve gerçek araçtan sapıyor.
Aracının gerçek araç trafiğini engelleme ve hata ekleme Çalışan ajan ve model, gerçek araçtan gelen hatalar, gecikme süresi ve hatalı verilerle ne yapar? Kodunuz izole durumda. Bunun için birim testlerinizi kullanın.

Model çıkışı çalıştırmalar arasında farklılık gösterebilir, bu nedenle her hata senaryosunu birden çok kez çalıştırın.

Uygulamanızda deneyin

Dev Proxy ajanınız ile onun araçları arasında yer alır ve hata ekler ve ajanınızın kodunda hiçbir değişiklik yapmadan.

HTTP API'lerini çağıran araçlar için rastgele hataları, gecikme süresini ve API'nin istediği sürece ajanınızın beklediği bir denetimi birleştirin:

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/rc.schema.json",
  "plugins": [
    {
      "name": "RetryAfterPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
    },
    {
      "name": "LatencyPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "latencyPlugin"
    },
    {
      "name": "GenericRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "errorsContosoApi"
    }
  ],
  "urlsToWatch": [
    "https://api.contoso.com/*"
  ],
  "latencyPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/latencyplugin.schema.json",
    "minMs": 2000,
    "maxMs": 10000
  },
  "errorsContosoApi": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/genericrandomerrorplugin.schema.json",
    "errorsFile": "errors-contoso-api.json",
    "rate": 50
  }
}

errors-contoso-api.json içindeki hataları, Uygulamamı rastgele hatalarla test et bölümünde açıklandığı gibi tanımlayın. Retry-After yanıtlarınızda 429 öğesini @dynamic olarak ayarlayın. RetryAfterPlugin yalnızca bunları denetler.

STDIO kullanan MCP sunucuları için, devproxy stdio gösterildiği gibi, sunucuyu MockStdioResponsePlugin'i etkinleştiren bir yapılandırmayla stdio üzerinden başlatın. olarak devproxyrc-stdio.jsonkaydedin. Ardından her stdio-mocks.json isteği için bir araç yürütme hatası döndürmek üzere bunu tools/call içine yazın:

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/mockstdioresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "request": {
        "bodyFragment": "tools/call"
      },
      "response": {
        "stdout": "{\"jsonrpc\":\"2.0\",\"id\":@stdin.body.id,\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"Failed to fetch weather data: API rate limit exceeded\"}],\"isError\":true}}\n"
      }
    }
  ]
}
devproxy stdio --config-file devproxyrc-stdio.json npx -y @modelcontextprotocol/server-filesystem

Aracınızın bunu kullanmasını sağlamak için, aracınızın MCP sunucu yapılandırmasındaki komutu, sunucuyu devproxy stdio aracılığıyla başlatacak şekilde değiştirin. Yalnızca belirli bir çağrının başarısız olmasını sağlamak için bir mock üzerinde nth özelliğini kullanın ve sunucunun yanıtlarını yavaşlatmak için LatencyPlugin ekleyin.

Model başarısız olduğunda aracınızın ne yaptığını test etmek için LanguageModelFailurePlugin modelin halüsinasyon üretmesine, yönergeleri yoksaymasına veya yanlış biçimde yanıt vermesine neden olur. Uygulamamı dil modeli hatalarıyla test et.

Geliştirme Proxy'sini yüklemek için bkz. Dev Proxy'yi ayarlama.

Sonraki Adımlar

Ayrıca bkz.