ทดสอบเอเจนต์แบบครบวงจร (API)
การปรับปรุง AI เอเจนต์หมายถึงการปรับปรุงพรอมป์ต์ เครื่องมือ และวิธีจัดการกรณีขอบเขตของเอเจนต์ test-calls API จะเรียกใช้การโทรจริง (บอตถึงบอตหรือ SIP loopback) กับเอเจนต์โดยใช้พรอมป์ต์สถานการณ์ที่คุณระบุ — ทุกการรันจะสร้างบันทึกการโทรจริงพร้อม ทรานสคริปต์ การให้คะแนน และการเรียกเก็บเงิน เพื่อให้คุณเห็นพฤติกรรมของเอเจนต์ และค่าใช้จ่ายได้อย่างชัดเจน
ใช้สำหรับ:
- การทดสอบเบื้องต้นก่อนปรับใช้หลังแก้ไขพรอมป์ต์ทุกครั้ง
- ชุดทดสอบการถดถอยที่เชื่อมต่อกับ CI (เชื่อมเว็บฮุก
test-call.completed→ ให้บิลด์ล้มเหลวหากคะแนนลดลง) - ทดสอบขีดจำกัดการทำงานพร้อมกันภายใต้ภาระหนัก
การรันครั้งเดียว: สถานการณ์เดียว
curl -X POST https://api.thunderphone.com/v1/test-calls \
-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 | สตริง | ใช่ | agent หรือ phone_number |
target_id | จำนวนเต็ม | ใช่ | ID ของเอเจนต์ (หรือ ID ของหมายเลขโทรศัพท์) |
direction | สตริง | ใช่ | outbound (บอตโทรออก) หรือ inbound (บอตรับสาย) |
scenario_prompt | สตริง | ไม่ | กำหนดสิ่งที่บอตทดสอบจะพูด |
mode | สตริง | ไม่ | bot (บอตถึงบอต ค่าเริ่มต้น) หรือ sip (SIP loopback) |
consent_to_charge | บูลีน | ใช่ | ต้องเป็น true การโทรทดสอบมีค่าใช้จ่าย 2× อัตราปกติ |
target_number | สตริง | ไม่ | แทนที่ ID ผู้โทรของบอต (E.164) |
การตอบกลับเป็น ออบเจ็กต์การรันการทดสอบการโทร
ที่มี status="queued" ตรวจสอบเป็นระยะจน status เปลี่ยนเป็น completed หรือ
failed; เมื่อกำหนด call_id แล้ว ให้โหลดทรานสคริปต์ผ่าน
GET /v1/calls/{call_id}/transcript
ชุดงาน: สถานการณ์แบบขนาน
เรียกใช้สถานการณ์ N รายการพร้อมกัน — มีประโยชน์สำหรับชุดทดสอบการถดถอยที่ ทดสอบทุกกรณีขอบเขตที่ทราบแบบขนาน:
curl -X POST https://api.thunderphone.com/v1/test-call-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 ของ ID การรันย่อย ดึงสถานะของชุดงาน:
curl https://api.thunderphone.com/v1/test-call-batches/{batch_id} \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"
run_count จำกัดสูงสุดที่ 20; stagger_seconds จะเว้นระยะการสร้างงาน
เพื่อหลีกเลี่ยงการส่งคำขอถี่เกินไปไปยังเอเจนต์ (0–60 วินาที)
เชื่อมต่อกับ CI
สร้างชุดทดสอบเกตการเผยแพร่บนหน้า การจำลอง
(/dashboard/simulations) — เลือกเอเจนต์ เพิ่มสถานการณ์ด้วยตนเองหรือ
คลิก สร้างสถานการณ์ด้วย AI เพื่อร่างสถานการณ์จากพรอมป์ต์ของเอเจนต์
(พร้อมตัวเลือกสำหรับตรวจสอบกรณีขอบ) แล้วจัดกลุ่มเป็นชุดทดสอบ
ชุดทดสอบจะตรึงสถานการณ์และเอเจนต์ รวมถึงอัตราการผ่านขั้นต่ำและกฎที่เลือกได้ว่าต้องไม่มีความล้มเหลวระดับวิกฤต การรันที่ผ่านจะกลายเป็นข้อมูลอ้างอิงที่ยอมรับได้ การเปลี่ยนจากผ่าน→ไม่ผ่านในภายหลังจะแสดงเป็นการถดถอย
ใช้คีย์ API ขององค์กรใน CI
สคริปต์นี้เริ่มชุดทดสอบ ตรวจสอบสถานะจนกว่าการให้คะแนนและการเปรียบเทียบจะเสร็จสมบูรณ์
และออกด้วยสถานะที่ไม่ใช่ศูนย์ เว้นแต่คำตัดสินจะเป็น 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 จากบันทึกการโทรที่ได้แต่ละรายการ