Δοκιμάστε έναν πράκτορα από άκρο σε άκρο (API)

Η επανάληψη σε έναν AI πράκτορα σημαίνει επανάληψη στο prompt, στα εργαλεία του και στον τρόπο με τον οποίο χειρίζεται οριακές περιπτώσεις. Το API προσομοιώσεων εκτελεί πραγματικές κλήσεις σε έναν πράκτορα χρησιμοποιώντας ένα prompt σεναρίου που παρέχετε. Η στόχευση ενός πράκτορα δημιουργεί εκτέλεση bot-προς-bot· η στόχευση ενός αριθμού τηλεφώνου δημιουργεί εκτέλεση βρόχου SIP. Κάθε εκτέλεση παράγει ένα πραγματικό αρχείο καταγραφής κλήσης με απομαγνητοφώνηση, αξιολόγηση και χρέωση, ώστε να βλέπετε ακριβώς πώς συμπεριφέρεται ο πράκτορας και ποιο είναι το κόστος του.

Χρησιμοποιήστε το για:

Μεμονωμένη εκτέλεση: μία κλήση

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
  }'

Πεδία:

ΠεδίοΤύποςΥποχρεωτικόΠεριγραφή
target_typestringναιagent ή phone_number
target_idintegerναιΤο αναγνωριστικό του πράκτορα (ή του αριθμού τηλεφώνου)
directionstringόχιoutbound (προεπιλογή· καλεί ο δοκιμαστικός καλών) ή inbound (απαντά ο δοκιμαστικός καλών)
scenario_promptstringόχιΚαθορίζει τι λέει το δοκιμαστικό bot
language / primary_languagestringόχιΓλώσσα για τον δοκιμαστικό καλούντα· οι μη υποστηριζόμενοι κωδικοί απορρίπτονται
simulator_productstringόχιtesting (προεπιλογή) ή spark για έναν πιο ανθρώπινο προσομοιωμένο καλούντα, όπως για δοκιμές συνεννόησης θερμής μεταβίβασης
consent_to_chargebooleanναιΠρέπει να είναι true. Η εκτίμηση χρεώνει τόσο τον επιλεγμένο πράκτορα όσο και τον προσομοιωμένο καλούντα, καθώς και οποιοδήποτε τηλεφωνικό σκέλος
target_numberstringόχιΠαράκαμψη E.164 για την απομακρυσμένη πλευρά· διαφορετικά χρησιμοποιείται ο δοκιμαστικός αριθμός της πλατφόρμας

Το mode είναι μόνο για ανάγνωση και προκύπτει από το target_type: το agent παράγει mode="bot", ενώ το phone_number παράγει mode="sip".

Η απόκριση είναι ένα αντικείμενο εκτέλεσης προσομοίωσης με status="queued". Κάντε polling έως ότου το status γίνει completed ή failed· μόλις οριστεί το call_id, φορτώστε την απομαγνητοφώνηση μέσω GET /v1/calls/{call_id}/transcript.

Παρτίδες: παράλληλα σενάρια

Εκτελέστε N σενάρια ταυτόχρονα — χρήσιμο για σουίτες παλινδρόμησης που καλύπτουν κάθε γνωστή οριακή περίπτωση παράλληλα:

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
  }'

Η απόκριση περιέχει μια λίστα run_ids με αναγνωριστικά θυγατρικών εκτελέσεων. Ανακτήστε την κατάσταση της παρτίδας:

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

Το run_count περιορίζεται σε 20· το stagger_seconds διαχωρίζει χρονικά την εκκίνηση ώστε να αποφεύγεται η υπερβολική επιβάρυνση του πράκτορα (0–60 δευτ.).

Ενσωμάτωση στο CI

Δημιουργήστε μια σουίτα πύλης έκδοσης στη σελίδα Προσομοιώσεις (/dashboard/simulations) — επιλέξτε τον πράκτορα, προσθέστε σενάρια μη αυτόματα ή κάντε κλικ στο Δημιουργία σεναρίων με AI για να τα συντάξετε από την προτροπή του πράκτορα (με προαιρετικό έλεγχο ακραίων περιπτώσεων) και ομαδοποιήστε τα σε μια σουίτα. Μια σουίτα κλειδώνει τα σενάρια και τον πράκτορά της, καθώς και ένα ελάχιστο ποσοστό επιτυχίας και έναν προαιρετικό κανόνα μηδενικών κρίσιμων αποτυχιών. Οι επιτυχημένες εκτελέσεις γίνονται η αποδεκτή γραμμή βάσης· μεταγενέστερες μεταβάσεις επιτυχία→αποτυχία επιστρέφονται ως παλινδρομήσεις.

Χρησιμοποιήστε ένα κλειδί API οργανισμού στο CI. Αυτό το script ενεργοποιεί τη σουίτα, ελέγχει περιοδικά μέχρι να ολοκληρωθούν η βαθμολόγηση και η σύγκριση και τερματίζει με μη μηδενικό κωδικό, εκτός αν η ετυμηγορία είναι 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

Το POST /v1/orgs/{org_id}/suites/{suite_id}/run επιστρέφει 202 με το αναγνωριστικό εκτέλεσης. Το GET /v1/orgs/{org_id}/suites/{suite_id}/runs/{run_id} επιστρέφει status, verdict, pass_rate, critical_failure_count και τη λίστα παλινδρομήσεων της γραμμής βάσης regressions. Και τα δύο τελικά σημεία συνδέουν τον οργανισμό στο URL με τον οργανισμό του κλειδιού API.

Πρότυπα

Σώμα παλινδρομήσεων ανά προτροπή

Διατηρήστε ένα αρχείο JSON με πλειάδες {name, scenario_prompt, expected_outcome}. Σε κάθε αλλαγή προτροπής, εκτελέστε ολόκληρο το σύνολο ως παρτίδα· συγκρίνετε τις απομαγνητοφωνήσεις και τις βαθμολογίες με την προηγούμενη εκτέλεση.

Δοκιμή καπνού ανά έκδοση

Μια μεμονωμένη παρτίδα πέντε σεναρίων ομαλής ροής που εκτελείτε μετά από κάθε ανάπτυξη. Είναι ευαίσθητη στην καθυστέρηση, επομένως διατηρήστε το stagger_seconds: 0.

Συγκριτική αξιολόγηση καθυστέρησης

Εκτελέστε πανομοιότυπα σενάρια σε διαφορετικές βαθμίδες προϊόντος (spark, bolt, storm-base). Συγκρίνετε τις βαθμολογίες call.graded και το duration_seconds από κάθε αρχείο καταγραφής κλήσης που προκύπτει.


Επόμενα βήματα