テストは 1 本の通話をテキストで再現します。模擬の発信者が 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 のテストを実行し、テストごとに 1 件の実行(status: "running")を返します。status が passed、failed、error のいずれかになるまで GET /test-runs/{id} を問い合わせると、実行に transcript と審査役の reason(英語。reason_language: "zh" で中国語)が入ります。各実行には Credits がかかり、金額はダッシュボードのテスト画面に表示されます。残高で払えない最初の実行で止まり、残りは not_started に並びます。実行できなかった分は返金されます。テストが確かめるのはエージェントの発言で、声やタイミングは対象外です。関数も呼びません。関数は POST /tools/{id}/test で事前に確認してください。テストはエージェントごとに最大 30 件で、PATCH と DELETE /agents/{id}/tests/{test_id} で変更・削除できます。
通話全体(type: "simulation"、既定)のほかに、1 回の返答だけを確認するテストもあります。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)を指定でき、1 回の実行と同じ Credits がかかります。返ってきた案は確認してから POST /agents/{id}/tests に送ります。save: true を付けるとそのまま保存されます。