B3 · 指令约束遵从 · 测试用例

对应框架维度:B3 指令约束遵从 状态:初稿 最后更新:2026-04-07


维度说明

B3 测试的是 agent 能否严格执行用户给出的精确约束条件,与 B1(意图理解)的区别:

例如:


用例规范

每条用例包含以下字段:

字段 说明
ID 格式:B3-{维度缩写}-{序号}
维度 所属评测维度
难度 简单 / 中等 / 困难
输入 用户消息 + 上下文
约束类型 格式/数量/内容禁止/长度/多约束
期望行为 agent 应该输出什么样的内容
判定标准 Pass / Fail 的明确条件(可程序化验证)
评分方式 自动 / LLM-judge
Skill 配置 Group A (无 skill) / Group B (有 skill)

一、格式约束(FC: Format Constraint)

指定输出格式(JSON / Markdown / 纯文本)时,是否严格遵守。

B3-FC-01JSON 格式输出
  • 难度简单
  • 输入
    • 用户消息:推荐 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]
B3-FC-02Markdown 表格格式
  • 难度简单
  • 输入
    • 用户消息:对比一下 iPhone 16 和三星 S25 的核心参数,用 Markdown 表格格式
    • 上下文:无
  • 约束类型:格式约束
  • 期望行为
    • 输出必须是 Markdown 表格语法(| 列1 | 列2 |
    • 包含表头和至少 2 行数据
  • 判定标准
    • Pass:输出包含 Markdown 表格语法(|-),至少 3 行(表头 + 分隔线 + 数据行)
    • Fail:使用纯文本列表 / 使用 JSON / 不是表格格式
  • 评分方式:自动(正则匹配 Markdown 表格语法)
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [product_comparison_skill]
B3-FC-03纯文本无格式化
  • 难度中等
  • 输入
    • 用户消息:给我一段关于京都旅行的介绍,不要用任何格式化标记,纯文本就好
    • 上下文:无
  • 约束类型:格式约束
  • 期望行为
    • 输出应该是纯文本,不包含 Markdown 语法(如 **, #, -, *
    • 不应有项目符号、标题、加粗等格式
  • 判定标准
    • Pass:输出不包含 Markdown 语法字符(**, ##, - , * , >
    • Fail:使用了任何 Markdown 格式化标记
  • 评分方式:自动(正则检测 Markdown 语法)
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [travel_guide_skill]
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]

二、数量约束(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]
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]
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]
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]
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]
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]

三、内容禁止约束(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]
B3-PC-02禁止特定类别
  • 难度中等
  • 输入
    • 用户消息:推荐成都的美食,但不要推荐火锅
    • 上下文:无
  • 约束类型:内容禁止约束
  • 期望行为
    • 推荐的美食中不应包含火锅
    • 可以提及火锅(如「除火锅外,成都还有……」),但不能将其列为推荐项
    • 可以推荐其他川菜(串串、冒菜、担担面等)
  • 判定标准
    • Pass:没有将火锅作为推荐的美食
    • Fail:把火锅列为推荐项之一
  • 评分方式:LLM-judge
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [dining_recommendation_skill]
B3-PC-03禁止特定表述方式
  • 难度中等
  • 输入
    • 用户消息:介绍一下巴厘岛旅行攻略,但不要用"打卡"这种网络用语
    • 上下文:无
  • 约束类型:内容禁止约束
  • 期望行为
    • 输出中不应出现「打卡」一词
    • 可以用「游览」「参观」「体验」等替代
  • 判定标准
    • Pass:输出不包含「打卡」字样
    • Fail:使用了「打卡」一词
  • 评分方式:自动(关键词检测)
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [travel_guide_skill]
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]
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]

四、长度约束(LC: Length Constraint)

「200 字以内」「一句话总结」等长度限制的遵守率。

