Megérkezett a ThunderPhone 2.0.Önkiszolgálóan, már 2¢/perctől.Olvassa el a bejelentést

Developer cookbook

AI-ügynök teljes körű tesztelése (API)

Futtasson egyszeri szimulációkat, párhuzamos forgatókönyv-kötegeket és kiadáskapu-tesztcsomagokat a ThunderPhone API-n keresztül, hogy az AI-ügynök regresszióit még azelőtt észlelje, hogy az ügyfelek találkoznának velük.

Egy AI-ügynök iteratív fejlesztése azt jelenti, hogy iterál a promptján, az eszközein és azon, ahogyan a szélső eseteket kezeli. A szimulációs API valós hívásokat futtat egy ügynök ellen az Ön által megadott forgatókönyv-prompt használatával. Egy ügynök célzása botok közötti futtatást hoz létre; egy telefonszám célzása SIP-visszacsatolási futtatást hoz létre. Minden futtatás valódi hívásnaplót készít átirattal, értékeléssel és számlázással, így pontosan láthatja, hogyan viselkedik az ügynök, és mennyibe kerül.

Használja erre:

  • Telepítés előtti gyors ellenőrző tesztekre minden promptmódosítás után
  • CI-be épített regressziós tesztcsomagokra (test-call.completed webhook → a build sikertelen, ha a pontszám csökken)
  • A párhuzamossági korlátok terheléses tesztelésére

Egyszeri futtatás

curl -X POST https://api.thunderphone.com/v1/simulations \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "target_type":     "agent",
    "target_id":       12,
    "direction":       "outbound",
    "scenario_prompt": "You are a polite caller asking about refund policy for order 12345.",
    "consent_to_charge": true
  }'

Mezők:

MezőTípusKötelezőLeírás
target_typekarakterláncigenagent vagy phone_number
target_idegész számigenAz ügynök azonosítója (vagy a telefonszám azonosítója)
directionkarakterláncnemoutbound (alapértelmezett; a teszthívó kezdeményezi a hívást) vagy inbound (a teszthívó fogadja a hívást)
scenario_promptkarakterláncnemMeghatározza, mit mond a tesztbot
language / primary_languagekarakterláncnemA teszthívó nyelve; a nem támogatott kódokat a rendszer elutasítja
simulator_productkarakterláncnemtesting (alapértelmezett) vagy spark emberibb hangzású szimulált hívóhoz, például meleg átadás előtti egyeztetési tesztekhez
consent_to_chargelogikaiigenÉrtékének true-nak kell lennie. A becslés egységes percenkénti díjat számít fel mind a kiválasztott ügynök, mind a szimulált hívó számára, valamint minden telefonhálózati kapcsolatért
target_numberkarakterláncnemE.164-felülbírálás a távoli oldalhoz; egyébként a rendszer teszttelefonszáma használatos

A mode csak olvasható, és a target_type alapján származik: az agent mode="bot" értéket, míg a phone_number mode="sip" értéket eredményez.

A válasz egy szimulációs futtatási objektum status="queued" állapotban. Kérdezze le, amíg a status értéke completed vagy failed nem lesz; a call_id beállítása után töltse be az átiratot a következővel: GET /v1/calls/{call_id}/transcript.

Kötegek: párhuzamos forgatókönyvek

Futtasson egyszerre N forgatókönyvet — ez regressziós tesztcsomagokhoz hasznos, amelyek minden ismert szélső esetet párhuzamosan fednek le:

curl -X POST https://api.thunderphone.com/v1/simulations/batches \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "target_type":     "agent",
    "target_id":       12,
    "direction":       "outbound",
    "run_count":       5,
    "stagger_seconds": 2,
    "scenario_prompts": [
      "Ask about refund policy.",
      "Ask for hours of operation.",
      "Complain about a delayed shipment.",
      "Ask to speak with a human.",
      "Ask an unrelated trivia question."
    ],
    "consent_to_charge": true
  }'

A válasz a gyermekfuttatások azonosítóit tartalmazó run_ids listát ad vissza. A köteg állapotának lekérése:

curl https://api.thunderphone.com/v1/simulations/batches/{batch_id} \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"

A run_count legfeljebb 20 lehet; a stagger_seconds elosztja az indításokat, hogy ne terhelje túl az ügynököt (0–60 s).

Kapcsolja össze a CI-vel

Hozzon létre egy kiadási kapu tesztcsomagot a Szimulációk oldalon (/dashboard/simulations) — válassza ki az ügynököt, adjon hozzá forgatókönyveket kézzel, vagy kattintson a Forgatókönyvek generálása AI-val lehetőségre, hogy az ügynök promptja alapján elkészítse őket (opcionális szélső esetek ellenőrzésével), majd csoportosítsa őket tesztcsomagba. Egy tesztcsomag rögzíti a forgatókönyveit és az ügynököt, valamint a minimális megfelelési arányt és egy opcionális, nulla kritikus hibát előíró szabályt. A sikeres futások válnak elfogadott alapvonallá; a későbbi megfelelt→nem felelt meg átmeneteket a rendszer regresszióként adja vissza.

