How to Evaluate Live & Voice Agents in ADK
TL;DR · AI 摘要
Google ADK新增原生实时评估功能,支持语音代理的全面测试,提升生产环境可靠性。
核心要点
- 使用gemini-live-2.5-flash-native-audio模型构建多阶段语音代理评估流程
- 通过模拟用户音频交互实现端到端对话评估
- 提供代码示例展示从演示到生产验证的完整闭环
结构提纲
按章节快速跳转。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- ADK实时评估
- 评估流程
- 创建代理
- 编写测试用例
- 执行评估
- 技术实现
- gemini-live-2.5-flash-native-audio模型
- 音频交互模拟
金句 / Highlights
值得收藏与分享的关键句。
Behavior that sounded perfect yesterday can quietly change on the next prompt tweak or model iteration.
You can now drive a live, voice-based agent with a simulated user that speaks its turns as audio
The example uses gemini-live-2.5-flash-native-audio model for three sequenced agents
如何在 ADK 中评估实时与语音代理 - Google 开发者博客
Google Tag Manager (noscript)
结束 Google Tag Manager (noscript)
HTML
如何在 ADK 中评估实时与语音代理
2026 年 8 月 24 日
Stephen Allen
解决方案架构师
AI 应用与平台
分享
- 邮件
将实时代理投入生产不仅仅是有一个好的演示。它需要在对话的每个回合中采取正确的行动,其中时机和恢复能力与内容同样重要。昨天听起来完美的行为,可能在下一个提示调整或模型迭代后悄然改变。工具可能停止触发,上下文可能在回合之间丢失,插话可能被忽略。只有通过可重复的证据证明代理能够在真实用户实际进行的对话中保持稳定,才能有信心地发布。
这就是为什么我们为 ADK 原生引入了实时评估功能。现在你可以使用模拟用户驱动一个实时语音代理,该用户以音频形式说出其回合,对语音回复进行评分,并且所有操作都可以在你为文本代理运行的相同评估循环中完成。本文将展示如何在不离开 ADK 的情况下,将实时代理从“演示中有效”提升到“经过测量和验证”的状态。
评估你的第一个实时代理
要实际看到这一过程,我们将构建一个完整的实时评估循环:创建代理、编写评估用例、运行评估并检查记录的结果。
第 1 步:被测代理
我们的示例使用基于图的工作流程:三个单用途实时代理按顺序组合,每个阶段都在 gemini-live-2.5-flash-native-audio 上运行。
from google.adk.agents.llm_agent import Agent
from google.adk.tools.tool_context import ToolContext
from google.adk.workflow import START, Workflow
from pydantic import BaseModel, Field
LIVE_MODEL = "gemini-live-2.5-flash-native-audio"
def validate_date_of_birth(dob: str, tool_context: ToolContext) -> dict:
"""验证确认的出生日期与记录(模拟)."""
match = dob == "1985-07-12"
tool_context.state["dob_verified"] = match
return {"match": match}
greeter_agent = Agent(
model=LIVE_MODEL,
name="greeter_agent",
mode="task",
instruction="你叫 Sam,是友好的护理团队助理。向来电者问候,确认你正在与 John Doe 通话,然后再分享其他信息。每回合只问一个问题,然后在确认姓名后完成任务。",
)
dob_verifier_agent = Agent(
model=LIVE_MODEL,
name="dob_verifier_agent",
mode="task",
tools=[validate_date_of_birth],
instruction="询问来电者的出生日期,读回以确认,然后以 YYYY-MM-DD 格式调用 validate_date_of_birth。任务完成后返回 'verified' 或 'unverified'。",
)
goals_agent = Agent(
model=LIVE_MODEL,
name="goals_agent",
mode="task",
instruction="身份已验证。主动告知下周二 6 月 16 日下午 3 点与 Example 博士的预约,回答任何问题,然后温暖结束对话并以 'Goodbye.' 结束。",
)
root_agent = Workflow(
name="live_workflow",
edges=[
(START, greeter_agent),
(greeter_agent, dob_verifier_agent),
(dob_verifier_agent, goals_agent),
],
)Python
已复制
每个阶段都是一个普通的实时代理,工作流程仅负责协调它们并传递各阶段之间的输出。该流程会经历三个步骤并在中间调用工具,因此会生成一条值得评估的丰富多轮交互轨迹。当控制权在代理之间切换时,用户不会察觉到交接过程。整个交互过程中音频流始终保持开启状态,ADK 会将累积的会话状态和对话历史传递给后续代理,使每个代理都能在上下文中继续处理,而不是从零开始。
步骤 2:编写评估集
评估集是一个包含测试用例的 JSON 文件。测试用例与执行方式解耦,因此你可以混合使用两种不同风格:对话场景和固定对话。
第一种是对话场景:你描述一个目标和一个角色设定,用户模拟器会即兴生成对话回合。
{
"eval_id": "example_scenario_case",
"conversation_scenario": {
"starting_prompt": "Hello?",
"conversation_plan": "你叫约翰·多伊。当被问候时确认你的名字。当被询问出生日期时,给出 1985 年 7 月 12 日,并在读取回传时确认。聆听预约详情,询问需要带什么去就诊,然后表示没有其他问题并让通话结束。",
"user_persona": "NOVICE"
},
"session_input": {
"app_name": "live_workflow",
"user_id": "test_user_id",
"state": {}
}
}JSON
user_persona 决定了模拟用户如何沟通。ADK 内置了几个预设角色,NOVICE 会指示模拟器仅分享高层次目标并等待代理询问细节,从而测试代理引导对话的能力。角色设定由提示驱动而非硬编码,因此你可以用自己的角色扩展该集合。当对话计划满足时,模拟器会自行结束场景,因此你只需编写目标并让其决定何时结束通话。为防止对话无限延续,max_allowed_invocations 会限制最大回合数,为每个动态案例提供可预测的上限。
你也可以编写固定对话并逐字脚本化用户回合。静态案例与模拟用户一样,都是实时运行的有效输入。
{
"eval_id": "example_fixed_case",
"conversation": [
{
"user_content": {
"role": "user",
"parts": [{ "text": "你好,是的,我是约翰·多伊。" }]
}
},
{
"user_content": {
"role": "user",
"parts": [{ "text": "我的出生日期是 1985 年 7 月 12 日。" }]
}
}
]
}步骤 3:启用实时和音频功能
在你的 test_config.json 中添加 live_model_config 并指向 llm_audio 用户模拟器。上述案例中的每个用户回合都会通过你选择的 Gemini TTS 语音合成语音,并流式传输给实时代理。
{
"criteria": {
"rubric_based_multi_turn_trajectory_quality_v1": {
"threshold": 0.7,
"judge_model_options": { "judge_model": "gemini-3.7-flash" },
"rubrics": [
{
"rubric_id": "verifies_identity_first",
"rubric_content": {
"text_property": "在整个对话过程中,代理首先确认来电者姓名并验证其出生日期,之后才透露任何预约详情。"
}
}
// ...其他端到端评分标准
]
}
},
"live_model_config": {
"timeout_seconds": 300
},
"user_simulator_config": {
"type": "llm_audio",
"model": "gemini-3.7-flash",
"max_allowed_invocations": 10,
"audio_model": "gemini-3.1-flash-tts-preview",
"audio_model_configuration": {
"response_modalities": ["AUDIO"],
"speech_config": {
"voice_config": {
"prebuilt_voice_config": { "voice_name": "Kore" }
},
"language_code": "en-US"
}
}
}
}有几个要点需要特别说明:
- live_model_config 启用实时模式。省略此配置时,测试用例将在标准文本模式下运行。
- model 与 audio_model 的区别:model 负责模拟用户的对话逻辑,而 audio_model 将这些对话转换为语音。通过调整 voice_name 和 language_code 可测试代理在不同语音和口音下的表现。
- criteria 配置指标和通过/失败阈值。基于评分标准的LLM评估者(如对话轨迹质量)可对对话进行端到端评估,非常适合多代理图场景。您也可以附加每轮对话指标来评分单个回复或工具执行。
语音回复可能有数百种不同的表达方式。自然语言评分标准会像人类评审一样判断意图,只需定义一次即可自动应用于套件中的所有对话。
第4步:运行评估
准备好代理、评估集和配置后,通过CLI运行评估:
uv run adk eval \
contributing/samples/live/live_workflow \
contributing/samples/live/live_workflow/live_workflow.evalset.json \
--config_file_path contributing/samples/live/live_workflow/test_config.jsonShell
注意:确保已安装评估扩展(uv pip install -e ".[eval]"),并为Live API和Gemini TTS配置了API凭证。
通过AgentEvaluator可编程调用相同流程,使实时语音评估轻松集成到CI/CD管道中,可在发布前捕获回归问题。
第5步:在ADK Web中查看结果
对于交互式调试,ADK Web现在原生支持实时评估。运行设置对话框包含标准 | 实时模式切换选项。选择实时模式后,会显示输入模态选项(音频或文本)以及模拟用户的语音和语言设置。
运行完成后,ADK会将实时音频流重建为清晰的文本记录。每轮对话会以独立的消息气泡呈现,包含文本记录和内联可播放音频片段,使您能够评估代理的声音表现,而不仅仅是对话内容。
入门指南
准备测试实时代理了吗?克隆live_workflow示例,运行adk eval,并在ADK Web中查看结果。
查看ADK文档获取关于用户模拟、合成音频配置文件和自定义评估指标的深度指南。您的语音代理无需依赖直觉即可发布——现在它可以基于可衡量的数据发布。
发布分类:
- AI
- Cloud
- 教程
- 学习
上一篇
下一篇
相关文章
列表
AI
案例研究
社区
使用深度学习和 Keras 解码宇宙信号
2026年8月27日
云服务
教程
公告
使用 Google Cloud API Gateway 进行模型路由
2026年8月4日
网络
通过 LiteRT 和 Gemma 掌握 Raspberry Pi 边缘 AI
2026年8月11日
最佳实践
在 Cloud TPU 上实现长上下文多模态嵌入推理的企业级精度
2026年8月26日
导航点