B3-LC-01精确字数上限
  • 难度简单
  • 输入
    • 用户消息:用 200 字以内总结一下京都的旅行特色
    • 上下文:无
  • 约束类型:长度约束
  • 期望行为
    • 输出字数 ≤ 200(中文字符,不含标点和空格)
    • 内容应该是总结而非详细攻略
  • 判定标准
    • Pass:输出中文字符数 ≤ 220(允许小幅超出)
    • Fail:超过 220 字
  • 评分方式:自动(字数统计)
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [travel_guide_skill]
B3-LC-02一句话总结
  • 难度中等
  • 输入
    • 用户消息:用一句话总结 iPhone 16 的核心卖点
    • 上下文:无
  • 约束类型:长度约束
  • 期望行为
    • 输出应该是一句话,不应有多个句子(以句号分隔)
    • 句子应该完整、有主谓宾
  • 判定标准
    • Pass:输出只包含一个句子(只有一个句号/感叹号/问号结尾)
    • Fail:包含了 2 个及以上句子
  • 评分方式:自动(句子数量统计)
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [product_summary_skill]
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]
B3-LC-04长度与信息完整性冲突
  • 难度困难
  • 输入
    • 用户消息:用 50 字介绍一下巴厘岛旅行要注意什么
    • 上下文:无
  • 约束类型:长度约束
  • 期望行为
    • 输出 ≤ 50 字
    • 但应尽量涵盖关键信息(签证、气候、安全等)
    • 不应因为字数限制而只说一件事(如只说签证)
  • 判定标准
    • Pass:字数 ≤ 55(允许小幅超出)且涵盖了至少 2-3 个关键注意事项
    • Fail:超过 55 字 / 只提了 1 个注意事项
  • 评分方式:自动(字数)+ LLM-judge(信息覆盖度)
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [travel_tips_skill]
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]

五、多约束叠加(MC: Multiple Constraints)

同时存在多个约束时,是否全部满足而非顾此失彼。

B3-MC-01格式 + 数量
  • 难度中等
  • 输入
    • 用户消息:用 Markdown 列表格式推荐 3 款笔记本电脑
    • 上下文:无
  • 约束类型:多约束(格式 + 数量)
  • 期望行为
    • 使用 Markdown 列表语法(-*
    • 恰好 3 款
  • 判定标准
    • Pass:是 Markdown 列表格式且恰好 3 项
    • Fail:格式错误 / 数量不对
  • 评分方式:自动
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [product_recommendation_skill]
B3-MC-02数量 + 长度
  • 难度中等
  • 输入
    • 用户消息:推荐 5 家北京的餐厅,每家用 50 字介绍
    • 上下文:无
  • 约束类型:多约束(数量 + 长度)
  • 期望行为
    • 恰好 5 家餐厅
    • 每家介绍 ≤ 50 字(允许小幅超出)
  • 判定标准
    • Pass:5 家餐厅且每家介绍都 ≤ 55 字
    • Fail:数量不对 / 任何一家超过 55 字
  • 评分方式:自动
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [dining_recommendation_skill]
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]
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]
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]
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]

六、对抗性约束(AC: Adversarial Constraints)

约束表述模糊、自相矛盾、或有隐式要求,测试 agent 的边界理解和冲突处理能力。这是区分优秀 agent 和普通 agent 的关键维度。

