Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az AI-ügynök meghívja az eszközöket: HTTP API-kat, MCP-kiszolgálókat és egyéb szolgáltatásokat. Ezek az eszközök időtúllépést okoznak, rate limitbe ütköznek, hibákat adnak vissza, és nem várt formátumban küldenek adatokat. A modell annak alapján dönti el, hogy mi legyen a következő lépés, attól függően, hogy a kód mit ad vissza neki. Ha a kód hosszú várakozás után kivételt, üres karakterláncot vagy egyáltalán semmit nem ad vissza, az ügynök másképp viselkedik, mint amikor egy egyértelmű hibát kap.
Hogyan romlanak el az eszközök
- Az agent lefagy. Az időtúllépés nélküli eszközhívás várakoztatja a felhasználót.
- Az ügynök ciklusba lép. A modell újra és újra meghívja a hibás eszközt, felhasználva a tokeneket és az eszköz kérési korlátját.
- Az ágens elfedi. A kód lenyeli a hibát, és a modell úgy válaszol, mintha az eszköz sikeresen lefutott volna.
- Az agent összeomlik. Egy kezeletlen kivétel véget vet a teljes beszélgetésnek.
Eszközhibák kezelése
- Állítson be időtúllépést minden eszközhíváshoz és költségvetést az egész fordulóra. Az MCP specifikáció szerint az ügyfeleknek időtúllépéseket kell implementálniuk az eszközhívásokhoz.
- Próbálja újra a kódban lévő ideiglenes hibák esetén. Kezelje a 429-es és 503-as válaszokat az eszközkódban, tartsa tiszteletben a(z)
Retry-Afterelemet, és korlátozza a próbálkozások számát, hogy a modellnek ne kelljen eldöntenie, mikor próbálkozzon újra. - A sikertelen eredmények visszaadása a modellnek egyértelmű eredményként. Az MCP elkülöníti a protokollhibákat, például egy ismeretlen toolt vagy érvénytelen argumentumot a tool-végrehajtási hibáktól, például egy API-hibától. A végrehajtási hibákat az eszköz eredményében
isError: truejelöli, így a modell láthatja, mi ment rosszul. Mondja el, hogy mi nem sikerült, és hogy van-e értelme újra próbálkozni. - Az eszközhívások számának korlátozása fordulatonként. Bizonyos számú sikertelen próbálkozás után állítsa le, és mondja el a felhasználónak.
- Ellenőrizze az eszköz eredményeit, mielőtt átadja őket a modellnek. Az MCP-specifikáció szerint az ügyfeleknek ezt kell megtenniük, és a strukturált eredményeket az eszköz kimeneti sémája alapján kell ellenőrizniük, ha van ilyenje.
- Mondja el a felhasználónak, hogy mi nem működött. Egy sikertelen eszközhívásra épülő válasznak ezt kell jeleznie.
Eszközhibák kezelésének tesztelése az ügynöködben
| Approach | Mit talál? | Ami hiányzik |
|---|---|---|
| Végezzen egységtesztet az eszközwrapperén stubolt klienssel | Hogyan képezi le a kódod az általad írt hibát | Mit csinál vele a modell, és hogyan vall kudarcot a valódi eszköz |
| A valódi eszköz meghibásítása, például a kiszolgáló leállítása vagy kulcs visszavonása | Egy ilyen valódi meghibásodás | Kérésszámkorlátok, lassú válaszok és hibásan formázott adatok, amelyeket igény szerint nem tud okozni |
| Hamis API- vagy MCP-kiszolgáló írása | Bármilyen válasz, amit szkriptelsz | Az ügynököt a hamisra kell irányítania, és eltávolodik a valódi eszköztől. |
| Elfogja az ügynök valós eszközforgalmát, és hibákat szúr be | Mit tesz a futó ügynök és a modell a valós eszköz hibáival, késleltetésével és hibás adataival | A kódod elkülönítve van. Arra valók az egységtesztek. |
A modell kimenete futásonként eltérő lehet, ezért az egyes hibaforgatókönyveket többször is futtassa.
Próbálja ki az alkalmazásában
Dev Proxy az ügynök és eszközei között helyezkedik el, és hibákat injektál, és nem módosítja az ügynök kódját.
HTTP API-kat hívó eszközök esetén kombinálja a véletlenszerű hibákat, a késleltetést és annak ellenőrzését, hogy az ügynök az API által kért ideig vár-e:
{
"$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
}
}
Határozza meg a(z) hibáit a errors-contoso-api.json című részben leírtak szerint. Állítsa a(z) Retry-After értékét @dynamic értékre az Ön 429 válaszaiban. A RetryAfterPlugin csak azokat ellenőrzi.
Az STDIO-t használó MCP-kiszolgálók esetében devproxy stdio segítségével indítsa el a kiszolgálót egy olyan konfigurációval, amely lehetővé teszi a MockStdioResponsePlugin használatát, a stdio konfigurációs példában látható módon. Mentse el devproxyrc-stdio.json néven. Ezután tegye ezt a(z) stdio-mocks.json elembe, hogy minden tools/call kéréshez eszközvégrehajtási hibát adjon vissza:
{
"$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
Ha azt szeretné, hogy az ügynök használja, módosítsa a parancsot az ügynök MCP-kiszolgálójának konfigurációjában, hogy az a kiszolgálót a(z) devproxy stdio használatával indítsa el. Egy mock egyik nth tulajdonságával csak egy adott hívás meghiúsítására, illetve a kiszolgáló válaszainak lassításához adja hozzá a LatencyPlugin modult.
Annak teszteléséhez, hogy az ügynök mit tesz, ha maga a modell meghibásodik, a LanguageModelFailurePlugin hallucinálásra készteti a modellt, figyelmen kívül hagyni az utasításokat, vagy helytelen formátumban válaszolni. Lásd: Alkalmazásom tesztelése nyelvi modellhibákkal.
A Dev Proxy telepítéséhez lásd: Dev Proxy beállítása.