一个测试用文字模拟一通电话:模拟来电者按 scenario 扮演,Agent 用草稿(指令、开场白和知识库)回答,再由评审按 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": "改约",
"scenario": "老顾客想把周五下午 3 点的预约改到周六上午。",
"success_criteria": "给出周六可约的时间,并确认新的时间和顾客姓名。",
"max_turns": 8
}'
POST /agents/{id}/test-runs 运行 Agent 的全部测试(或 test_ids 里的几个),每个测试返回一次运行(status: "running")。轮询 GET /test-runs/{id},直到 status 变成 passed、failed 或 error,这时运行里有 transcript 和评审的 reason(默认英文,reason_language: "zh" 为中文)。每次运行消耗点数,数额在工作台的测试页显示;余额不够时从付不起的那个开始不再运行,not_started 列出没运行的测试。没跑完的运行会退回点数。测试检查的是 Agent 说了什么,不检查声音和时延,也不会真的调用函数:函数请用 POST /tools/{id}/test 预览。每个 Agent 最多 30 个测试,PATCH、DELETE /agents/{id}/tests/{test_id} 修改或删除。
除了完整通话(type: "simulation",默认),测试也可以只检查一句回复。type: "next_reply" 需要 chat_history,即这句回复之前、以来电者结尾的对话([{role, text}],role 为 caller 或 agent),以及判断 Agent 下一句回复的 success_criteria。type: "tool_call" 需要 chat_history 和 expected_tool {name, arguments, match}:Agent 应该调用 name(它的某个函数,或 end_call、transfer_call、handoff_to_agent),并传入 arguments;参数按精确值比较(去掉首尾空格、不区分大小写),设为 match: "judge" 时按意思比较;Agent 多传的参数不检查。运行的 transcript 里,tool_calls 记录 Agent 调用了哪些函数。
POST /agents/{id}/tests/generate 根据 Agent 的草稿(指令、知识库和函数)生成测试草稿。参数有 count(1–10,默认 5)、types、focus(要覆盖的情况)和 language(en 或 zh,用于名称和标准),按一次运行扣点数,返回的草稿可以检查后提交给 POST /agents/{id}/tests;带 save: true 时直接保存。