B3-AC-01模糊长度约束(「简短」的歧义)
  • 难度困难
  • 输入
    • 用户消息:简短介绍一下京都的旅行特色
    • 上下文:无
  • 约束类型:模糊约束
  • 期望行为
    • 「简短」是主观词,没有明确字数
    • 应理解为「言简意赅」:内容精炼,不罗列大量细节
    • 不应输出像详细攻略一样的长篇内容
    • 也不应只有一两句话,信息量过少
  • 判定标准
    • Pass:回答感觉「简短」,内容精炼无冗余,且包含了核心特色(如古建筑、寺庙、和服体验等)
    • Fail:内容过长,像详细攻略,不符合「简短」的语感 / 内容过少,几乎没有信息量
  • 评分方式:LLM-judge
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [travel_guide_skill]
B3-AC-03隐式语气约束
  • 难度困难
  • 输入
    • 用户消息:给客户写一段关于延迟发货的说明,要专业但不要太死板
    • 上下文:无
  • 约束类型:隐式约束(语气/风格)
  • 期望行为
    • 「专业」:用词准确、逻辑清晰、有歉意但不卑微
    • 「不太死板」:避免纯官方套话、可以适当有人情味、不要过度使用「敬请谅解」「不胜感激」等客套话
    • 平衡点:正式但不僵硬
  • 判定标准
    • Pass:语气正式(无口语化、网络用语),但有适度人情味(如「给您带来不便」而非「对您造成的困扰表示深深歉意」)
    • Fail:过度官方(连续使用 3 个以上敬语)/ 过于随意(「不好意思哈」「实在抱歉啦」)
  • 评分方式:LLM-judge(语气风格评估)
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [business_writing_skill]
B3-AC-04专业度边界(避免过度学术)
  • 难度困难
  • 输入
    • 用户消息:解释一下什么是量子纠缠,要专业准确,但不要太学术,我高中毕业
    • 上下文:无
  • 约束类型:隐式约束(专业度 + 受众适配)
  • 期望行为
    • 「专业准确」:概念不能错,不能过度简化导致失真
    • 「不太学术」:避免公式、术语堆砌(如薛定谔方程、希尔伯特空间)
    • 「高中毕业」:可以用高中物理知识类比(如波动、概率),避免需要大学物理背景
  • 判定标准
    • Pass:用通俗语言解释,有类比,概念正确,不使用高深术语
    • Fail:直接搬运维基百科式学术定义 / 过度简化到「两个粒子有心灵感应」(概念失真)
  • 评分方式:LLM-judge(专业性 + 可读性双重评估)
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [science_explanation_skill]
B3-AC-05文化相关的隐式约束
  • 难度困难
  • 输入
    • 用户消息:推荐 3 款适合送长辈的礼物,要体面但不要太贵重
    • 上下文:用户在中国
  • 约束类型:文化隐式约束
  • 期望行为
    • 「体面」:在中国文化中指有面子、拿得出手,通常指品牌认知度高或包装精美
    • 「不太贵重」:避免太便宜显得不重视,但也不要超过社交礼仪的合理范围
    • 应避免:钟表(送终)、鞋子(走人)、伞(散)等文化禁忌
  • 判定标准
    • Pass:推荐的礼物符合「体面」感(品牌或品质好),价格感觉适中——不过于廉价也不过于贵重,未触犯文化禁忌
    • Fail:推荐了钟表/鞋等禁忌品 / 推荐的商品明显廉价(与「体面」违背)/ 推荐的商品明显过于贵重(与「不太贵重」违背)
  • 评分方式:LLM-judge(文化适配性 + 价格合理性)
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [gift_recommendation_skill]
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]
  • 备注:这与 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]
B3-AC-08格式约束的边界理解(表格 ≠ 列表)
  • 难度中等
  • 输入
    • 用户消息:用表格对比 iPhone 和三星的配置,不要用列表
    • 上下文:无
  • 约束类型:格式约束(边界理解)
  • 期望行为
    • 「表格」= Markdown 表格(| 项目 | iPhone | 三星 |
    • 「不要用列表」= 不使用 Markdown 列表语法(-*
    • 但表格本身就是一种结构化展示,不违反「不用列表」的约束
  • 判定标准
    • Pass:输出是 Markdown 表格格式,未使用列表语法
    • Fail:理解错误,认为「不用列表」= 不能有任何结构化,输出了纯段落 / 违反了表格约束输出了列表
  • 评分方式:自动(格式检测)
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [product_comparison_skill]
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]
B3-AC-10约束与常识的冲突
  • 难度困难
  • 输入
    • 用户消息:推荐 5 款 500 元以内的降噪耳机
    • 上下文:市场现实是 500 元以内的降噪耳机性能都较差
  • 约束类型:约束与现实冲突
  • 期望行为
    • 满足价格约束(≤ 500 元)和数量约束(5 款)
    • 不应为了推荐而夸大低价产品的降噪效果
    • 不应主动劝说用户提高预算(用户没有询问,尊重其给出的约束)
  • 判定标准
    • Pass:推荐了 5 款 500 元内产品,对产品效果的描述客观诚实,未夸大
    • Fail:推荐了超出价格约束的产品 / 夸大低价产品效果(如「媲美索尼 WH-1000XM5」)
  • 评分方式:LLM-judge(约束遵守 + 描述诚实度)
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [product_recommendation_skill]
B3-AC-11负向约束的精确理解
  • 难度困难
  • 输入
    • 用户消息:推荐成都美食,除了火锅,其他都可以
    • 上下文:无
  • 约束类型:负向约束的边界
  • 期望行为
    • 「除了火锅」= 不推荐传统火锅
    • 但「串串香」「冒菜」是火锅的变体,是否在禁止范围内有歧义
    • 合理做法:推荐串串/冒菜,但注明「这是火锅的变体,如果也不想要请告知」
    • 或者完全避免火锅系(更保守)
  • 判定标准
    • Pass:未推荐传统火锅,对串串/冒菜有说明或完全避免
    • Fail:推荐了传统火锅 / 推荐了串串但未说明其与火锅的关系
  • 评分方式:LLM-judge
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [dining_recommendation_skill]
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
    • 输出的笔记本必须同时满足两个约束
  • 判定标准
    • Pass:输出的笔记本同时满足「非苹果」和「≤ 8000」
    • Fail:推荐了苹果 / 推荐了超过 8000 的产品
  • 评分方式:LLM-judge
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [product_recommendation_skill]
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]

