يُجري الاختبار مكالمة واحدة نصيًا: يؤدي متصل محاكى دور scenario، ويجيب الوكيل من مسودته (التعليمات والرسالة الأولى والمعرفة)، ويحكم مُقيّم على المحادثة وفق success_criteria. اكتب اختبارات للمكالمات المهمة، وشغّلها بعد كل تغيير، وانشر عندما تنجح.
curl https://evasay.com/api/v1/voice/agents/AGENT_ID/tests \
-X POST \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{
"name": "Move a booking",
"scenario": "A regular customer wants to move Friday 3 pm to Saturday morning.",
"success_criteria": "Offers Saturday times and confirms the new time and the customer'"'"'s name.",
"max_turns": 8
}'
يشغّل POST /agents/{id}/test-runs جميع اختبارات الوكيل، أو تلك الموجودة في test_ids، ويرد بتشغيل واحد لكل اختبار (status: "running"). استعلم عن GET /test-runs/{id} حتى تصبح status إحدى القيم passed أو failed أو error؛ عندها يحتوي التشغيل على transcript وreason الخاص بالمُقيّم (بالإنجليزية، أو بالصينية مع reason_language: "zh"). كل تشغيل يكلّف Credits تظهر بجانب الاختبارات في لوحة التحكم؛ وتتوقف التشغيلات عند أول تشغيل لا يغطيه الرصيد، ويعرض not_started البقية. ويُسترد ثمن التشغيل الذي تعذّر إجراؤه. تتحقق الاختبارات مما يقوله الوكيل، لا من صوته أو توقيته، ولا تستدعي دواله: جرّبها مسبقًا عبر POST /tools/{id}/test. للوكيل حتى 30 اختبارًا؛ ويعدّل PATCH وDELETE /agents/{id}/tests/{test_id} اختبارًا أو يحذفانه.
إلى جانب المكالمات الكاملة (type: "simulation"، الافتراضي)، يمكن للاختبار أن يتحقق من رد واحد. يأخذ type: "next_reply" الحقل chat_history، أي المحادثة السابقة المنتهية بكلام المتصل ([{role, text}]، حيث role هو caller أو agent)، والحقل success_criteria لرد الوكيل التالي. ويأخذ type: "tool_call" الحقلين chat_history وexpected_tool {name, arguments, match}: يجب أن يستدعي الوكيل name (إحدى دواله، أو end_call أو transfer_call أو handoff_to_agent) مع arguments، وتُقارن القيم بدقة (بعد إزالة المسافات الطرفية ودون تمييز حالة الأحرف) أو حسب المعنى مع match: "judge"؛ وتُتجاهل الوسائط الأخرى التي يمررها. ويعرض transcript الخاص بالتشغيل الدوال التي استدعاها الوكيل في tool_calls.
يقترح POST /agents/{id}/tests/generate اختبارات من مسودة الوكيل: تعليماته ومعرفته ودواله. ويأخذ count (من 1 إلى 10، والافتراضي 5) وtypes وfocus (ما يجب تغطيته) وlanguage (en أو zh للأسماء والمعايير)، ويكلّف Credits بقدر تشغيل واحد، ويعيد مسودات تراجعها ثم ترسلها إلى POST /agents/{id}/tests؛ ومع save: true يحفظها مباشرة.