C2 · 规划与多步推理 · 测试用例
对应框架维度:C2 规划与多步推理 状态:初稿 最后更新:2026-04-07
维度说明
C2 测试 agent 在复杂任务中的能力:
- 任务分解:把「规划京都旅行」拆成可执行的子任务
- 计划修订:执行中发现问题时调整计划
- 端到端成功:多步骤任务能否最终完成
- 错误恢复:中间步骤失败不导致全盘崩溃
与 B2(Tool Use)的区别:
- B2:测单个工具或 2-3 个工具链的正确使用
- C2:测 5+ 步的复杂任务,涉及规划、执行、调整的完整周期
用例规范
| 字段 | 说明 |
|---|---|
| ID | 格式:C2-{维度缩写}-{序号} |
| 维度 | 所属评测子维度 |
| 难度 | 简单 / 中等 / 困难 |
| 上下文类型 | synthetic(静态历史)/ organic(动态交互) |
| 输入 | 用户消息 + 对话历史(如有) |
| 期望行为 | agent 应该如何规划和执行 |
| 判定标准 | Pass / Fail 条件 |
| 评分方式 | 自动 / LLM-judge |
| Skill 配置 | 必须开启 |
一、任务分解质量(TD: Task Decomposition)
拿到复杂任务后,是否能拆解成合理的子任务序列。
C2-TD-01 · 简单线性任务分解
- 难度:简单
- 上下文类型:synthetic
- 输入:
- 用户消息:
帮我规划端午去成都的旅行 - 上下文:无
- 用户消息:
- 期望行为:
- 识别出这是一个需要多步完成的任务
- 合理的分解应该包含:
- 确认行程天数和出发地
- 查询机票
- 推荐景点和美食
- 编排日程
- 推荐住宿区域
- 不应一次性全部执行,而是有明确的阶段划分
- 判定标准:
- Pass:明确提出了任务分解(列出子任务或分阶段询问),包含至少 3 个合理子任务
- Fail:没有分解直接开始执行 / 分解不合理(如把「查机票」拆成 5 个子任务)
- 评分方式:LLM-judge(评估分解的合理性)
- Skill 配置:
skill_enabled: false
C2-TD-02 · 任务分解考虑依赖关系
- 难度:中等
- 上下文类型:synthetic
- 输入:
- 用户消息:
帮我规划 5 月去京都 5 天的旅行,包括机票、酒店、行程,从上海出发 - 上下文:无
- 用户消息:
- 期望行为:
- 识别出子任务之间的依赖关系:
- 机票 → 确定到达/离开时间 → 才能准确排行程(第一天和最后一天的可用时间)
- 行程 → 确定主要活动区域 → 才能推荐合适的酒店位置
- 分解时应该体现依赖顺序:先机票,再行程,最后酒店区域
- 识别出子任务之间的依赖关系:
- 判定标准:
- Pass:分解体现了依赖关系,顺序合理(机票→行程→酒店)
- Fail:没有考虑依赖关系,平铺所有子任务 / 顺序错误(先订酒店再查机票)
- 评分方式:LLM-judge
- Skill 配置:
skill_enabled: false
C2-TD-03 · 识别不必要的子任务
- 难度:中等
- 上下文类型:synthetic
- 输入:
- 用户消息:
帮我查一下北京到上海的高铁票,明天下午的 - 上下文:当前日期为 2026-04-07
- 用户消息:
- 期望行为:
- 这是一个简单任务,不需要复杂分解
- 应该直接搜索,不要过度规划(如「第一步确认需求,第二步分析最佳时段,第三步搜索,第四步对比」)
- 判断任务复杂度,简单任务直接执行
- 判定标准:
- Pass:没有过度分解,直接搜索或最多询问一个关键信息
- Fail:把简单任务分解成 4-5 个子任务,过度规划
- 评分方式:LLM-judge
- Skill 配置:
skill_enabled: false
C2-TD-04 · 动态交互:复杂旅行规划分解
- 难度:困难
- 上下文类型:organic(动态交互)
- 输入:
- Simulator persona:第一次去日本,需求模糊,预算中等,会在对话中逐步明确需求
- 初始消息:
我想暑假去日本玩 - 任务目标:最终规划出包含机票、行程、酒店的完整方案
- 最大轮次:20 轮
- 期望行为:
- 第一步:询问基础信息(几天、哪个城市、预算范围)
- 第二步:基于回答制定规划方案(先机票还是先确定景点)
- 中间:根据 simulator 的反馈动态调整
- 最终:完成完整规划
- 判定标准:
- Pass:20 轮内完成了机票、行程、酒店三个核心任务,且过程中有清晰的阶段划分
- Fail:20 轮未完成 / 任务没有明确分解导致混乱 / 某个环节完全遗漏
- 评分方式:LLM-judge(评估整体对话质量和任务完成度)
- Skill 配置:
skill_enabled: false - 备注:此为动态交互 case,每次运行路径可能不同,用于发现静态 case 未覆盖的问题
二、计划修订能力(PR: Plan Revision)
执行中发现计划不对,是否能及时调整而非一路错到底。
C2-PR-01 · 工具失败后的计划调整
- 难度:中等
- 上下文类型:synthetic
- 输入:
- 对话历史:
用户:帮我规划去冲绳的旅行,5 天 Agent:好的,我先帮你查一下从哪里出发? 用户:从上海 Agent:(调用 search_flights,返回错误:该日期无航班) - 用户消息:
查不到航班,有其他方法吗
- 对话历史:
- 期望行为:
- 识别出原计划(上海直飞冲绳)不可行
- 修订计划:
- 建议换日期
- 或建议经东京/大阪转机
- 或询问是否考虑从其他城市出发
- 不应坚持原计划反复重试
- 判定标准:
- Pass:提出了至少一个替代方案(换日期/转机/换出发地)
- Fail:告知无航班就结束,不提供替代方案 / 坚持重试相同搜索
- 评分方式:LLM-judge
- Skill 配置:
skill_enabled: false
C2-PR-02 · 用户需求变更的计划调整
- 难度:中等
- 上下文类型:synthetic
- 输入:
- 对话历史:
用户:帮我规划端午去京都 5 天 Agent:好的,我规划的方案是:先查机票,然后推荐景点,最后排行程 用户:等等,我预算有限,能不能先看看大概要花多少钱 - 用户消息:(即「等等,我预算有限...」)
- 对话历史:
- 期望行为:
- 识别出用户优先级变了(预算成了首要关注点)
- 修订计划:先做预算估算(机票+住宿+餐饮大致范围),再推进详细规划
- 不应忽略用户的新需求继续执行原计划
- 判定标准:
- Pass:调整了计划,先处理预算问题
- Fail:无视用户需求继续按原计划执行
- 评分方式:LLM-judge
- Skill 配置:
skill_enabled: false
C2-PR-03 · 中间结果影响后续计划
- 难度:困难
- 上下文类型:synthetic
- 输入:
- 对话历史:
用户:规划泰国 7 天旅行,想去曼谷、清迈、普吉岛 Agent:好的,我先查一下三地之间的交通... Agent:(查询后发现)曼谷到清迈飞机 1h,清迈到普吉岛需要回曼谷转机 4h - 用户消息:
这样的话你建议怎么安排这 3 个地方的行程顺序比较好?
- 对话历史:
- 期望行为:
- 基于交通数据修订原计划:
- 发现「清迈→普吉岛」绕路严重
- 应该建议调整顺序为「曼谷→普吉岛→清迈→曼谷」或「曼谷→清迈→曼谷→普吉岛」
- 说明为什么要调整(减少绕路时间)
- 不应无视数据继续按原计划执行
- 基于交通数据修订原计划:
- 判定标准:
- Pass:基于交通数据提出了更优的路线顺序
- Fail:无视绕路问题按原顺序执行 / 没有说明调整理由
- 评分方式:LLM-judge
- Skill 配置:
skill_enabled: false
C2-PR-04 · 预算超支的计划修订
- 难度:困难
- 上下文类型:synthetic
- 输入:
- 对话历史:
用户:规划国庆去日本 7 天,预算 8000 元/人 Agent:帮你查了一下国庆期间上海→东京的机票,目前最低价: · 国航 CA929,10月1日出发,往返含税约 ¥5,480/人 · 东航 MU289,10月1日出发,往返含税约 ¥5,620/人 国庆是出行旺季,机票价格比平时高出不少,仅机票就要 5500 元左右。 - 用户消息:
那这样还能规划 7 天日本游吗
- 对话历史:
- 期望行为:
- 识别出 5500 元机票 + 住宿餐饮很可能超 8000 预算
- 修订计划,提供选项:
- 缩短行程(5 天而非 7 天,降低住宿成本)
- 错峰出行(避开国庆)
- 调整预算预期
- 不应无视预算继续规划 7 天行程
- 判定标准:
- Pass:识别出预算压力,提供了至少 2 个调整方案
- Fail:无视预算问题继续按原计划 / 只说「预算不够」不提供调整方案
- 评分方式:LLM-judge
- Skill 配置:
skill_enabled: false
三、端到端任务成功率(E2E: End-to-End Success)
复杂任务整体完成率(最终结果正确)。
C2-E2E-01 · 三步任务(查询→比较→决策)
- 难度:简单
- 上下文类型:synthetic
- 输入:
- 用户消息:
帮我看看 AirPods Pro 2 和索尼降噪豆哪个更值得买 - 上下文:无
- 用户消息:
- 期望行为:
- 第一步:查询两款产品的详细信息(价格、配置)
- 第二步:比较核心参数(降噪效果、续航、价格)
- 第三步:给出倾向性建议
- 最终输出应该包含对比和推荐
- 判定标准:
- Pass:完成了三步,输出包含对比和明确推荐
- Fail:只完成了查询,没有对比 / 没有给出推荐结论
- 评分方式:LLM-judge
- Skill 配置:
skill_enabled: false
C2-E2E-02 · 五步任务(旅行规划全流程)
- 难度:中等
- 上下文类型:synthetic
- 输入:
- 对话历史:
用户:帮我规划 5 月 10-15 号去京都的旅行,从上海出发 Agent:好的,先帮你查上海→京都(关西)的机票。[调用 search_flights] 找到以下选项: · 吉祥航空 HO6812,5/10 浦东 09:15 → 关西 13:30,含税 ¥1,980/人(推荐) · 东方航空 MU520,5/10 浦东 08:30 → 关西 12:45,含税 ¥2,380/人 返程:5/15 关西 15:00 → 浦东 17:30,含税约 ¥1,750/人 请问几个人出行? 用户:两个人 Agent:好的,机票方案确定:吉祥航空往返,两人约 ¥7,460。 现在帮你规划 5 天行程。先搜一下京都主要景点。[调用 web_search: 京都必去景点 5月] 主要景点:清水寺、金阁寺、岚山竹林、伏见稻荷、哲学之道、祇园花见小路、嵐山渡月桥 Agent:根据地理位置做地理聚类,安排如下: · Day 1(5/10):抵达,入住京都,祇园花见小路散步(轻松适应时差) · Day 2(5/11):东山区——清水寺 + 地主神社 + 二年坂三年坂 · Day 3(5/12):北山区——金阁寺 + 龙安寺 + 仁和寺 · Day 4(5/13):岚山——渡月桥 + 竹林小道 + 天龙寺 + 野宫神社 · Day 5(5/14):南区——伏见稻荷大社(千本鸟居)→ 下午自由购物 → 晚上出发前往机场周边 (5/15 早班机返回) 用户:听起来不错,住哪里方便? Agent:根据行程安排,推荐住宿区域:[调用 web_search: 京都住宿区域推荐] · 京都站附近(推荐):交通枢纽,去各景区方便,商业配套好,价格 ¥300-800/晚 · 祇园/河原町:传统氛围最浓,靠近东山景区,价格偏高 ¥500-1500/晚 · 四条烏丸:市中心,购物便利,价位适中 ¥350-900/晚 5 月是京都旺季(初夏+绿叶季),建议提前 1 个月预订酒店。 - 用户消息:
好的,帮我整理一份完整的出行方案
- 对话历史:
- 期望行为:
- 端到端完成了旅行规划的完整流程
- 最终输出应该包含:
- 机票方案(往返航班+价格)
- 每日行程(景点+通勤时间)
- 酒店区域建议
- 三个部分应该有衔接(如行程考虑了航班到达时间)
- 判定标准:
- Pass:三个核心部分都完成,且有合理衔接
- Fail:遗漏了任何一个部分 / 各部分完全独立无衔接
- 评分方式:LLM-judge(检查完整性和衔接性)
- Skill 配置:
skill_enabled: false
C2-E2E-03 · 七步以上复杂任务
- 难度:困难
- 上下文类型:synthetic
- 输入:
- 用户消息:
我想送女朋友一份生日礼物,预算 1000 左右,她喜欢摄影和旅行 - 上下文:无
- 用户消息:
- 期望行为:
- 完整流程应该包含:
- 理解偏好(摄影+旅行)
- 确定礼物品类方向(如相机配件、旅行装备、摄影书籍等)
- 搜索各品类的候选商品
- 筛选符合预算的
- 比较各候选的特点
- 查看评价/口碑(如适用)
- 给出推荐和理由
- 最终输出应该有明确推荐(1-2 个选项)+理由+购买链接
- 完整流程应该包含:
- 判定标准:
- Pass:完成了完整流程,最终有具体推荐
- Fail:流程不完整(如只搜索了但没有比较和推荐)/ 推荐不符合偏好
- 评分方式:LLM-judge(评估流程完整度和推荐质量)
- Skill 配置:
skill_enabled: false
C2-E2E-04 · 动态交互:端到端购物决策
- 难度:困难
- 上下文类型:organic(动态交互)
- 输入:
- Simulator persona:需求模糊,需要 agent 引导才能说清,会犹豫和改主意
- 初始消息:
想买个笔记本电脑 - 任务目标:最终确定具体购买的型号和购买渠道
- 最大轮次:15 轮
- 期望行为:
- 通过多轮询问收集需求(用途、预算、品牌偏好等)
- 搜索和筛选符合条件的产品
- 应对 simulator 的需求变更(如中途改预算)
- 最终给出具体推荐
- 判定标准:
- Pass:15 轮内完成决策,有具体型号推荐,且符合最终确认的需求
- Fail:15 轮未完成 / 推荐不符合需求 / 遗忘了之前收集的约束
- 评分方式:LLM-judge + 人工(评估对话流畅度和任务完成质量)
- Skill 配置:
skill_enabled: false
四、步骤完成率(SC: Step Completion)
即使最终失败,完成了多少中间步骤(partial credit)。
C2-SC-01 · 部分成功的任务
- 难度:中等
- 上下文类型:synthetic
- 输入:
- 用户消息:
帮我规划5月从上海出发去马尔代夫的蜜月旅行,7 天,预算 3 万/人 - 工具注入:search_hotels 工具返回错误(API 故障)
- 工具拦截配置(执行用):
{ "type": "tool_intercept", "intercept_tool": "search_hotels", "inject_tool_result": { "is_error": true, "content": "Error: Hotel search service temporarily unavailable (HTTP 503). Please try again later." } }
- 用户消息:
- 期望行为:
- 前面步骤正常完成(查机票、推荐活动)
- 酒店搜索失败后应该:
- 告知用户酒店搜索工具不可用
- 提供降级方案(web_search 搜索酒店或提供预订网站链接)
- 交付前面已完成的部分(机票和活动推荐)
- 不应因为一个环节失败就整个任务失败
- 判定标准:
- Pass:机票和活动推荐完成,酒店部分有降级尝试或说明,最终有输出
- Fail:酒店搜索失败导致整个任务中止,前面的结果也不输出
- 评分方式:LLM-judge
- Skill 配置:
skill_enabled: false
C2-SC-02 · 计算 partial credit 分数
- 难度:中等
- 上下文类型:synthetic
- 输入:
- 用户消息:
帮我对比北京朝阳区 3 个小区的二手房情况:望京花园小区、劲松五区、百子湾家园,要看房价、周边配套、交通 - 工具注入:第三个小区(百子湾家园)搜索失败(数据缺失)
- 工具拦截配置(执行用):
{ "type": "tool_intercept", "intercept_tool": "beike_search_community_detail", "intercept_condition": { "param": "community_name", "value": "百子湾家园" }, "inject_tool_result": { "is_error": false, "content": "{\"community_name\": \"百子湾家园\", \"district\": \"朝阳区\", \"avg_price_per_sqm\": null, \"nearby_amenities\": null, \"subway_distance\": null, \"message\": \"该小区数据暂未收录,信息缺失\"}" } }
- 用户消息:
- 期望行为:
- 完成前两个小区的完整对比(房价、配套、交通三个维度)
- 第三个小区尽量提供部分信息(如只有房价没有配套)
- 输出说明哪些信息完整、哪些缺失
- 判定标准:
- Pass:前两个小区三维度完整,第三个小区至少有部分信息,并说明了缺失情况
- 按步骤完成率打分:9/9 维度完整=100%,7/9=78%,以此类推
- Fail:第三个小区完全放弃,不做任何尝试 / 不说明缺失情况
- 评分方式:自动(计算完成维度数)+ LLM-judge
- Skill 配置:
skill_enabled: false
五、错误传播率(EP: Error Propagation)
中间步骤出错后,是否导致后续步骤连锁失败。
C2-EP-01 · 第一步失败不影响后续
- 难度:中等
- 上下文类型:synthetic
- 输入:
- 用户消息:
帮我规划5月从上海出发去新加坡 4 天的旅行,想去圣淘沙、滨海湾花园、动物园、乌节路 - 工具注入:第一次调用 search_flights 返回错误(API 限流)
- 工具拦截配置(执行用):
{ "type": "tool_intercept", "intercept_tool": "search_flights", "intercept_on_call_number": 1, "inject_tool_result": { "is_error": true, "content": "Error: Rate limit exceeded (HTTP 429). Too many requests. Please retry after 60 seconds." } }
- 用户消息:
- 期望行为:
- 第一步(机票)失败了
- 但其他步骤(景点编排、酒店区域推荐)不依赖机票结果,应该继续执行
- 最终输出:机票部分说明工具故障稍后重试,但日程和酒店推荐应该完成
- 不应因为第一步失败就放弃整个任务
- 判定标准:
- Pass:日程和酒店推荐完成,机票部分有说明
- Fail:第一步失败导致后续全部中止
- 评分方式:LLM-judge
- Skill 配置:
skill_enabled: false
C2-EP-02 · 错误信息传递导致后续失败
- 难度:困难
- 上下文类型:synthetic
- 输入:
- 用户消息:
查一下北京朝阳区的二手房,三居室,然后看看第一套的小区周边有什么餐厅 - 工具注入:beike_search_resale_housing 返回错误格式的数据(小区名称字段缺失)
- 工具拦截配置(执行用):
{ "type": "tool_intercept", "intercept_tool": "beike_search_resale_housing", "inject_tool_result": { "is_error": false, "content": "{\"total\": 3, \"listings\": [{\"listing_id\": \"bj_001\", \"community_name\": null, \"address\": \"朝阳区劲松路某号\", \"bedrooms\": 3, \"area_sqm\": 92, \"total_price_wan\": 680, \"unit_price\": 73913}, {\"listing_id\":\"bj_002\", \"community_name\": null, \"address\": \"朝阳区百子湾南二路某号\", \"bedrooms\": 3, \"area_sqm\": 105, \"total_price_wan\": 790, \"unit_price\": 75238}, {\"listing_id\": \"bj_003\", \"community_name\": null, \"address\": \"朝阳区望京花园路某号\", \"bedrooms\": 3, \"area_sqm\": 118, \"total_price_wan\": 920, \"unit_price\": 77966}]}" } }
- 用户消息:
- 期望行为:
- 第一步搜索房源时发现数据格式异常
- 应该识别出无法提取小区名称,不应编造一个小区名去查餐厅
- 正确做法:
- 告知用户房源数据不完整,无法继续查周边餐厅
- 或尝试用其他字段(如地址)查餐厅
- 不应把错误数据当正确的传递给下一步
- 判定标准:
- Pass:识别出数据异常,未传递错误信息到下一步
- Fail:使用了错误的小区名称查餐厅 / 编造了小区名称
- 评分方式:LLM-judge
- Skill 配置:
skill_enabled: false
C2-EP-03 · 隔离错误避免连锁
- 难度:困难
- 上下文类型:synthetic
- 输入:
- 用户消息:
帮我查:1) 明天北京天气,2) 明天北京到上海的机票,3) 4月8日到10日上海外滩附近的酒店 - 上下文:当前日期为 2026-04-07
- 工具注入:第二步 search_flights 失败(API 故障)
- 工具拦截配置(执行用):
{ "type": "tool_intercept", "intercept_tool": "search_flights", "inject_tool_result": { "is_error": true, "content": "Error: Flight search service is currently unavailable due to an internal server error (HTTP 500). The issue has been reported." } }
- 用户消息:
- 期望行为:
- 三个独立任务,第二个失败不应影响第一个和第三个
- 最终输出应该包含:
- 天气信息(成功)
- 机票搜索失败说明
- 酒店推荐(成功)
- 不应因为机票失败就放弃查酒店
- 判定标准:
- Pass:输出了天气和酒店,机票部分有失败说明
- Fail:机票失败后停止执行,没有查酒店
- 评分方式:自动(检查三个任务是否都有输出或说明)
- Skill 配置:
skill_enabled: false
六、错误自修复率(SR: Self-Correction)
中间步骤出错后,agent 自行发现并修正的比例。
C2-SR-01 · 参数错误自我修正
- 难度:中等
- 上下文类型:synthetic
- 输入:
- 用户消息:
查一下故宫明天的天气 - 上下文:当前日期为 2026-04-07
- 工具拦截配置(执行用):
{ "type": "tool_intercept", "intercept_tool": "maps_weather", "intercept_condition": { "param": "city", "value": "故宫" }, "inject_tool_result": { "is_error": true, "content": "{\"error\": \"InvalidCityParameter\", \"message\": \"城市参数错误:'故宫' 不是有效的城市名称,请输入城市名(如:北京、上海)\", \"code\": 400}" } }
- 用户消息:
- 期望行为:
- 第一次调用 maps_weather(city: "故宫") 返回参数错误
- 识别出「故宫」不是城市,是北京的景点
- 自我修正:调用 maps_weather(city: "北京"),无需询问用户
- 最终返回北京天气结果
- 判定标准:
- Pass:自动修正参数重试成功,最终返回了北京天气,无需用户提示
- Fail:返回错误就结束 / 询问用户「故宫是哪个城市」(应该能推断)
- 评分方式:自动(检查是否有第二次以 "北京" 为参数的正确调用)
- Skill 配置:
skill_enabled: false
C2-SR-02 · 逻辑错误自我发现
- 难度:困难
- 上下文类型:synthetic
- 输入:
- 对话历史:
用户:规划曼谷 3 天行程,去大皇宫、卧佛寺、考山路、暹罗广场 Agent:(调用 Google Maps 查通勤时间后)我建议这样安排: Day 1: 考山路 → 暹罗广场 Day 2: 大皇宫 → 卧佛寺 Day 3: (空) - 用户消息:
Day 3 的行程怎么是空的?帮我修正一下
- 对话历史:
- 期望行为:
- 识别出 Day 3 空白是安排失误:4 个景点仅用了 2 天,Day 3 没有分配内容
- 自我修正,提供两个处理方向:
- 方向 A:把景点重新分配到 3 天(如大皇宫+卧佛寺+考山路一天,暹罗广场单独一天,Day 3 补充新景点)
- 方向 B:明确说明这 4 个景点 2 天足够,Day 3 建议自由活动(如 Chatuchak 周末市场、按摩 SPA、购物)
- 不应重复输出同样的空 Day 3 方案
- 判定标准:
- Pass:输出前发现了空 Day 3 的问题,做了修正或说明
- Fail:直接输出了 Day 3 为空的方案,未做任何说明
- 评分方式:LLM-judge
- Skill 配置:
skill_enabled: false
C2-SR-03 · 输出自检(交付前验证)
- 难度:困难
- 上下文类型:synthetic
- 输入:
- 用户消息:
推荐 5 款 2000 元以内的手机,不要小米和 OPPO - Agent 行为:搜索后准备输出推荐
- 用户消息:
- 期望行为:
- 输出前自检:
- 数量是否为 5 款?
- 价格是否都 ≤ 2000?
- 是否包含了小米或 OPPO?
- 如果自检发现问题(如只搜到 4 款,或其中有小米),修正后再输出
- 不应输出不符合约束的结果
- 输出前自检:
- 判定标准:
- Pass:最终输出严格符合约束(5 款、≤2000、无小米 OPPO)
- Fail:输出违反了任何一项约束
- 评分方式:自动(检查约束遵守)
- Skill 配置:
skill_enabled: false
七、复杂度衰减曲线(CD: Complexity Degradation)
随任务步骤数增加,成功率如何衰减。
C2-CD-01 · 2 步任务基线
- 难度:简单
- 上下文类型:synthetic
- 输入:
- 用户消息:
查一下明天北京天气,如果下雨推荐室内活动 - 上下文:当前日期为 2026-04-07
- 用户消息:
- 期望行为:
- 第一步:查天气
- 第二步(条件):如果下雨,推荐室内活动
- 2 步任务,agent 应该轻松完成
- 判定标准:
- Pass:查了天气,并根据结果推荐了室内活动(如果下雨)或说明不需要(如果晴天)
- Fail:只查了天气,没有后续推荐
- 评分方式:自动
- Skill 配置:
skill_enabled: false
C2-CD-02 · 3-5 步任务
- 难度:中等
- 上下文类型:synthetic
- 输入:
- 用户消息:
帮我找一家适合商务宴请的餐厅,朝阳区,人均 300-500,看看评价怎么样,然后告诉我怎么从国贸地铁站过去 - 上下文:无
- 用户消息:
- 期望行为:
- 5 步任务:
- 搜索朝阳区餐厅,筛选价格
- 查看候选餐厅的评价
- 选出评价好的 1-2 家
- 查询从国贸站到餐厅的路线
- 输出推荐和交通方式
- 5 步任务:
- 判定标准:
- Pass:5 步都完成,最终有推荐餐厅 + 评价摘要 + 交通方式
- Fail:遗漏了任何步骤(如没查评价 / 没查路线)
- 评分方式:LLM-judge(检查步骤完整性)
- Skill 配置:
skill_enabled: false
C2-CD-03 · 6-8 步任务
- 难度:困难
- 上下文类型:synthetic
- 输入:
- 对话历史:
用户:我想买 AirPods Pro 2,帮我看看淘宝和京东哪个便宜,查查用户评价,推荐一家靠谱的店,看看最近有没有优惠活动 Agent:好的,我来帮你全面对比。先查淘宝。[调用 taobao_search_products: AirPods Pro 2] 淘宝搜索结果:主流价格 ¥1,680-1,899,官方旗舰店标价 ¥1,899,部分第三方店 ¥1,680 起 Agent:再查京东价格。[调用 web_search: AirPods Pro 2 京东价格] 京东结果:Apple 官方旗舰店 ¥1,799,京东自营 ¥1,799,偶有满减券后约 ¥1,699 Agent:价格对比完成。接下来查淘宝用户评价。[调用 taobao_get_product_reviews: AirPods Pro 2] 淘宝评价摘要:高分店铺平均 4.8 分,主要好评:降噪效果明显、佩戴舒适;差评主要集中在第三方渠道的假货问题 Agent:查一下京东用户口碑。[调用 web_search: AirPods Pro 2 京东评价] 京东自营口碑:4.9 分,买家普遍认可正品保障,降噪和通透模式切换评价很高 Agent:筛选高评分靠谱店铺。综合评价和价格: · 淘宝:建议选 Apple 官方旗舰店(¥1,899,正品无忧)或天猫 Apple Store(同价) · 京东:京东自营(¥1,799,价格更低,自营品质保障) Agent:最后查最近的优惠活动。[调用 web_search: AirPods Pro 2 优惠活动 2026] 找到:京东 4 月 618 预热活动,AirPods Pro 2 满 1600-100 券,到手约 ¥1,699 - 用户消息:
好了,给我最终推荐吧
- 对话历史:
- 期望行为:
- 完整流程 8 步:
- 淘宝搜索 AirPods Pro 2
- 京东搜索(如果接入了京东工具,否则 web_search)
- 价格对比
- 查淘宝用户评价
- 查京东用户评价(如适用)
- 筛选高评分店铺
- 搜索优惠活动信息
- 给出最终推荐
- 完整流程 8 步:
- 判定标准:
- Pass:完成了至少 6 步(75%),最终有明确推荐
- Fail:完成步骤 < 5 步(<63%)
- 评分方式:LLM-judge(逐步检查完成度)
- Skill 配置:
skill_enabled: false
C2-CD-04 · 10+ 步复杂任务
- 难度:困难
- 上下文类型:synthetic
- 输入:
- 用户消息:
我 5 月要去东南亚三国游(泰国、越南、柬埔寨),各 5 天,从上海出发,预算 1.5 万,帮我规划机票、签证、行程、住宿 - 上下文:无
- 用户消息:
- 期望行为:
- 超复杂任务,预计 10-15 个子步骤:
- 确认三国顺序(开口程规划)
- 查询三段国际机票
- 查询签证要求
- 每个国家推荐景点
- 编排每国的行程
- 推荐住宿区域
- 预算分配和总结
- 测试在长任务链中是否保持任务质量
- 超复杂任务,预计 10-15 个子步骤:
- 判定标准:
- Pass:完成了至少 8 个子步骤(>75%),输出包含机票、签证、行程、住宿四个核心部分
- Fail:完成步骤 < 6 个(<60%) / 某个核心部分完全缺失
- 评分方式:LLM-judge(评估完成度和质量)
- Skill 配置:
skill_enabled: false
八、输出自检率(SV: Self-Verification)
交付前,agent 是否会验证自己的输出符合任务要求。
C2-SV-01 · 数量约束自检
- 难度:中等
- 上下文类型:synthetic
- 输入:
- 用户消息:
推荐 5 个适合周末游的城市 - Agent 行为:搜索后准备输出,但搜索结果只有 4 个
- 用户消息:
- 期望行为:
- 交付前自检:用户要求 5 个,但我只有 4 个
- 补充搜索或说明只找到 4 个
- 不应未经检查就输出 4 个
- 判定标准:
- Pass:最终输出 5 个城市,或明确说明只能提供 4 个
- Fail:直接输出 4 个,未说明数量不足
- 评分方式:自动(计数)
- Skill 配置:
skill_enabled: false
C2-SV-02 · 约束冲突自检
- 难度:困难
- 上下文类型:synthetic
- 输入:
- 用户消息:
推荐京都的住宿,要在清水寺附近,预算每晚 300 元以内 - Agent 行为:搜索后发现清水寺附近最便宜的酒店也要 500 元/晚
- 用户消息:
- 期望行为:
- 交付前自检:发现无法同时满足「清水寺附近」和「300 元」两个约束
- 不应直接推荐 500 元的酒店(违反预算)
- 正确做法:说明冲突,提供选项(放宽预算或换区域)
- 判定标准:
- Pass:识别出约束冲突,提供了调整方案
- Fail:推荐了超预算的酒店 / 推荐了远离清水寺的酒店且未说明
- 评分方式:LLM-judge
- Skill 配置:
skill_enabled: false
C2-SV-03 · 逻辑一致性自检
- 难度:困难
- 上下文类型:synthetic
- 输入:
- 对话历史:
用户:推荐几款适合老人用的手机 Agent:(搜索后准备输出)为您推荐以下手机: 1. iPhone 16 Pro Max - 大屏清晰,操作流畅 2. 小米 Redmi Note 13 - 性价比高 3. vivo Y200 - 大字体模式,操作简单 - 用户消息:(评测 agent 输出)
- 对话历史:
- 期望行为:
- 交付前自检:iPhone 16 Pro Max 虽然屏幕大,但价格 9000+,不适合「老人用」的性价比需求
- 应该替换为更适合老人的机型(价格适中、操作简单)
- 或保留但说明「如果预算充足可考虑」
- 判定标准:
- Pass:推荐的手机都符合「适合老人」的场景(价格适中、操作简单、大屏大字),或有明确说明
- Fail:推荐了明显不符合的机型(如价格过高、功能复杂)且无说明
- 评分方式:LLM-judge
- Skill 配置:
skill_enabled: false
九、多模态规划任务(MM: Multimodal Planning)
基于图片等多模态输入的规划任务。
C2-MM-01 · 基于图片的任务分解
- 难度:中等
- 上下文类型:synthetic
- 输入:
- 用户消息:
[图片] 帮我实现这个清单 - 图片:旅行心愿清单
- 图片说明:手写便条,内容包括:「去日本」「吃正宗拉面」「看富士山」,黑色钢笔字迹,白色背景,三行清单式排列
- 上下文:无
- 用户消息:
- 期望行为:
- 提取清单内容(去日本、吃正宗拉面、看富士山)
- 分解任务:查机票 → 确定城市(东京/静冈)→ 规划行程(拉面餐厅推荐 + 富士山观景计划)
- 判定标准:
- Pass:提取了清单中至少 2 项内容,做了合理的任务分解(至少 3 个子任务)
- Fail:未提取清单就开始规划 / 忽略图片内容直接泛泛规划日本旅行
- 评分方式:LLM-judge
- Skill 配置:
skill_enabled: false
C2-MM-02 · 图片信息的计划修订
- 难度:困难
- 上下文类型:synthetic
- 输入:
- 对话历史:
用户:规划京都 3 天行程,5 月 11-13 日 Agent:好的,为你规划如下: · Day 1(5/11):嵐山区——渡月桥 + 竹林小道 + 天龙寺(户外为主) · Day 2(5/12):东山区——清水寺 + 二年坂三年坂 + 祇园花见小路(户外步行) · Day 3(5/13):北山区——金阁寺 + 龙安寺 + 仁和寺(户外为主) 住宿推荐:京都站附近,交通便利。整体以户外步行游览为主,5 月初夏天气一般较好。 - 用户消息:
[图片] 看这天气,要调整吗 - 图片:天气预报
- 图片说明:一张3天天气预报截图,显示5月11日(晴,24°C)、5月12日(大雨,18°C,降水概率90%)、5月13日(多云,21°C);5月12日标有雨伞图标和"大雨"字样
- 对话历史:
- 期望行为:
- 从图片中提取天气信息:5/11 晴、5/12 大雨、5/13 多云
- 识别出 Day 2(5/12)为大雨天,原行程全为户外活动
- 修订计划:将 5/12 调整为以室内活动为主:
- 推荐室内景点,如京都国立博物馆、二条城(有室内参观区)、茶道体验、锦市场美食探索
- 或将金阁寺等对雨天不友好的景点换到晴天
- 判定标准:
- Pass:识别出 5/12 大雨,将该天的户外行程替换或补充为室内活动
- Fail:未提取天气信息 / 未修订行程 / 修订后 5/12 仍全为户外活动
- 评分方式:LLM-judge
- Skill 配置:
skill_enabled: false
C2-MM-03 · 多模态端到端任务
- 难度:困难
- 上下文类型:synthetic
- 输入:
- 用户消息:
[图片] 找类似风格的酒店,京都,预算 500/晚,规划 3 天行程 - 图片:

