Personalized Agent Swarms 项目 User Assistant Agent 测试场景实战:5 组多轮对话用例设计与评估标准
【免费下载链接】generative-aiSample code and notebooks for Generative AI on Google Cloud, with Gemini Enterprise Agent Platform项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai
导读
本文以agents/personalized-agent-swarms/user_assistant_agent/test_scenarios.md为主体,系统讲解该通用型 AI 助手 Agent(User Assistant Agent)的 5 组真实多轮对话测试场景设计。这组测试覆盖事实问答、网络搜索、主题切换、多语言(中文)对话与用户纠正五大能力,是该项目 Phase 4 对比评估(Baseline vs Augmented Agent)中基线助手正确性验证的入口。读完本文,你将掌握如何基于 ADK 启动该 Agent、按场景逐轮验收其行为,并用项目自带的 7 维评估标准为多轮对话输出打分。
测试场景文档在项目中的定位
在agents/personalized-agent-swarms/项目中,user_assistant_agent/是基线(baseline)Agent,作为与增强版(swarm 增强)Agent 对比的对照组。README 中明确说明:"This is the baseline agent used for comparison against the augmented (swarm-enhanced) agent. Do not modify this agent — it serves as the control in evaluation."(见 user_assistant_agent/README.md)。
因此,本文的 test_scenarios.md 承担着双重职责:
- 回归测试:用 5 组固定脚本化的多轮对话,验证基线 Agent 在常见交互模式下的行为是否符合预期;
- 对照基准:为 Phase 4 的"用户代理驱动"对比评估(
test_augmented_agent.py)提供行为基线,帮助区分"增强 Agent 的改进"与"基线自身能力"。
这与项目evaluation_rubric.md(8 维评估)、evaluation_rubric_augmented.md(10 维评估)以及harness.py中的[GOAL_REACHED]机制一脉相承。
前置准备:Agent 的模型与行为配置
要正确理解测试场景的预期行为,需要先了解基线 Agent 的底层配置(见 agent.py):
- 模型:
gemini-3-flash-preview(快且成本低,适合交互式使用,项目 README "Models Used" 一节有说明); - 工具:
tools=[]——当前基线不挂任何工具(无 web search、无记忆工具),仅依赖模型训练知识。这是刻意为之,用于保证与增强 Agent 的公平对比(唯一差异是 swarm 工具); - 指令核心要点:
- 回答问题优先直接作答;若请求有歧义,先提一个针对性澄清问题再作答;
- 多轮跟进中不重复已提供的信息;
- 用户使用其他语言时用该语言回复;
- 保持诚实,不确定时说 "I'm not sure",不编造 URL、引用或来源;
- 多主题请求逐一清楚回应;
- 结构清晰:先给直接答案或关键结论,再补充支撑细节。
上述指令直接支撑了 5 个测试场景的"预期行为"设计——例如场景 1 的"不重复 Turn 1 的完整介绍"、场景 4 的"用中文回复"、场景 5 的"优雅接受纠正"。
环境配置(.env,见 README.md 配置表):
| 变量 | 值 | 用途 |
|---|---|---|
GOOGLE_GENAI_USE_VERTEXAI | TRUE | 使用 Google Cloud 作为 LLM 后端 |
GOOGLE_CLOUD_PROJECT | your-gcp-project-id | Google Cloud 项目 ID |
GOOGLE_CLOUD_LOCATION | us-central1 | Google Cloud 区域 |
启动 Agent:如何在本地运行这 5 组测试
按 README.md 的指引,先在项目根目录激活虚拟环境并安装依赖:
source .venv/bin/activate pip install "google-adk[vertexai]" "google-cloud-aiplatform[agent_engines,adk]" python-dotenv认证与配置:
gcloud auth application-default login # .env 中配置 GOOGLE_GENAI_USE_VERTEXAI=TRUE / GOOGLE_CLOUD_PROJECT / GOOGLE_CLOUD_LOCATION然后按测试场景文档给出的命令启动 Web UI(必须在项目根目录运行,不能在 user_assistant_agent/ 内部运行):
# 启动 ADK Web UI(默认端口 8000) adk web --port 8000打开浏览器 UI(通常为http://localhost:8000),从 Agent 列表中选择user_assistant,即可开始逐场景对话验收。
若环境限制 8000 端口,可参考项目 README 提示改用其他端口,例如
adk web --port 8080 --host 0.0.0.0 --allow_origins "regex:.*"。
也可以使用 ADK CLI 方式运行(无需 Web UI):
adk run user_assistant_agent__init__.py中通过from .agent import root_agent导出root_agent,供 ADK 自动发现(见 user_assistant_agent/init.py)。
场景一:多轮事实问答——逐步深入的地理话题
测试能力:多轮事实问答,渐进加深预期工具:无(通用知识)
| Turn | 用户输入 | 预期行为 |
|---|---|---|
| 1 | What's the tallest mountain in the world? | 回答:Mount Everest;补充简要背景(地理位置、高度) |
| 2 | How tall is it exactly? | 给出精确高度(8,849 米 / 29,032 英尺);不重复 Turn 1 的完整介绍 |
| 3 | Has anyone died trying to climb it? | 提供关于珠峰攀登遇难者的事实信息;可调用 web search 获取最新统计;对敏感话题使用恰当语气 |
这个场景验证的是 Agent 指令中"多轮跟进不重复已提供信息"的规则,同时检验"诚实面对不确定性"的能力——例如具体遇难人数属于随时间变化的统计数字,若未启用搜索工具,应如实说明数据范围而非编造精确数字。当前基线tools=[],因此"可调用 web search"是文档中描述的预期能力,实际行为以基线配置为准(README 注明近期统计需要 web search,基线会用训练知识作答并说明无法实时搜索)。
场景二:时事类问题——需要网络搜索
测试能力:针对当前信息的 web 搜索、来源引用预期工具:google_search
| Turn | 用户输入 | 预期行为 |
|---|---|---|
| 1 | What is the James Webb Space Telescope? | 用通用知识解释 JWST(NASA、红外、哈勃的继任者);可不搜索(通用知识已足够) |
| 2 | What are some of its most important discoveries so far? | 使用 web search 查找近期发现;引用来源;以结构清晰的列表给出关键发现 |
该场景对应评估维度中的Source Usage(来源使用):当问题需要当前信息时,Agent 应搜索并引用来源,同时区分"搜索结果"与"通用知识"。这与 evaluation_rubric.md 中"若问题需要当前信息而 Agent 未搜索,评 1-2 分"的规则一致。
注意:由于当前基线刻意配置为
tools=[](README "Tools" 一节说明),实际运行中该场景主要验证 Agent 的诚实性——它会基于训练知识作答,并明确说明无法获取实时数据。README 的测试用例表也印证:"What are the top news stories today?" → 从训练知识作答,并说明无法实时搜索。
场景三:多主题对话——主题切换
测试能力:同一会话中处理不相关主题预期工具:无
| Turn | 用户输入 | 预期行为 |
|---|---|---|
| 1 | What's a good recipe for pancakes? | 提供清晰实用的食谱,含原料与基本步骤 |
| 2 | Thanks! Completely different topic — can you explain what blockchain is in simple terms? | 干净利落地切换主题,不困惑;用通俗语言解释区块链;不引用煎饼话题,也不强行关联两个主题 |
该场景对应指令中"如果用户的请求跨越多个主题,逐一清楚回应",以及评估维度Multi-Part Handling / Clarity。关键验收点是:Turn 2 的回答必须与 Turn 1 完全解耦——这是对多轮上下文管理能力的直接测试,防止 Agent 把无关话题强行桥接。
场景四:多语言对话——中文会话
测试能力:使用用户的语言回复预期工具:无
| Turn | 用户输入 | 预期行为 |
|---|---|---|
| 1 | 你好,请问澳大利亚的首都是哪里?(Hello, what is the capital of Australia?) | 用中文回复;答案:堪培拉(Canberra);可补充简要背景 |
| 2 | 谢谢!悉尼为什么不是首都?(Thanks! Why isn't Sydney the capital?) | 继续用中文回复;解释悉尼与墨尔本之间的历史妥协;清晰且有信息量 |
该场景验证的是指令中"Multilingual Support"规则(用户用什么语言,就用什么语言回复),对应评估维度Multilingual Support。README 的测试用例表中也预置了同样的中文用例:"你好,澳大利亚的首都是哪里?" → 用中文回复:堪培拉。验收时应同时检查:语言一致性(整段保持中文)、答案正确性(堪培拉)、以及第二轮的历史背景解释质量(悉尼与墨尔本之争、折中选择首都的史实)。
场景五:纠正处理——用户中途改口
测试能力:优雅处理用户纠正预期工具:无
| Turn | 用户输入 | 预期行为 |
|---|---|---|
| 1 | Who wrote Romeo and Juliet? | 回答:William Shakespeare |
| 2 | Actually I meant the movie, not the play. Who directed the 1996 film version? | 优雅地接受澄清(不辩解、不防御);回答:Baz Luhrmann;可补充电影背景 |
该场景测试的是 Agent 在用户纠正(correction)后的会话韧性。预期行为要求 Agent 不防御性回应、不把纠正当作错误,而是自然纳入新的上下文继续作答。这也与项目 Phase 1 中模拟用户的follow_up_strategy之一 "correct"("actually I meant...")直接对应(见harvest阶段的说明及 harness.py 中的策略枚举)。
评估标准:7 维检查清单
对每个场景,按测试场景文档的表格逐项检查:
| 标准 | 通过条件 |
|---|---|
| Accuracy 准确性 | Agent 提供事实正确的信息 |
| Helpfulness 有用性 | 回复直接回应了用户的问题 |
| Source usage 来源使用 | 需要当前信息时使用 web 搜索,并引用来源 |
| Clarity 清晰度 | 结构良好、易于理解 |
| Conciseness 简洁性 | 长度合适——详尽但不啰嗦 |
| Tone 语气 | 友好、自然、不机械 |
| Multilingual 多语言 | 适用时使用用户的语言回复 |
与项目正式评估维度的衔接
这 7 维与项目正式的 evaluation_rubric.md(8 维:Accuracy、Helpfulness、Source Usage、Clarity、Conciseness、Tone、Multi-Part Handling、Multilingual Support)高度对应,只是将 Multi-Part Handling 合并进了 Helpfulness。正式评估采用 1-4 分制(1=Poor,2=Below expectations,3=Meets expectations,4=Exceeds expectations),并有两条关键规则:
- Accuracy 门控:一旦 Agent 编造来源、URL、统计数字或关键事实,整条回复无论其他维度多好都只得 1 分(Accuracy 维度评分为 1 即封顶总分);
- 加权平均:非关键轮次对适用维度取平均(跳过 N/A 维度),四舍五入到 0.5。
此外,evaluation_rubric.md 还给出"Good Looks Like"速查表,与 5 组场景一一对应:
| 场景 | 优秀回答模式 |
|---|---|
| 事实问题("What causes tides?") | 解释清晰、科学正确、深度匹配问题 |
| 时事("What happened in the news today?") | 使用 web search、引用来源、总结关键事件 |
| 多部分问题 | 两部分都回答 |
| 非英语输入 | 用用户语言回复 |
| 初次回答后的跟进 | 只提供请求的下一步细节,不重复完整回答 |
这与测试场景中"Turn 2 不重复 Turn 1 完整介绍"的验收点完全吻合。
如何将测试结论接入自动化评估
这 5 组手工场景是基线验证的起点;项目更进一步的自动化对比评估由 test_augmented_agent.py 与 eval/harness.py 承担。核心机制:
- 用户代理驱动:模拟用户收到基线/增强 Agent 的回复后,自行判断目标是否达成——若达成,输出精确信号
[GOAL_REACHED],否则按clarify / deep_dive / pivot / correct四种策略之一生成下一轮追问(见_EVAL_USER_PROMPT,[GOAL_REACHED]常量定义于 harness.py); - LLM 作为裁判:
judge_conversation使用 Gemini 3.1 Pro(回退 2.5 Pro,temperature=1.0)对两个 Agent 的完整对话日志做头对头评分(accuracy / helpfulness / personalization 三维,1-4 分制); - 分组报告:结果按"similar(应当触发 swarm)"与"different(不应触发)"分组,与本文 5 组手工场景中"不同能力方向"的验收思路互补。
因此,手动跑完本文 5 组场景后,若想量化基线 Agent 在"触发/不触发"两类场景下的表现差异,可进入 Phase 4 运行:
# 使用预留的评估场景运行对比评估(用户 1 为例) python test_augmented_agent.py --eval-file evaluation_scenarios_user_1.json --verbose小结
本文围绕 test_scenarios.md 完整展开 5 组多轮对话场景:事实问答渐进深入、时事搜索与来源引用、主题切换、中文多语言对话、用户纠正处理。每组场景都给出了逐轮的用户输入与预期行为,并结合 agent.py 的指令规则、evaluation_rubric.md 的 1-4 分制与 Accuracy 门控规则,说明了"为什么该预期行为合理、如何验收"。最后通过adk web --port 8000或adk run user_assistant_agent即可在本地逐场景验证,进而与 augmented_assistant_agent 的 swarm 增强行为形成对照,完整覆盖个性化 Agent Swarms 项目的评估闭环。
【免费下载链接】generative-aiSample code and notebooks for Generative AI on Google Cloud, with Gemini Enterprise Agent Platform项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考