Használjon szervezeti API-kulcsot a CI-ben. Ez a szkript elindítja a tesztcsomagot, lekérdezi az állapotát, amíg az értékelés és az összehasonlítás befejeződik, és nem nulla kóddal lép ki, hacsak az eredmény nem pass:

#!/usr/bin/env bash
set -euo pipefail
 
: "${THUNDERPHONE_API_KEY:?Set THUNDERPHONE_API_KEY}"
: "${THUNDERPHONE_ORG_ID:?Set THUNDERPHONE_ORG_ID}"
: "${THUNDERPHONE_SUITE_ID:?Set THUNDERPHONE_SUITE_ID}"
 
base="https://api.thunderphone.com/v1/orgs/${THUNDERPHONE_ORG_ID}/suites/${THUNDERPHONE_SUITE_ID}"
auth="Authorization: Bearer ${THUNDERPHONE_API_KEY}"
 
run_id="$(curl --fail --silent --show-error -X POST "${base}/run" \
  -H "$auth" -H "Content-Type: application/json" -d '{}' | jq -r '.id')"
 
deadline=$((SECONDS + 1800))
while (( SECONDS < deadline )); do
  result="$(curl --fail --silent --show-error \
    "${base}/runs/${run_id}" -H "$auth")"
  status="$(jq -r '.status' <<<"$result")"
  if [[ "$status" == "completed" ]]; then
    jq . <<<"$result"
    [[ "$(jq -r '.verdict' <<<"$result")" == "pass" ]]
    exit
  fi
  sleep 10
done
 
echo "ThunderPhone suite timed out" >&2
exit 1

A POST /v1/orgs/{org_id}/suites/{suite_id}/run 202 választ ad vissza a futásazonosítóval. A GET /v1/orgs/{org_id}/suites/{suite_id}/runs/{run_id} a status, verdict, pass_rate, critical_failure_count és az alapvonalhoz tartozó regressions listát adja vissza. Mindkét végpont az URL-ben szereplő szervezetet az API-kulcs szervezetéhez köti.

Tesztcsomag futtatása ütemezés szerint

Nyissa meg az ügynök Szimulálás lapját, válassza a Kiadási kapu tesztcsomagok lehetőséget, majd hozzon létre vagy szerkesszen egy tesztcsomagot. Kapcsolja be az Ütemezett futtatás lehetőséget, válassza ki a Gyakoriságot és az Időzónát, majd állítsa be az Órán belüli percet, a Helyi időt vagy a Napot a bemutatott módon. Válassza a Tesztcsomag mentése lehetőséget. Az Ütemezett futtatás kijelölésének megszüntetése eltávolítja az irányítópultbeli ütemezést.

API-n keresztül

PATCH-kéréssel adja hozzá vagy cserélje le a tesztcsomag ütemezését. A teljes tesztcsomag-objektumot és a végpontokat lásd: Tesztcsomagok (kiadási kapuk).

curl -X PATCH https://api.thunderphone.com/v1/suites/{suite_id} \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "schedule": {
      "enabled": true,
      "frequency": "daily",
      "timezone": "America/Chicago",
      "hour": 6,
      "minute": 30
    }
  }'

A frequency értéke hourly, daily vagy weekly lehet. Használjon IANA-időzónát. Az óránkénti ütemezések a minute mezőt használják; a napi ütemezések a hour és minute mezőket; a heti ütemezések emellett a weekday mezőt is használják, ahol a hétfő 0, a vasárnap pedig 6. A tesztcsomag válasza tartalmazza a next_run_at és last_run_at mezőket.

Az időpontok a kiválasztott időzóna nyári időszámítási változásait követik. Az ütemezett futások megjelennek a tesztcsomag futási előzményeiben, és annak aktuális ügynökét, forgatókönyveit, kritériumait és elfogadott alapvonalát használják. Minden generált teszthívás test-call.completed eseményt küld; nincs tesztcsomagszintű befejezési webhook. Az ütemezett hívások díjazása megegyezik a kézi tesztcsomag-futtatások szimulációs díjával, és a tesztcsomag futásán trigger: "schedule" értéket rögzítenek.

Az ütemezés időzítésének módosítása nélküli szüneteltetéséhez PATCH-kéréssel küldje el a teljes meglévő ütemezési objektumot "enabled": false értékkel. A frequency megadása kötelező; a kihagyott időzóna- és időmezők visszaállnak az alapértelmezett értékükre, ezért adja meg a meglévő értékeket. Az ütemezés eltávolításához küldje el a "schedule": null értéket.

Minták

Promptonkénti regressziós tesztkorpusz

Tartson fenn egy {name, scenario_prompt, expected_outcome} rekordokból álló JSON-fájlt. Minden promptmódosításkor futtassa a teljes készletet kötegként; hasonlítsa össze a leiratokat és az értékeléseket az előző futtatással.

Kiadásonkénti füstteszt

Öt sikeres forgatókönyvből álló egyetlen köteg, amelyet minden telepítés után futtat. Késleltetésérzékeny, ezért tartsa a stagger_seconds: 0 értéket.

Késleltetési teljesítménymérés

Futtasson azonos forgatókönyveket különböző termékcsomagokon (spark, bolt, storm-base). Hasonlítsa össze a call.graded pontszámokat és az egyes létrejött hívásnaplókból származó duration_seconds értékeket.


Következő lépések