Δοκιμάστε έναν πράκτορα από άκρο σε άκρο (API)
Η επανάληψη σε έναν AI πράκτορα σημαίνει επανάληψη στο prompt, στα εργαλεία του και στον τρόπο με τον οποίο χειρίζεται οριακές περιπτώσεις. Το API προσομοιώσεων εκτελεί πραγματικές κλήσεις σε έναν πράκτορα χρησιμοποιώντας ένα prompt σεναρίου που παρέχετε. Η στόχευση ενός πράκτορα δημιουργεί εκτέλεση bot-προς-bot· η στόχευση ενός αριθμού τηλεφώνου δημιουργεί εκτέλεση βρόχου SIP. Κάθε εκτέλεση παράγει ένα πραγματικό αρχείο καταγραφής κλήσης με απομαγνητοφώνηση, αξιολόγηση και χρέωση, ώστε να βλέπετε ακριβώς πώς συμπεριφέρεται ο πράκτορας και ποιο είναι το κόστος του.
Χρησιμοποιήστε το για:
- Δοκιμές smoke πριν από την ανάπτυξη μετά από κάθε επεξεργασία prompt
- Σουίτες παλινδρόμησης συνδεδεμένες με CI (συνδέστε το webhook
test-call.completed→ αποτυχία του build αν μειωθεί η βαθμολογία) - Δοκιμή αντοχής των ορίων ταυτόχρονης εκτέλεσης
Μεμονωμένη εκτέλεση: μία κλήση
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_type | string | ναι | agent ή phone_number |
target_id | integer | ναι | Το αναγνωριστικό του πράκτορα (ή του αριθμού τηλεφώνου) |
direction | string | όχι | outbound (προεπιλογή· καλεί ο δοκιμαστικός καλών) ή inbound (απαντά ο δοκιμαστικός καλών) |
scenario_prompt | string | όχι | Καθορίζει τι λέει το δοκιμαστικό bot |
language / primary_language | string | όχι | Γλώσσα για τον δοκιμαστικό καλούντα· οι μη υποστηριζόμενοι κωδικοί απορρίπτονται |
simulator_product | string | όχι | testing (προεπιλογή) ή spark για έναν πιο ανθρώπινο προσομοιωμένο καλούντα, όπως για δοκιμές συνεννόησης θερμής μεταβίβασης |
consent_to_charge | boolean | ναι | Πρέπει να είναι true. Η εκτίμηση χρεώνει τόσο τον επιλεγμένο πράκτορα όσο και τον προσομοιωμένο καλούντα, καθώς και οποιοδήποτε τηλεφωνικό σκέλος |
target_number | string | όχι | Παράκαμψη 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 από κάθε αρχείο καταγραφής κλήσης που προκύπτει.
Επόμενα βήματα
Κάθε παράμετρος ερωτήματος, κωδικός κατάστασης και μορφή παρτίδας.
Βαθμολογήστε αυτόματα κάθε δοκιμαστική εκτέλεση για να παρακολουθείτε την ποιότητα με την πάροδο του χρόνου.
Επισημάνετε συγκεκριμένες δοκιμές για ανθρώπινο έλεγχο.
Μεταδώστε τα αποτελέσματα στο CI / Slack / PagerDuty.