একটি এজেন্টকে শুরু থেকে শেষ পর্যন্ত পরীক্ষা করুন (API)
একটি AI এজেন্টের ওপর পুনরাবৃত্তিমূলক কাজ করার অর্থ হলো এর prompt, টুল, এবং এটি যেভাবে edge case পরিচালনা করে সেগুলোর ওপর পুনরাবৃত্তিমূলক কাজ করা। simulations API আপনার দেওয়া সিনারিও prompt ব্যবহার করে একটি এজেন্টের বিরুদ্ধে বাস্তব কল চালায়। কোনো এজেন্টকে লক্ষ্য করলে bot-to-bot রান তৈরি হয়; কোনো ফোন নম্বরকে লক্ষ্য করলে SIP loopback রান তৈরি হয়। প্রতিটি রান transcript, grading এবং billing-সহ একটি বাস্তব কল লগ তৈরি করে, ফলে এজেন্টটি ঠিক কীভাবে আচরণ করে এবং এর খরচ কত তা আপনি দেখতে পান।
এটি ব্যবহার করুন:
- প্রতিটি prompt সম্পাদনার পর ডিপ্লয়-পূর্ব smoke test-এর জন্য
- CI-এর সঙ্গে সংযুক্ত regression suite-এর জন্য (
test-call.completedwebhook যুক্ত করুন → স্কোর কমলে build ব্যর্থ করুন) - concurrency সীমা stress-test করার জন্য
One-shot: একক রান
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 | হ্যাঁ | এজেন্ট id (অথবা ফোন নম্বর id) |
direction | string | না | outbound (ডিফল্ট; টেস্ট কলার কল করে) অথবা inbound (টেস্ট কলার কলের উত্তর দেয়) |
scenario_prompt | string | না | টেস্ট bot কী বলবে তা নির্ধারণ করে |
language / primary_language | string | না | টেস্ট কলারের ভাষা; অসমর্থিত কোড প্রত্যাখ্যান করা হয় |
simulator_product | string | না | testing (ডিফল্ট) অথবা আরও মানবসদৃশ সিমুলেটেড কলারের জন্য spark, যেমন warm-transfer consult test |
consent_to_charge | boolean | হ্যাঁ | অবশ্যই true হতে হবে। আনুমানিক খরচে নির্বাচিত এজেন্ট এবং সিমুলেটেড কলার, পাশাপাশি যেকোনো telephony leg-এর বিল অন্তর্ভুক্ত থাকে |
target_number | string | না | রিমোট পাশের জন্য E.164 override; অন্যথায় প্ল্যাটফর্মের টেস্ট নম্বর ব্যবহার করা হয় |
mode কেবল-পঠনযোগ্য এবং target_type থেকে নির্ধারিত হয়: agent তৈরি করে
mode="bot", আর phone_number তৈরি করে mode="sip"।
রেসপন্সটি status="queued" অবস্থায় একটি simulation run object।
status completed বা failed না হওয়া পর্যন্ত poll করুন; call_id সেট হয়ে গেলে
GET /v1/calls/{call_id}/transcript-এর মাধ্যমে transcript লোড করুন।
ব্যাচ: সমান্তরাল সিনারিও
একসঙ্গে Nটি সিনারিও চালান — এমন regression suite-এর জন্য উপযোগী যা পরিচিত প্রতিটি edge case-এ সমান্তরালে আঘাত করে:
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
}'
রেসপন্সে child run id-গুলোর একটি 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 spawn-গুলোর মধ্যে
ব্যবধান রাখে (0–60 s)।
CI-তে সংযুক্ত করুন
সিমুলেশন পৃষ্ঠায়
(/dashboard/simulations) একটি রিলিজ গেট স্যুট তৈরি করুন — এজেন্ট বেছে নিন, হাতে করে পরিস্থিতি যোগ করুন অথবা এজেন্টের
prompt থেকে (ঐচ্ছিক এজ-কেস পর্যালোচনাসহ) খসড়া তৈরি করতে AI দিয়ে পরিস্থিতি তৈরি করুন-এ ক্লিক করুন, তারপর সেগুলোকে একটি স্যুটে গ্রুপ করুন।
একটি স্যুট তার পরিস্থিতি ও এজেন্টের পাশাপাশি ন্যূনতম পাস রেট এবং ঐচ্ছিক শূন্য-গুরুতর-ব্যর্থতার নিয়ম নির্দিষ্ট করে রাখে। পাস করা রান গ্রহণযোগ্য বেসলাইন হয়ে যায়; পরে পাস→ব্যর্থ রূপান্তরগুলো রিগ্রেশন হিসেবে ফেরত দেওয়া হয়।
CI-তে একটি প্রতিষ্ঠানের API কী ব্যবহার করুন।
এই স্ক্রিপ্টটি স্যুট ট্রিগার করে, গ্রেডিং ও তুলনা সম্পন্ন হওয়া পর্যন্ত পোল করে এবং রায় 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 কী-এর প্রতিষ্ঠানের সঙ্গে যুক্ত করে।
ধরণ
প্রতি-prompt রিগ্রেশন করপাস
{name, scenario_prompt, expected_outcome}
টুপলের একটি JSON ফাইল রক্ষণাবেক্ষণ করুন। প্রতিটি prompt পরিবর্তনের সময় পুরো সেটটি ব্যাচ হিসেবে চালান; আগের রানের সঙ্গে ট্রান্সক্রিপ্ট ও গ্রেডের পার্থক্য দেখুন।
প্রতি-রিলিজ স্মোক টেস্ট
প্রতিটি ডিপ্লয়ের পরে চালানোর জন্য পাঁচটি সফল-পথ পরিস্থিতির একটি একক ব্যাচ। এটি ল্যাটেন্সি-সংবেদনশীল, তাই stagger_seconds: 0 রাখুন।
ল্যাটেন্সি বেঞ্চমার্কিং
বিভিন্ন প্রোডাক্ট টিয়ার (spark,
bolt, storm-base) জুড়ে একই পরিস্থিতি চালান। প্রতিটি ফলস্বরূপ কল লগ থেকে call.graded স্কোর এবং
duration_seconds তুলনা করুন।
পরবর্তী ধাপ
প্রতিটি কোয়েরি প্যারামিটার, স্ট্যাটাস কোড এবং ব্যাচের কাঠামো।
সময়ের সঙ্গে গুণমান ট্র্যাক করতে প্রতিটি টেস্ট রান স্বয়ংক্রিয়ভাবে স্কোর করুন।
নির্দিষ্ট টেস্ট মানবীয় পর্যালোচনার জন্য চিহ্নিত করুন।
ফলাফল আপনার CI / Slack / PagerDuty-তে স্ট্রিম করুন।