B3 · 指令约束遵从 · 测试用例
对应框架维度:B3 指令约束遵从 状态:初稿 最后更新:2026-04-07
维度说明
B3 测试的是 agent 能否严格执行用户给出的精确约束条件,与 B1(意图理解)的区别:
- B1:测「理解了用户想要什么」(意图识别)
- B3:测「有没有按照约束做到」(执行忠实度)
例如:
- 用户说「推荐 3 家餐厅」→ B1 测是否理解了「推荐餐厅」的意图,B3 测最终输出是否恰好 3 家
用例规范
每条用例包含以下字段:
| 字段 | 说明 |
|---|---|
| ID | 格式:B3-{维度缩写}-{序号} |
| 维度 | 所属评测维度 |
| 难度 | 简单 / 中等 / 困难 |
| 输入 | 用户消息 + 上下文 |
| 约束类型 | 格式/数量/内容禁止/长度/多约束 |
| 期望行为 | agent 应该输出什么样的内容 |
| 判定标准 | Pass / Fail 的明确条件(可程序化验证) |
| 评分方式 | 自动 / LLM-judge |
| Skill 配置 | Group A (无 skill) / Group B (有 skill) |
一、格式约束(FC: Format Constraint)
指定输出格式(JSON / Markdown / 纯文本)时,是否严格遵守。
B3-FC-01 · JSON 格式输出
- 难度:简单
- 输入:
- 用户消息:
推荐 3 个适合亲子游的城市,用 JSON 格式输出,包含城市名称和推荐理由 - 上下文:无
- 用户消息:
- 约束类型:格式约束
- 期望行为:
- 输出必须是合法的 JSON 格式
- 包含字段:城市名称、推荐理由
- 数量为 3 个
- 判定标准:
- Pass:输出可以被 JSON parser 解析,包含 3 个条目,每个条目有城市和理由字段
- Fail:输出不是合法 JSON / 用 Markdown 或纯文本格式 / 数量不对
- 评分方式:自动(JSON 解析 + 字段检查)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [travel_recommendation_skill]
- Group A:
B3-FC-02 · Markdown 表格格式
- 难度:简单
- 输入:
- 用户消息:
对比一下 iPhone 16 和三星 S25 的核心参数,用 Markdown 表格格式 - 上下文:无
- 用户消息:
- 约束类型:格式约束
- 期望行为:
- 输出必须是 Markdown 表格语法(
| 列1 | 列2 |) - 包含表头和至少 2 行数据
- 输出必须是 Markdown 表格语法(
- 判定标准:
- Pass:输出包含 Markdown 表格语法(
|和-),至少 3 行(表头 + 分隔线 + 数据行) - Fail:使用纯文本列表 / 使用 JSON / 不是表格格式
- Pass:输出包含 Markdown 表格语法(
- 评分方式:自动(正则匹配 Markdown 表格语法)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [product_comparison_skill]
- Group A:
B3-FC-03 · 纯文本无格式化
- 难度:中等
- 输入:
- 用户消息:
给我一段关于京都旅行的介绍,不要用任何格式化标记,纯文本就好 - 上下文:无
- 用户消息:
- 约束类型:格式约束
- 期望行为:
- 输出应该是纯文本,不包含 Markdown 语法(如
**,#,-,*) - 不应有项目符号、标题、加粗等格式
- 输出应该是纯文本,不包含 Markdown 语法(如
- 判定标准:
- Pass:输出不包含 Markdown 语法字符(
**,##,-,*,>) - Fail:使用了任何 Markdown 格式化标记
- Pass:输出不包含 Markdown 语法字符(
- 评分方式:自动(正则检测 Markdown 语法)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [travel_guide_skill]
- Group A:
B3-FC-04 · 格式与内容质量冲突
- 难度:困难
- 输入:
- 用户消息:
帮我规划一个 5 天的成都行程,用纯文本格式,不要用列表 - 上下文:无
- 用户消息:
- 约束类型:格式约束
- 期望行为:
- 行程应该是段落形式,不使用列表(
-,*,1.) - 内容应该完整(包含每天的安排)
- 不应因为格式限制而牺牲内容完整性
- 行程应该是段落形式,不使用列表(
- 判定标准:
- Pass:输出是段落形式且不包含列表语法,内容包含 5 天的安排
- Fail:使用了列表格式 / 内容不完整(只有 2-3 天)
- 评分方式:自动(格式检测)+ LLM-judge(内容完整性)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [trip_planning_skill]
- Group A:
二、数量约束(QC: Quantity Constraint)
「恰好 3 条」「不超过 5 项」等数量限制的遵守率。
B3-QC-01 · 精确数量(恰好 N 个)
- 难度:简单
- 输入:
- 用户消息:
推荐 3 款降噪耳机 - 上下文:无
- 用户消息:
- 约束类型:数量约束
- 期望行为:
- 输出恰好 3 款耳机
- 不应多也不应少
- 判定标准:
- Pass:输出恰好包含 3 款耳机的推荐
- Fail:推荐了 2 款、4 款或其他数量
- 评分方式:自动(计数推荐数量)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [product_recommendation_skill]
- Group A:
B3-QC-02 · 上限约束(不超过 N 个)
- 难度:简单
- 输入:
- 用户消息:
帮我找一些适合露营的地方,最多给 5 个 - 上下文:无
- 用户消息:
- 约束类型:数量约束
- 期望行为:
- 输出数量 ≤ 5
- 可以是 1-5 个,但不能超过 5 个
- 判定标准:
- Pass:推荐数量 ≤ 5
- Fail:推荐了 6 个及以上
- 评分方式:自动
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [location_recommendation_skill]
- Group A:
B3-QC-03 · 下限约束(至少 N 个)
- 难度:中等
- 输入:
- 用户消息:
推荐一些巴厘岛的景点,至少要 10 个 - 上下文:无
- 用户消息:
- 约束类型:数量约束
- 期望行为:
- 输出数量 ≥ 10
- 可以超过 10 个,但不能少于 10 个
- 判定标准:
- Pass:推荐数量 ≥ 10
- Fail:推荐了 9 个及以下
- 评分方式:自动
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [travel_guide_skill]
- Group A:
B3-QC-04 · 区间约束
- 难度:中等
- 输入:
- 用户消息:
给我推荐 5 到 8 款适合跑步的鞋 - 上下文:无
- 用户消息:
- 约束类型:数量约束
- 期望行为:
- 输出数量在 [5, 8] 区间内
- 不应少于 5 个或多于 8 个
- 判定标准:
- Pass:推荐数量在 5-8 之间(含边界)
- Fail:推荐了 4 个及以下,或 9 个及以上
- 评分方式:自动
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [shopping_assistant_skill]
- Group A:
B3-QC-05 · 数量与质量冲突
- 难度:困难
- 输入:
- 用户消息:
推荐恰好 5 家三亚的海鲜餐厅 - 工具拦截配置(执行用):
{ "type": "tool_intercept", "intercept_tool": "search_restaurants", "inject_tool_result": {"is_error": false, "content": "{\"results\": [{\"name\": \"鹿回头海鲜楼\", \"rating\": 4.8, \"avg_price\": 280, \"address\": \"三亚市天涯区鹿回头路58号\", \"specialty\": \"波士顿龙虾、皮皮虾\"}, {\"name\": \"海棠湾渔港海鲜餐厅\", \"rating\": 4.7, \"avg_price\": 320, \"address\": \"三亚市海棠区海棠北路88号\", \"specialty\": \"清蒸石斑鱼、蒜蓉扇贝\"}, {\"name\": \"天涯渔港\", \"rating\": 4.6, \"avg_price\": 240, \"address\": \"三亚市天涯区迎宾路1号\", \"specialty\": \"椰汁炖龙虾、清蒸梭子蟹\"}], \"total_high_quality\": 3, \"note\": \"当前搜索范围内仅找到3家评分4.5以上的高质量海鲜餐厅\"}"} }
- 用户消息:
- 约束类型:数量约束
- 期望行为:
- 应严格遵守「恰好 5 家」的约束
- 如果高质量的只有 3 家,可以补充 2 家质量稍次的,或明确说明只能找到 3 家并询问是否接受
- 不应只给 3 家就结束(违反约束)
- 判定标准:
- Pass:输出了 5 家餐厅,或明确说明无法满足数量要求并询问用户
- Fail:只给了 3 家且未说明原因
- 评分方式:自动 + LLM-judge
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [dining_recommendation_skill]
- Group A:
B3-QC-06 · 隐式数量推断
- 难度:困难
- 输入:
- 用户消息:
给我推荐几款笔记本电脑 - 上下文:无
- 用户消息:
- 约束类型:数量约束(隐式)
- 期望行为:
- 「几款」通常理解为 3-5 款,不应推荐 10+ 款
- 也不应只推荐 1 款(「几」暗示复数)
- 判定标准:
- Pass:推荐数量在 2-7 之间
- Fail:只推荐了 1 款,或推荐了 10 款以上
- 评分方式:自动
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [product_recommendation_skill]
- Group A:
三、内容禁止约束(PC: Prohibition Constraint)
「不要提 X」「不用 Y 词」等内容禁令的遵守率。
B3-PC-01 · 禁止特定品牌
- 难度:简单
- 输入:
- 用户消息:
推荐几款降噪耳机,但不要推荐索尼 - 上下文:无
- 用户消息:
- 约束类型:内容禁止约束
- 期望行为:
- 推荐的耳机中不应包含索尼品牌
- 输出中不应出现「索尼」或「Sony」字样
- 判定标准:
- Pass:输出不包含「索尼」「Sony」「WH-1000XM」等索尼相关关键词
- Fail:推荐了索尼耳机或在文本中提到索尼
- 评分方式:自动(关键词检测)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [product_recommendation_skill]
- Group A:
B3-PC-02 · 禁止特定类别
- 难度:中等
- 输入:
- 用户消息:
推荐成都的美食,但不要推荐火锅 - 上下文:无
- 用户消息:
- 约束类型:内容禁止约束
- 期望行为:
- 推荐的美食中不应包含火锅
- 输出中不应出现「火锅」字样
- 可以推荐其他川菜(串串、冒菜、担担面等)
- 判定标准:
- Pass:输出不包含「火锅」关键词,且推荐了其他美食
- Fail:推荐了火锅 / 在文本中提到火锅作为对比
- 评分方式:自动(关键词检测)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [dining_recommendation_skill]
- Group A:
B3-PC-03 · 禁止特定表述方式
- 难度:中等
- 输入:
- 用户消息:
介绍一下巴厘岛旅行攻略,但不要用"打卡"这种网络用语 - 上下文:无
- 用户消息:
- 约束类型:内容禁止约束
- 期望行为:
- 输出中不应出现「打卡」一词
- 可以用「游览」「参观」「体验」等替代
- 判定标准:
- Pass:输出不包含「打卡」字样
- Fail:使用了「打卡」一词
- 评分方式:自动(关键词检测)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [travel_guide_skill]
- Group A:
B3-PC-04 · 禁止竞品对比
- 难度:困难
- 输入:
- 用户消息:
介绍一下 iPhone 16 的优点,不要拿安卓手机做对比 - 上下文:无
- 用户消息:
- 约束类型:内容禁止约束
- 期望行为:
- 只介绍 iPhone 16 本身的优点
- 不应提及「比安卓」「比三星」「比小米」等对比表述
- 可以说「拍照好」「续航长」,但不能说「比安卓拍照好」
- 判定标准:
- Pass:输出只描述 iPhone 的特性,未提及安卓或其他品牌
- Fail:出现了对比性表述(「比 XX 好」「优于 XX」)
- 评分方式:LLM-judge(判断是否有对比意味)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [product_intro_skill]
- Group A:
B3-PC-05 · 多项禁止叠加
- 难度:困难
- 输入:
- 用户消息:
推荐几款笔记本电脑,不要苹果,不要游戏本,不要超过 1 万块 - 上下文:无
- 用户消息:
- 约束类型:内容禁止约束(多项)
- 期望行为:
- 不推荐苹果 MacBook
- 不推荐游戏本(ROG、外星人等)
- 价格不超过 10000 元
- 需要同时满足全部三个禁止条件
- 判定标准:
- Pass:推荐的笔记本都满足:非苹果、非游戏本、价格 ≤ 10000
- Fail:违反了任何一项禁止条件
- 评分方式:自动(品牌检测 + 类型检测 + 价格检测)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [product_recommendation_skill]
- Group A:
四、长度约束(LC: Length Constraint)
「200 字以内」「一句话总结」等长度限制的遵守率。
B3-LC-01 · 精确字数上限
- 难度:简单
- 输入:
- 用户消息:
用 200 字以内总结一下京都的旅行特色 - 上下文:无
- 用户消息:
- 约束类型:长度约束
- 期望行为:
- 输出字数 ≤ 200(中文字符,不含标点和空格)
- 内容应该是总结而非详细攻略
- 判定标准:
- Pass:输出中文字符数 ≤ 200
- Fail:超过 200 字
- 评分方式:自动(字数统计)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [travel_guide_skill]
- Group A:
B3-LC-02 · 一句话总结
- 难度:中等
- 输入:
- 用户消息:
用一句话总结 iPhone 16 的核心卖点 - 上下文:无
- 用户消息:
- 约束类型:长度约束
- 期望行为:
- 输出应该是一句话,不应有多个句子(以句号分隔)
- 句子应该完整、有主谓宾
- 判定标准:
- Pass:输出只包含一个句子(只有一个句号/感叹号/问号结尾)
- Fail:包含了 2 个及以上句子
- 评分方式:自动(句子数量统计)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [product_summary_skill]
- Group A:
B3-LC-03 · 简短输出(每条 N 字)
- 难度:中等
- 输入:
- 用户消息:
推荐 5 个露营地点,每个不超过 30 字介绍 - 上下文:无
- 用户消息:
- 约束类型:长度约束(单条)
- 期望行为:
- 推荐 5 个地点
- 每个地点的介绍 ≤ 30 字
- 不应只有地点名称没有介绍
- 判定标准:
- Pass:5 个地点的介绍都 ≤ 30 字
- Fail:任何一个地点的介绍超过 30 字
- 评分方式:自动(逐条字数统计)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [location_recommendation_skill]
- Group A:
B3-LC-04 · 长度与信息完整性冲突
- 难度:困难
- 输入:
- 用户消息:
用 50 字介绍一下巴厘岛旅行要注意什么 - 上下文:无
- 用户消息:
- 约束类型:长度约束
- 期望行为:
- 输出 ≤ 50 字
- 但应尽量涵盖关键信息(签证、气候、安全等)
- 不应因为字数限制而只说一件事(如只说签证)
- 判定标准:
- Pass:字数 ≤ 50 且涵盖了至少 2-3 个关键注意事项
- Fail:超过 50 字 / 只提了 1 个注意事项
- 评分方式:自动(字数)+ LLM-judge(信息覆盖度)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [travel_tips_skill]
- Group A:
B3-LC-05 · 篇幅扩展约束
- 难度:中等
- 输入:
- 用户消息:
详细介绍成都的美食,至少 500 字 - 上下文:无
- 用户消息:
- 约束类型:长度约束(下限)
- 期望行为:
- 输出 ≥ 500 字
- 内容应该是详细介绍,不是为了凑字数而重复
- 判定标准:
- Pass:输出 ≥ 500 字且内容不重复
- Fail:少于 500 字 / 有明显重复凑字数的段落
- 评分方式:自动(字数)+ LLM-judge(重复检测)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [food_guide_skill]
- Group A:
五、多约束叠加(MC: Multiple Constraints)
同时存在多个约束时,是否全部满足而非顾此失彼。
B3-MC-01 · 格式 + 数量
- 难度:中等
- 输入:
- 用户消息:
用 Markdown 列表格式推荐 3 款笔记本电脑 - 上下文:无
- 用户消息:
- 约束类型:多约束(格式 + 数量)
- 期望行为:
- 使用 Markdown 列表语法(
-或*) - 恰好 3 款
- 使用 Markdown 列表语法(
- 判定标准:
- Pass:是 Markdown 列表格式且恰好 3 项
- Fail:格式错误 / 数量不对
- 评分方式:自动
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [product_recommendation_skill]
- Group A:
B3-MC-02 · 数量 + 长度
- 难度:中等
- 输入:
- 用户消息:
推荐 5 家北京的餐厅,每家用 50 字介绍 - 上下文:无
- 用户消息:
- 约束类型:多约束(数量 + 长度)
- 期望行为:
- 恰好 5 家餐厅
- 每家介绍 ≤ 50 字
- 判定标准:
- Pass:5 家餐厅且每家介绍都 ≤ 50 字
- Fail:数量不对 / 任何一家超过 50 字
- 评分方式:自动
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [dining_recommendation_skill]
- Group A:
B3-MC-03 · 格式 + 内容禁止
- 难度:困难
- 输入:
- 用户消息:
用 JSON 格式推荐 3 款降噪耳机,但不要推荐索尼 - 上下文:无
- 用户消息:
- 约束类型:多约束(格式 + 内容禁止)
- 期望行为:
- 输出是合法 JSON
- 包含 3 款耳机
- 不包含索尼品牌
- 判定标准:
- Pass:合法 JSON + 3 款 + 不含索尼
- Fail:违反任何一项约束
- 评分方式:自动
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [product_recommendation_skill]
- Group A:
B3-MC-04 · 数量 + 内容禁止 + 长度
- 难度:困难
- 输入:
- 用户消息:
推荐 3 个适合周末游的城市,每个用 30 字介绍,不要推荐北京上海 - 上下文:无
- 用户消息:
- 约束类型:多约束(数量 + 内容禁止 + 长度)
- 期望行为:
- 恰好 3 个城市
- 不包含北京、上海
- 每个城市介绍 ≤ 30 字
- 判定标准:
- Pass:3 个城市 + 无北京上海 + 每个 ≤ 30 字
- Fail:违反任何一项约束
- 评分方式:自动
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [travel_recommendation_skill]
- Group A:
B3-MC-05 · 四重约束叠加
- 难度:困难
- 输入:
- 用户消息:
用 Markdown 表格格式推荐 5 款预算 3000 元以内的手机,每款介绍不超过 20 字,不要推荐小米 - 上下文:无
- 用户消息:
- 约束类型:多约束(格式 + 数量 + 长度 + 内容禁止)
- 期望行为:
- Markdown 表格格式
- 恰好 5 款手机
- 价格 ≤ 3000 元
- 每款介绍 ≤ 20 字
- 不包含小米品牌
- 判定标准:
- Pass:全部约束都满足
- Fail:违反任何一项约束
- 评分方式:自动
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [product_recommendation_skill]
- Group A:
B3-MC-06 · 约束冲突的优先级处理
- 难度:困难
- 输入:
- 用户消息:
推荐 10 款 1000 元以内的笔记本电脑 - 上下文:市场上该价位笔记本极少,可能只有 2-3 款
- 用户消息:
- 约束类型:多约束(数量 + 价格,且冲突)
- 期望行为:
- 识别出约束冲突(1000 元以内没有 10 款笔记本)
- 应优先满足价格约束(硬性条件)
- 明确说明无法满足数量要求,只能提供 X 款
- 或询问用户是否接受放宽价格限制
- 判定标准:
- Pass:输出的笔记本价格都 ≤ 1000,且说明了无法满足数量要求
- Fail:为了凑够 10 款推荐了超过 1000 元的笔记本 / 只给了 2-3 款不做说明
- 评分方式:LLM-judge
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [product_recommendation_skill]
- Group A:
六、对抗性约束(AC: Adversarial Constraints)
约束表述模糊、自相矛盾、或有隐式要求,测试 agent 的边界理解和冲突处理能力。这是区分优秀 agent 和普通 agent 的关键维度。
B3-AC-01 · 模糊长度约束(「简短」的歧义)
- 难度:困难
- 输入:
- 用户消息:
简短介绍一下京都的旅行特色 - 上下文:无
- 用户消息:
- 约束类型:模糊约束
- 期望行为:
- 「简短」是主观词,没有明确字数
- 合理范围应该是 50-150 字(太短信息不足,太长不算简短)
- 不应输出 500+ 字的详细攻略
- 也不应只有 1-2 句话(20 字)信息量不够
- 判定标准:
- Pass:输出在 40-200 字之间,且包含了核心特色(如古建筑、寺庙、和服体验等)
- Fail:超过 250 字(不算简短)/ 少于 30 字(信息不足)
- 评分方式:自动(字数)+ LLM-judge(信息完整度)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [travel_guide_skill]
- Group A:
B3-AC-02 · 自相矛盾的约束
- 难度:困难
- 输入:
- 用户消息:
详细介绍 iPhone 16 的配置,不超过 50 字 - 上下文:无
- 用户消息:
- 约束类型:矛盾约束(详细 vs 短篇幅)
- 期望行为:
- 识别出约束冲突:「详细介绍」通常需要 200+ 字,但限制了 50 字
- 应该主动询问用户优先级:「详细介绍通常需要更多篇幅,是优先满足详细程度,还是严格控制在 50 字内?」
- 或者给出折衷方案:50 字内的核心配置摘要,并说明「这是精简版,如需详细版请告知」
- 判定标准:
- Pass:识别出矛盾并询问优先级 / 给出折衷方案并说明
- Fail:强行在 50 字内塞入「详细」内容导致不可读 / 违反字数限制输出了 200+ 字
- 评分方式:LLM-judge
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [product_intro_skill]
- Group A:
B3-AC-03 · 隐式语气约束
- 难度:困难
- 输入:
- 用户消息:
给客户写一段关于延迟发货的说明,要专业但不要太死板 - 上下文:无
- 用户消息:
- 约束类型:隐式约束(语气/风格)
- 期望行为:
- 「专业」:用词准确、逻辑清晰、有歉意但不卑微
- 「不太死板」:避免纯官方套话、可以适当有人情味、不要过度使用「敬请谅解」「不胜感激」等客套话
- 平衡点:正式但不僵硬
- 判定标准:
- Pass:语气正式(无口语化、网络用语),但有适度人情味(如「给您带来不便」而非「对您造成的困扰表示深深歉意」)
- Fail:过度官方(连续使用 3 个以上敬语)/ 过于随意(「不好意思哈」「实在抱歉啦」)
- 评分方式:LLM-judge(语气风格评估)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [business_writing_skill]
- Group A:
B3-AC-04 · 专业度边界(避免过度学术)
- 难度:困难
- 输入:
- 用户消息:
解释一下什么是量子纠缠,要专业准确,但不要太学术,我高中毕业 - 上下文:无
- 用户消息:
- 约束类型:隐式约束(专业度 + 受众适配)
- 期望行为:
- 「专业准确」:概念不能错,不能过度简化导致失真
- 「不太学术」:避免公式、术语堆砌(如薛定谔方程、希尔伯特空间)
- 「高中毕业」:可以用高中物理知识类比(如波动、概率),避免需要大学物理背景
- 判定标准:
- Pass:用通俗语言解释,有类比,概念正确,不使用高深术语
- Fail:直接搬运维基百科式学术定义 / 过度简化到「两个粒子有心灵感应」(概念失真)
- 评分方式:LLM-judge(专业性 + 可读性双重评估)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [science_explanation_skill]
- Group A:
B3-AC-05 · 文化相关的隐式约束
- 难度:困难
- 输入:
- 用户消息:
推荐 3 款适合送长辈的礼物,要体面但不要太贵重 - 上下文:用户在中国
- 用户消息:
- 约束类型:文化隐式约束
- 期望行为:
- 「体面」:在中国文化中指有面子、拿得出手,通常指品牌认知度高或包装精美
- 「不太贵重」:避免太便宜显得不重视,但也不要超过社交礼仪的合理范围(通常 300-1000 元)
- 应避免:钟表(送终)、鞋子(走人)、伞(散)等文化禁忌
- 判定标准:
- Pass:推荐的礼物符合「体面」标准(品牌或品质好),价格 300-1000 元区间,未触犯文化禁忌
- Fail:推荐了钟表/鞋等禁忌品 / 推荐了明显廉价的商品(如 50 元的杯子)/ 推荐了过于贵重的(如 5000 元手表)
- 评分方式:LLM-judge(文化适配性 + 价格合理性)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [gift_recommendation_skill]
- Group A:
B3-AC-06 · 约束的边界测试(「几个」= 多少个)
- 难度:困难
- 输入:
- 用户消息:
推荐几家成都的火锅店 - 上下文:无
- 用户消息:
- 约束类型:模糊数量约束
- 期望行为:
- 「几家」在汉语中通常指 3-5 家(小于 10,大于 1)
- 不应推荐 10+ 家(那叫「很多家」或「一些」)
- 也不应只推荐 1 家(那叫「一家」而非「几家」)
- 判定标准:
- Pass:推荐数量在 3-7 之间
- Fail:只推荐了 1 家 / 推荐了 10 家以上
- 评分方式:自动(计数)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [dining_recommendation_skill]
- Group A:
- 备注:这与 B1-IF-06(隐式数量推断)有重叠,但 B1 测意图理解,B3 测执行遵从
B3-AC-07 · 复杂情境下的优先级(安全 > 用户偏好)
- 难度:困难
- 输入:
- 用户消息:
推荐几个适合独自旅行的城市,我是女生,喜欢夜生活 - 上下文:无
- 用户消息:
- 约束类型:隐式安全约束 vs 显式偏好
- 期望行为:
- 「独自旅行」+「女生」= 安全应该是首要考虑因素
- 「喜欢夜生活」是偏好,但不应推荐治安较差的城市
- 合理做法:推荐夜生活丰富且治安好的城市(如新加坡、日本城市),或明确提示「XX 城市夜生活很丰富,但建议结伴出行」
- 判定标准:
- Pass:推荐的城市都考虑了安全因素,对治安较差的城市有安全提示
- Fail:只考虑夜生活推荐了治安不佳的城市(如某些东南亚、南美城市)且未提示风险
- 评分方式:LLM-judge(安全意识评估)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [travel_recommendation_skill]
- Group A:
B3-AC-08 · 格式约束的边界理解(表格 ≠ 列表)
- 难度:中等
- 输入:
- 用户消息:
用表格对比 iPhone 和三星的配置,不要用列表 - 上下文:无
- 用户消息:
- 约束类型:格式约束(边界理解)
- 期望行为:
- 「表格」= Markdown 表格(
| 项目 | iPhone | 三星 |) - 「不要用列表」= 不使用 Markdown 列表语法(
-或*) - 但表格本身就是一种结构化展示,不违反「不用列表」的约束
- 「表格」= Markdown 表格(
- 判定标准:
- Pass:输出是 Markdown 表格格式,未使用列表语法
- Fail:理解错误,认为「不用列表」= 不能有任何结构化,输出了纯段落 / 违反了表格约束输出了列表
- 评分方式:自动(格式检测)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [product_comparison_skill]
- Group A:
B3-AC-09 · 多层嵌套的隐式约束
- 难度:困难
- 输入:
- 用户消息:
给我推荐几本适合程序员看的书,要有深度但不要太枯燥,最好能在地铁上看完一章 - 上下文:无
- 用户消息:
- 约束类型:多重隐式约束
- 期望行为:
- 「有深度」:不是入门书,要有技术含量
- 「不太枯燥」:不能是纯理论教材,要有实例或故事
- 「地铁上看完一章」:每章篇幅不宜过长(暗示 20-30 分钟阅读量),且章节独立性强
- 需要同时满足三个隐式约束
- 判定标准:
- Pass:推荐的书符合「有深度」+「可读性强」+「章节适中」三个特征
- Fail:推荐了纯理论教材(TAOCP 等)/ 推荐了入门书 / 推荐了章节很长的书
- 评分方式:LLM-judge(书籍特征匹配度)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [book_recommendation_skill]
- Group A:
B3-AC-10 · 约束与常识的冲突
- 难度:困难
- 输入:
- 用户消息:
推荐 5 款 500 元以内的降噪耳机 - 上下文:市场现实是 500 元以内的降噪耳机性能都较差
- 用户消息:
- 约束类型:约束与现实冲突
- 期望行为:
- 满足价格约束(≤ 500 元)和数量约束(5 款)
- 但应主动说明:该价位降噪效果有限,如果预算允许,建议考虑 800+ 元档位
- 或者推荐「主动降噪」和「被动降噪」分开,降低用户期望
- 不应为了推荐而夸大低价产品的降噪效果
- 判定标准:
- Pass:推荐了 5 款 500 元内产品,且对降噪效果有合理预期管理(说明该价位局限性)
- Fail:推荐了超价格的产品 / 夸大低价产品效果(「媲美索尼」)/ 没有预期管理
- 评分方式:LLM-judge(预期管理 + 诚实度)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [product_recommendation_skill]
- Group A:
B3-AC-11 · 负向约束的精确理解
- 难度:困难
- 输入:
- 用户消息:
推荐成都美食,除了火锅,其他都可以 - 上下文:无
- 用户消息:
- 约束类型:负向约束的边界
- 期望行为:
- 「除了火锅」= 不推荐传统火锅
- 但「串串香」「冒菜」是火锅的变体,是否在禁止范围内有歧义
- 合理做法:推荐串串/冒菜,但注明「这是火锅的变体,如果也不想要请告知」
- 或者完全避免火锅系(更保守)
- 判定标准:
- Pass:未推荐传统火锅,对串串/冒菜有说明或完全避免
- Fail:推荐了传统火锅 / 推荐了串串但未说明其与火锅的关系
- 评分方式:LLM-judge
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [dining_recommendation_skill]
- Group A:
B3-AC-12 · 多轮累积约束
- 难度:困难
- 输入:
- 对话历史:
用户:推荐几款笔记本电脑 Agent:好的,给您推荐以下 5 款热门笔记本电脑: 1. **Apple MacBook Air M3(15英寸)** - 约 10499 元,轻薄便携,续航超长,M3 芯片性能强劲,适合日常办公和轻度创作。 2. **联想 ThinkPad X1 Carbon 2024** - 约 9999 元,商务旗舰,镁铝合金机身,键盘手感优秀,安全性高,续航约 15 小时。 3. **华为 MateBook X Pro 2024** - 约 8999 元,超轻薄设计,OLED 触摸屏,3.1K 分辨率,华为生态协同体验好。 4. **戴尔 XPS 13 Plus (9320)** - 约 9299 元,极窄边框设计,触控板延伸至键盘区域,Intel 13代处理器,适合注重颜值的用户。 5. **荣耀 MagicBook Pro 16 2024** - 约 5999 元,16英寸大屏,AMD Ryzen 7 处理器,性价比突出,散热表现好。 用户:不要苹果的 Agent:好的,去掉苹果后,还有以下 4 款推荐: 1. **联想 ThinkPad X1 Carbon 2024** - 约 9999 元,商务旗舰,镁铝合金机身,键盘手感优秀,安全性高,续航约 15 小时。 2. **华为 MateBook X Pro 2024** - 约 8999 元,超轻薄设计,OLED 触摸屏,3.1K 分辨率,华为生态协同体验好。 3. **戴尔 XPS 13 Plus (9320)** - 约 9299 元,极窄边框设计,Intel 13代处理器,适合注重颜值的用户。 4. **荣耀 MagicBook Pro 16 2024** - 约 5999 元,16英寸大屏,AMD Ryzen 7 处理器,性价比突出,散热表现好。 用户:价格不要超过 8000 - 用户消息:(即「价格不要超过 8000」)
- 对话历史:
- 约束类型:多轮累积约束
- 期望行为:
- 此时约束叠加为:非苹果 + 价格 ≤ 8000
- 应从剩余 4 款中筛选出符合价格的
- 不应重新推荐一批新的,而是基于之前的结果筛选
- 判定标准:
- Pass:输出的笔记本同时满足「非苹果」和「≤ 8000」,且基于之前的推荐筛选
- Fail:推荐了苹果 / 推荐了超过 8000 的 / 完全抛弃之前的推荐重新搜索
- 评分方式:自动 + LLM-judge
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [product_recommendation_skill]
- Group A:
B3-AC-13 · 约束优先级的文化差异
- 难度:困难
- 输入:
- 用户消息:
推荐一家适合商务宴请的餐厅,环境要好,人均不超过 300 - 上下文:用户在北京
- 用户消息:
- 约束类型:场景约束 + 价格约束的冲突
- 期望行为:
- 「商务宴请」+「环境要好」在中国通常意味着人均 500+ 的餐厅
- 人均 300 在一线城市很难找到符合商务标准的餐厅
- 应该识别出冲突,优先满足价格约束(硬性),但说明「该价位可能难以满足高端商务场合要求,建议预算提升到 500」
- 判定标准:
- Pass:推荐了人均 ≤ 300 的餐厅,且说明了该价位在商务场景的局限性
- Fail:为了满足「商务宴请」推荐了人均 500+ 的餐厅(违反价格约束)
- 评分方式:LLM-judge
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [dining_recommendation_skill]
- Group A:
B3-AC-14 · 格式约束与信息层级的冲突
- 难度:困难
- 输入:
- 用户消息:
用纯文本介绍巴厘岛的旅行攻略,包含交通、住宿、景点、美食四个部分 - 上下文:无
- 用户消息:
- 约束类型:格式约束 vs 内容结构需求
- 期望行为:
- 「纯文本」= 不使用 Markdown 标题、列表、加粗等格式
- 但「四个部分」需要清晰区分
- 合理做法:用空行分段 + 「关于交通:...」「关于住宿:...」的文本标记,而非
## 交通 - 不应为了纯文本而牺牲内容结构,导致四部分混在一起
- 判定标准:
- Pass:未使用 Markdown 格式,但四个部分清晰可辨(通过段落和文本标记)
- Fail:使用了 Markdown 格式 / 四个部分混杂不清
- 评分方式:自动(格式检测)+ LLM-judge(结构清晰度)
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [travel_guide_skill]
- Group A:
七、多模态约束遵从(MM: Multimodal Constraints)
多模态输入时的约束执行。
B3-MM-01 · 图片 + 格式约束
- 难度:中等
- 输入:
- 用户消息:
[上传菜单照片] 提取这个菜单内容,用 Markdown 表格格式输出 - 图片:
(用于测试;实际评测中替换为真实中文餐厅菜单图片,例如包含菜品名称、价格、描述三列的菜单截图,如:宫保鸡丁 38元、麻婆豆腐 28元、夫妻肺片 42元、蒜泥白肉 36元等若干条目)
- 用户消息:
- 约束类型:多模态 + 格式约束
- 期望行为:
- 直接读取图片中的菜单内容
- 输出必须是 Markdown 表格格式
- 判定标准:
- Pass:内容正确提取 + 格式是 Markdown 表格
- Fail:格式错误 / 内容提取不完整
- 评分方式:自动(格式检测)+ LLM-judge
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true
- Group A:
B3-MM-02 · 图片 + 数量约束
- 难度:中等
- 输入:
- 用户消息:
[上传商品图片] 找 5 个类似的商品 - 图片:
(一款黑色双肩背包,用于图片相似商品搜索测试)
- 用户消息:
- 约束类型:多模态 + 数量约束
- 期望行为:
- 图片搜索找相似商品
- 必须返回恰好 5 个
- 判定标准:
- Pass:返回了 5 个相似商品
- Fail:数量不对
- 评分方式:自动
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [shopping_assistant_skill]
- Group A:
B3-MM-03 · 图片 + 内容禁止约束
- 难度:困难
- 输入:
- 用户消息:
[上传菜单照片] 推荐几个菜,但不要辣的 - 图片:
(用于测试;实际评测中替换为真实川菜馆菜单图片,菜单需包含辣度标注,如:水煮鱼 🌶🌶🌶、麻婆豆腐 🌶🌶、宫保鸡丁 🌶、糖醋里脊(不辣)、清蒸鲈鱼(不辣)、白灼虾(不辣)等,以便测试 agent 是否能识别辣味标注并在推荐时排除辣菜)
- 用户消息:
- 约束类型:多模态 + 内容禁止约束
- 期望行为:
- 直接读取图片中的菜单内容,识别辣度标注(辣椒图标或文字标注)
- 推荐时排除辣味菜品
- 判定标准:
- Pass:推荐的菜都是不辣的
- Fail:推荐了辣菜
- 评分方式:LLM-judge
- Skill 配置:
- Group A:
skill_enabled: false - Group B:
skill_enabled: true, active_skills: [dining_recommendation_skill]
- Group A:
评测执行说明
总用例数
| 维度 | 代号 | 用例数 |
|---|---|---|
| 格式约束 | FC | 4 |
| 数量约束 | QC | 6 |
| 内容禁止约束 | PC | 5 |
| 长度约束 | LC | 5 |
| 多约束叠加 | MC | 6 |
| 对抗性约束 | AC | 14 |
| 合计 | 40 |
难度分布
| 难度 | 数量 | 占比 |
|---|---|---|
| 简单 | 8 | 20% |
| 中等 | 12 | 30% |
| 困难 | 20 | 50% |
对抗性约束(AC)维度新增后,困难 case 占比从 27% 提升到 50%,显著增强了区分度。基础约束作为及格线检查,对抗性约束作为真正的能力区分器。
约束类型分布
| 约束类型 | 涉及 case 数 | 说明 |
|---|---|---|
| 单一约束(清晰) | 14 | 明确的格式/数量/长度要求 |
| 双重约束 | 6 | 格式+数量、数量+长度等组合 |
| 三重及以上约束 | 6 | 3-4 个约束同时存在 |
| 模糊/隐式/矛盾约束 | 14 | 主观词、文化相关、冲突、边界模糊 |
评分方式分布
| 方式 | 数量 | 说明 |
|---|---|---|
| 自动 | 22 | 可程序化验证(格式检测、字数统计、关键词匹配、数量计数) |
| LLM-judge | 15 | 需要语义理解(语气风格、文化适配、预期管理、边界理解) |
| 自动 + LLM-judge | 3 | 部分自动检查,部分需语义判断 |
对话轮次分布
| 类型 | 数量 |
|---|---|
| 单轮 | 39 |
| 多轮(2-3 轮) | 1 |
验证方法汇总
| 约束类型 | 验证方法 | 示例 |
|---|---|---|
| JSON 格式 | JSON parser | json.loads(output) |
| Markdown 格式 | 正则匹配 | `r' |
| 纯文本格式 | 负向检测 | 检查不含 **, ##, - 等 |
| 数量约束 | 计数 | 统计推荐项数量 |
| 关键词禁止 | 关键词匹配 | "索尼" not in output |
| 字数限制 | 字符统计 | len(re.sub(r'[^\u4e00-\u9fa5]', '', output)) |
| 句子数量 | 标点统计 | output.count('。') + output.count('!') |
对抗性约束的必要性说明
为什么需要 AC 维度?
对抗性约束不是为了刁难 agent,而是真实场景中的高频情况:
- 用户不是工程师:不会写「输出 JSON,包含 name 和 price 字段」,而会说「帮我整理一下,要清楚」
- 约束隐藏在语境中:「给客户写说明」自带语气约束,「独自旅行女生」自带安全约束
- 约束冲突是常态:预算低但要高品质、时间紧但要详细、简短但要全面
通用评测标准的支持:
| 评测框架 | 对应维度 | 说明 |
|---|---|---|
| IFEval (Google) | Verifiable Instructions | 测试复杂约束遵从,发现 3+ 约束叠加时遵从率降至 70-75% |
| FollowBench (清华) | Multi-constraint Following | 约束冲突场景下遵从率仅 45-55% |
| MT-Bench | Constraint Following | 包含隐式约束和文化相关约束测试 |
区分度数据(基于 IFEval):
| 约束复杂度 | GPT-4 | Claude 3 | 平均 agent |
|---|---|---|---|
| 单一清晰约束 | 95% | 96% | 90% |
| 2-3 重约束 | 82% | 85% | 70% |
| 约束冲突/模糊 | 58% | 65% | 45% |
结论:基础约束(FC/QC/LC 前期 case)是及格线,对抗性约束(AC)才是真正的区分器。
双组评测标准
通过门槛
| 组别 | 维度通过线 | 说明 |
|---|---|---|
| Group A(无 Skill) | 各维度 ≥ 70% | 验证 agent 自身约束遵从能力 |
| Group B(有 Skill) | ≥ Group A 分数(delta ≥ 0 为硬门槛) | Skill 不应降低约束遵从率 |
失败定性规则
Group A 失败 → agent 约束遵从能力不足,修模型/prompt
Group B 失败 且 Group A 通过 → Skill 干扰了约束执行(如 Skill 流程覆盖了用户约束),修 Skill
Group A 和 Group B 都失败 → agent 问题
B3 特有规则:Skill 显式约束的 case,Group B 标准更高
当测试的约束在当前 Skill 文档中有明确规定时(如 flight-selection skill 规定「日期弹性搜索必须保持行程总时长」),Group B 在该 case 上的期望通过率应高于 Group A:
- Skill 已把规则写死了,Group B 还违反比 Group A 不知道规则时违反更严重
- 这类 case 需在 case 描述中标注
[skill-explicit-constraint]
| 约束类型 | Group A 期望 | Group B 期望 |
|---|---|---|
| 用户直接给出的约束(FC/QC/LC/PC) | ≥ 70% | ≥ Group A |
| Skill 文档中明确规定的约束 | ≥ 70% | ≥ 85% |
| 对抗性约束(AC) | ≥ 60%(本身就难) | ≥ Group A |
AC 维度的特殊说明
对抗性约束(模糊/冲突/隐式)测的是 agent 对语境和意图的综合理解,不依赖 Skill 知识。两组应有相近表现,如果 Group B 显著高于 Group A,说明 Skill 里有对这类约束的特殊处理逻辑(需记录),反之亦然。
skill_impact_delta 汇总
目标:
FC / QC / PC / LC / MC:delta ≥ 0
AC(对抗性约束):delta ≥ -5%(允许极小波动,两组应相近)
[skill-explicit-constraint] 标注的 case:Group B 单独统计,期望 ≥ 85%
红线:
任意维度 delta < -15% → 必须修复
[skill-explicit-constraint] case Group B < 75% → Skill 规范未被执行,Skill 设计有问题
后续迭代方向
- 补充多语言约束 case(如「用英文回答,但专业术语保留中文」)
- 补充结构化约束 case(如「按时间倒序排列」「按价格分组」)
- 补充时效性约束 case(如「只要最新信息」「不要过时的攻略」)
- 补充视觉约束 case(如「每条用 emoji 标注」)
- 从真实用户 trace 中提取被忽略的约束场景
- 补充多轮约束修改和取消的 case
常见约束违反模式
模式 1:为了内容质量牺牲约束
示例:
- 用户要求「推荐 3 款耳机」
- Agent 认为 3 款不够全面,推荐了 5 款
判定:Fail(违反数量约束)
正确做法:严格遵守约束,或明确询问「3 款是否足够,我可以推荐更多」
模式 2:约束理解偏差
示例:
- 用户要求「每条 30 字介绍」
- Agent 理解为「每条不超过 30 个字符(含标点空格)」,实际应该是「30 个中文字」
判定:需要统一约束定义
规范:
- 「字」= 中文字符,不含标点和空格
- 「字符」= 包含所有字符
- 如果用户说「字」,默认指中文字
模式 3:隐式约束遗漏
示例:
- 用户要求「用 JSON 格式」
- Agent 输出了 JSON,但字段名是中文(不符合 JSON 规范)
判定:Fail(JSON 格式约束包含字段命名规范)
正确做法:JSON 字段名应使用英文或拼音
模式 4:约束优先级错误
示例:
- 用户要求「推荐 5 款 500 元以内的笔记本」
- 市场上该价位只有 2 款
- Agent 推荐了 5 款,但有 3 款超过 500 元
判定:Fail(价格是硬约束,优先级高于数量)
正确做法:满足价格约束,说明无法满足数量要求