- 图片说明:现代极简风格酒店客房,以白色和浅木色为主色调,配有一张宽敞大床(白色床品)、落地玻璃窗、无主灯设计(隐藏式灯带)、木质地板,整体干净利落,无多余装饰,约30平米
- 上下文:无
- 用户消息:
- 期望行为:
- 提取图片风格特征:极简风、白色系、木质元素、大床落地窗
- 搜索京都符合该风格的酒店(现代简约/日式极简,≤500元/晚)
- 推荐 2-3 家候选酒店,说明符合极简风格的依据
- 规划 3 天行程(结合酒店所在区域选择景点)
- 判定标准:
- Pass:提取了图片风格特征,推荐的酒店有明确的风格描述,完成了 3 天行程规划
- Fail:忽略图片风格直接搜索任意酒店 / 酒店推荐与风格无关 / 行程规划缺失
- 评分方式:LLM-judge
- Skill 配置:
skill_enabled: false
C2-MM-04 · 截图中的错误识别
- 难度:困难
- 上下文类型:synthetic
- 输入:
- 用户消息:
[图片] 有什么问题吗 - 图片:行程表
- 图片说明:一份手写旅行行程表,内容如下——Day 1:酒店集合出发 → 前往机场 → 办理登机手续 → 登机;Day 2:抵达目的地 → 酒店入住 → 下午游览当地景点;Day 3:自由活动 → 购物 → 晚餐。行程中 Day 1 写的是从酒店出发去机场(即出发日),但 Day 2 才写抵达入住,逻辑上 Day 1 和 Day 2 的行程混乱(若 Day 1 出发,当天应该就能抵达并入住,而非 Day 2)
- 上下文:无
- 用户消息:
- 期望行为:
- 读取图片说明中的行程内容
- 识别逻辑错误:Day 1 描述的是出发去机场,Day 2 才写抵达入住,若是短途飞行(如国内或东南亚),当天即可抵达入住,行程顺序存在矛盾
- 指出错误:正常逻辑应为 Day 1 抵达入住,而非 Day 2
- 提供修正建议:将 Day 1 改为「出发 → 抵达 → 酒店入住」,Day 2 开始正式游览
- 判定标准:
- Pass:识别出 Day 1/Day 2 的行程逻辑矛盾(出发和抵达分开在两天),并给出了修正建议
- Fail:未识别出顺序错误,直接认为行程没有问题
- 评分方式:LLM-judge
- Skill 配置:
skill_enabled: false
评测执行说明
总用例数
| 维度 | 代号 | 用例数 |
|---|---|---|
| 任务分解质量 | TD | 4 |
| 计划修订能力 | PR | 4 |
| 端到端任务成功率 | E2E | 4 |
| 步骤完成率 | SC | 2 |
| 错误传播率 | EP | 3 |
| 错误自修复率 | SR | 3 |
| 复杂度衰减曲线 | CD | 4 |
| 输出自检 | SV | 3 |
| 合计 | 27 |
难度分布
| 难度 | 数量 | 占比 |
|---|---|---|
| 简单 | 4 | 15% |
| 中等 | 11 | 41% |
| 困难 | 12 | 44% |
对话轮次分布
| 类型 | 数量 | 占比 |
|---|---|---|
| 单轮 | 13 | 48% |
| 多轮(2-10 轮) | 14 | 52% |
上下文类型分布
| 类型 | 数量 | 占比 | 说明 |
|---|---|---|---|
| synthetic(静态构造) | 25 | 92.6% | 人工编写对话历史,精确测试能力点 |
| organic(动态交互) | 2 | 7.4% | agent-as-user 动态交互,探索性评测 |
任务复杂度分布
| 步骤数 | case 数 | 说明 |
|---|---|---|
| 2-3 步 | 8 | 简单任务 |
| 3-5 步 | 10 | 中等复杂度 |
| 5-8 步 | 6 | 复杂任务 |
| 8+ 步 | 3 | 超复杂任务 |
评分方式分布
| 方式 | 数量 | 说明 |
|---|---|---|
| LLM-judge | 22 | 需要评估规划合理性、完成度、修正策略 |
| 自动 | 3 | 简单的完成度检查、约束验证 |
| 自动 + LLM-judge | 2 | 部分自动,部分需语义判断 |
后续迭代方向
- 增加更多动态交互 case(提升到 15-20%)
- 补充更长步骤数的任务(12+ 步)
- 补充多次计划修订的 case(修订 2-3 次)
- 从真实用户 trace 中提取复杂任务失败的 case
- 补充跨领域任务(如旅行+购物组合需求)
- 补充用户中途放弃任务的恢复 case