七、多模态约束遵从(MM: Multimodal Constraints)

多模态输入时的约束执行。

B3-MM-01图片 + 格式约束
  • 难度中等
  • 输入
    • 用户消息:[上传菜单照片] 提取这个菜单内容,用 Markdown 表格格式输出
    • 图片:https://maze-copaw.oss-cn-guangzhou.aliyuncs.com/eval-images/b3-mm-01-restaurant-menu.jpg(用于测试;实际评测中替换为真实中文餐厅菜单图片,例如包含菜品名称、价格、描述三列的菜单截图,如:宫保鸡丁 38元、麻婆豆腐 28元、夫妻肺片 42元、蒜泥白肉 36元等若干条目)
  • 约束类型:多模态 + 格式约束
  • 期望行为
    • 直接读取图片中的菜单内容
    • 输出必须是 Markdown 表格格式
  • 判定标准
    • Pass:内容正确提取 + 格式是 Markdown 表格
    • Fail:格式错误 / 内容提取不完整
  • 评分方式:自动(格式检测)+ LLM-judge
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true
B3-MM-02图片 + 数量约束
  • 难度中等
  • 输入
    • 用户消息:[上传商品图片] 找 5 个类似的商品
    • 图片:https://maze-copaw.oss-cn-guangzhou.aliyuncs.com/eval-images/b3-mm-02-zegna-backpack.jpg(一款黑色双肩背包,用于图片相似商品搜索测试)
  • 约束类型:多模态 + 数量约束
  • 期望行为
    • 图片搜索找相似商品
    • 必须返回恰好 5 个
  • 判定标准
    • Pass:返回了 5 个相似商品
    • Fail:数量不对
  • 评分方式:自动
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [shopping_assistant_skill]
B3-MM-03图片 + 内容禁止约束
  • 难度困难
  • 输入
    • 用户消息:[上传菜单照片] 推荐几个菜,但不要辣的
    • 图片:https://maze-copaw.oss-cn-guangzhou.aliyuncs.com/eval-images/b3-mm-03-sichuan-menu.jpg(用于测试;实际评测中替换为真实川菜馆菜单图片,菜单需包含辣度标注,如:水煮鱼 🌶🌶🌶、麻婆豆腐 🌶🌶、宫保鸡丁 🌶、糖醋里脊(不辣)、清蒸鲈鱼(不辣)、白灼虾(不辣)等,以便测试 agent 是否能识别辣味标注并在推荐时排除辣菜)
  • 约束类型:多模态 + 内容禁止约束
  • 期望行为
    • 直接读取图片中的菜单内容,识别辣度标注(辣椒图标或文字标注)
    • 推荐时排除辣味菜品
  • 判定标准
    • Pass:推荐的菜都是不辣的
    • Fail:推荐了辣菜
  • 评分方式:LLM-judge
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [dining_recommendation_skill]

评测执行说明

总用例数

维度 代号 用例数
格式约束 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,而是真实场景中的高频情况:

  1. 用户不是工程师:不会写「输出 JSON,包含 name 和 price 字段」,而会说「帮我整理一下,要清楚」
  2. 约束隐藏在语境中:「给客户写说明」自带语气约束,「独自旅行女生」自带安全约束
  3. 约束冲突是常态:预算低但要高品质、时间紧但要详细、简短但要全面

通用评测标准的支持

评测框架 对应维度 说明
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:

约束类型 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 设计有问题

后续迭代方向


常见约束违反模式

模式 1:为了内容质量牺牲约束

示例

判定:Fail(违反数量约束)

正确做法:严格遵守约束,或明确询问「3 款是否足够,我可以推荐更多」


模式 2:约束理解偏差

示例

判定:需要统一约束定义

规范


模式 3:隐式约束遗漏

示例

判定:Fail(JSON 格式约束包含字段命名规范)

正确做法:JSON 字段名应使用英文或拼音


模式 4:约束优先级错误

示例

判定:Fail(价格是硬约束,优先级高于数量)

正确做法:满足价格约束,说明无法满足数量要求