X · 输出一致性与风格对齐 · 测试用例

对应框架维度:X 输出一致性与风格对齐(横切维度) 状态:初稿 最后更新:2026-04-07


维度说明

X 是贯穿所有层级的横切关注点,测试:

  1. 输出一致性:同一任务多次执行,结果是否稳定
  2. Skill 稳定性增益:有 skill vs 无 skill,一致性提升幅度(你的产品核心价值)
  3. 风格对齐:语气、表达方式是否符合产品定位(生活助手)

与其他维度的区别:


用例规范

字段 说明
ID 格式:X-{维度缩写}-{序号}
维度 所属评测子维度
难度 简单 / 中等 / 困难
重复次数 同一 case 需要跑 N 次(通常 5 次)
输入 用户消息 + 上下文
期望行为 多次输出应该保持什么一致、什么可以变化
判定标准 一致性指标的计算方式
评分方式 自动 / LLM-judge
Skill 配置 Group A 和 Group B 都要跑

一、输出一致性(OC: Output Consistency)

同一任务多次执行,输出质量方差。

X-OC-01确定性任务的完全一致
  • 难度简单
  • 重复次数:5 次
  • 输入
    • 用户消息:查一下明天北京的天气
    • 上下文:无
  • 期望行为
    • 5 次执行应该调用相同的工具(maps_weather)
    • 输出的核心信息应该完全一致(温度、天气状况)
    • 表述方式可以略有不同,但关键数据必须一致
  • 判定标准
    • 计算一致性:比较 5 次输出的温度数据,完全相同 = 100% 一致
    • Pass:一致性 ≥ 90%
    • Fail:一致性 < 80%(如 5 次输出了 4 个不同的温度)
  • 评分方式:自动(提取关键数据对比)
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true
X-OC-02推荐任务的部分一致
  • 难度中等
  • 重复次数:5 次
  • 输入
    • 用户消息:推荐 3 款降噪耳机,预算 2000 以内
    • 上下文:无
  • 期望行为
    • 5 次执行的推荐可以不完全相同(搜索结果可能有顺序变化)
    • 但核心一致性应该保持:
      • 推荐的品牌档次一致(不是一次推荐高端品牌,一次推荐低端)
      • 价格区间一致(都在 2000 以内)
      • 推荐理由的核心要素一致(降噪效果、续航等)
    • 具体型号可以不同,但质量水平应该一致
  • 判定标准
    • 5 次输出中,核心要素一致率:
      • 价格区间一致:5/5(必须)
      • 推荐档次一致:≥ 4/5
      • 推荐理由维度一致:≥ 4/5
    • Pass:核心一致性 ≥ 80%
    • Fail:核心一致性 < 60%
  • 评分方式:LLM-judge(对比 5 次输出的核心要素)
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [product_recommendation_skill]
X-OC-03复杂任务的结构一致性
  • 难度困难
  • 重复次数:5 次
  • 输入
    • 用户消息:规划 5 月 10-15 号去京都的旅行,从上海出发,去清水寺、金阁寺、岚山
    • 上下文:无
  • 期望行为
    • 5 次执行的具体航班、行程顺序可能不同
    • 但结构一致性应该保持:
      • 都包含机票、日程、住宿三个部分
      • 日程都是分天编排(不是一次分 3 天,一次不分天)
      • 景点的时间分配逻辑一致(如都把岚山放在单独一天 vs 都把岚山和其他景点同一天)
  • 判定标准
    • 结构一致性:
      • 输出结构(三部分):5/5 一致
      • 日程编排逻辑(分天策略):≥ 4/5 一致
      • 景点时间分配策略:≥ 3/5 一致
    • Pass:结构一致性 ≥ 70%
    • Fail:结构一致性 < 50%(5 次输出风格完全不同)
  • 评分方式:LLM-judge
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [flight-selection, itinerary-planning]

二、Skill 稳定性增益(SD: Skill Stability Delta)

有 skill vs 无 skill,输出一致性提升幅度。这是产品核心价值的量化指标。

X-SD-01机票推荐的稳定性
  • 难度中等
  • 重复次数:Group A 5 次 + Group B 5 次 = 10 次
  • 输入
    • 用户消息:查一下 6 月 10 号北京到东京的机票,两个人
    • 上下文:无
  • 期望行为
    • Group A(无 skill)
      • 5 次可能输出不同的结果(有时只推荐 1 个航班,有时推荐 5 个)
      • 可能有时考虑日期弹性,有时不考虑
      • 一致性预期较低
    • Group B(有 flight-selection skill)
      • 5 次都应该按 skill 规范执行(±1 天搜索、2-3 个推荐选项、附对比基线)
      • 输出结构高度一致
      • 一致性预期较高
  • 判定标准
    • 计算 Group A 一致性:A_consistency(输出结构、推荐数量的一致率)
    • 计算 Group B 一致性:B_consistency
    • Skill 稳定性增益 = B_consistency - A_consistency
    • Pass:增益 ≥ 15%(skill 显著提升了一致性)
    • Fail:增益 < 5%(skill 没有提升一致性)
  • 评分方式:LLM-judge(对比两组的一致性)
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [flight-selection]
X-SD-02行程规划的稳定性
  • 难度困难
  • 重复次数:Group A 5 次 + Group B 5 次 = 10 次
  • 输入
    • 用户消息:帮我排一下新加坡 3 天的行程,去滨海湾花园、鱼尾狮、圣淘沙、动物园
    • 上下文:无
  • 期望行为
    • Group A(无 skill)
      • 可能有时查地图,有时不查
      • 景点分天策略可能每次不同
      • 通勤时间可能是估算的,每次不同
    • Group B(有 itinerary-planning skill)
      • 每次都查地图(skill 要求)
      • 地理聚类逻辑一致,分天策略稳定
      • 通勤时间都是查询的,一致性高
  • 判定标准
    • Group A 一致性预期:40-60%(估算导致不稳定)
    • Group B 一致性预期:75-90%(数据驱动更稳定)
    • Skill 增益 = B - A ≥ 20%
    • Pass:增益 ≥ 20%
    • Fail:增益 < 10%
  • 评分方式:LLM-judge
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [itinerary-planning]
X-SD-03推荐任务的稳定性
  • 难度中等
  • 重复次数:Group A 5 次 + Group B 5 次 = 10 次
  • 输入
    • 用户消息:推荐几款适合送长辈的礼物,预算 500 左右
    • 上下文:无
  • 期望行为
    • Group A(无 skill)
      • 推荐品类可能每次不同(保健品、茶叶、按摩仪等随机组合)
      • 推荐数量可能不稳定(3-7 款)
    • Group B(有 gift-recommendation skill,假设)
      • 按 skill 规定的推荐逻辑,品类和数量稳定
      • 每次都考虑长辈特点、文化禁忌等
  • 判定标准
    • 品类一致性:Group B 应该比 Group A 高 15%+
    • 数量一致性:Group B 应该稳定(如都推荐 5 款)
    • Pass:增益 ≥ 15%
  • 评分方式:LLM-judge
  • Skill 配置
    • Group A: skill_enabled: false
    • Group B: skill_enabled: true, active_skills: [gift_recommendation_skill]

三、语气/风格对齐(SA: Style Alignment)

是否符合产品定义的输出风格规范(生活助手的语气)。

X-SA-01友好但不过度热情
  • 难度中等
  • 重复次数:1 次(风格评估)
  • 输入
    • 用户消息:推荐几款降噪耳机
    • 上下文:无
  • 期望行为
    • 生活助手的合适语气:友好、自然、直接
    • 应该是:「为您推荐几款降噪耳机...」或「以下是几款不错的选择...」
    • 不应该是
      • 过度热情:「哇!降噪耳机是个好选择!让我来为您推荐几款超棒的产品吧!」
      • 过度正式:「尊敬的用户,根据您的需求,现为您呈现如下方案...」
      • 过于随意:「OK,耳机的话我觉得这几个不错哈」
  • 判定标准
    • Pass:语气友好自然,无过度热情或过度正式的表述
    • Fail:语气明显不符合生活助手定位(过于兴奋、过于刻板、过于随意)
  • 评分方式:LLM-judge(语气风格评估,0-5 分)
  • Skill 配置skill_enabled: false
X-SA-02简洁但不失礼貌
  • 难度中等
  • 重复次数:1 次
  • 输入
    • 用户消息:明天天气怎么样
    • 上下文:无
  • 期望行为
    • 应该是:「明天北京晴天,15-25°C」(简洁直接)
    • 不应该是
      • 过度礼貌:「非常感谢您的询问!我很荣幸为您查询天气信息!明天...」(浪费 token)
      • 过于简短:「晴,15-25」(不完整)
      • 带教训口吻:「明天天气不错,建议您出门记得...」(用户没问建议)
    • 平衡:简洁但完整,不多余但不失礼
  • 判定标准
    • Pass:输出简洁(≤ 30 tokens),信息完整,语气自然
    • Fail:过度礼貌(> 50 tokens 的开场白)/ 过于简短(信息不完整)
  • 评分方式:自动(token 计数)+ LLM-judge
  • Skill 配置skill_enabled: false
X-SA-03专业但不学术
  • 难度困难
  • 重复次数:1 次
  • 输入
    • 用户消息:为什么飞机上不能用手机
    • 上下文:无
  • 期望行为
    • 生活助手的解释风格:准确但通俗
    • 应该是:「飞机上的电子设备可能干扰导航系统,虽然现在的手机影响很小,但航空公司出于安全考虑仍然限制」(通俗+准确)
    • 不应该是
      • 过度学术:「电磁波频谱干扰飞行控制系统的 VHF 频段,根据 ICAO 标准...」
      • 过度简化:「怕干扰飞机」(太简略,不专业)
      • 说教口吻:「这是为了你的安全,一定要遵守」
  • 判定标准
    • Pass:解释准确、通俗易懂、语气自然
    • Fail:过度学术化 / 过度简化 / 说教口吻
  • 评分方式:LLM-judge(风格评估)
  • Skill 配置skill_enabled: false
X-SA-04避免不必要的免责声明
  • 难度中等
  • 重复次数:1 次
  • 输入
    • 用户消息:推荐几家三亚的海鲜餐厅
    • 上下文:无
  • 期望行为
    • 直接推荐餐厅即可
    • 不应该包含过度的免责声明:
      • 「以上信息仅供参考,请以实际为准」
      • 「餐厅信息可能有变化,建议出发前再次确认」
      • 「个人口味不同,仅供参考」
    • 这些声明占用 token 但用户价值低
    • 如果确实有重要提示(如「海鲜过敏者注意」),可以简要说明
  • 判定标准
    • Pass:无冗余免责声明,或只有必要的提示(≤ 1 句)
    • Fail:包含 2 句以上的免责声明(占比 > 10%)
  • 评分方式:LLM-judge(识别免责声明)
  • Skill 配置skill_enabled: false
X-SA-05多轮中的语气一致性
  • 难度中等
  • 重复次数:1 次(但需检查多轮)
  • 输入
    • messages 注入(执行用):
      [
        {"role": "user", "content": "推荐几款笔记本"},
        {"role": "assistant", "content": "为您推荐以下几款笔记本,覆盖不同预算和使用场景:\n\n1. **苹果 MacBook Air M3**(约 9499 元)- 超轻薄,续航出色,适合日常办公\n2. **联想小新 Pro 16 2024**(约 5499 元)- 大屏高性价比,适合学生\n3. **华为 MateBook X Pro 2024**(约 7999 元)- 商务轻薄本,OLED 屏"},
        {"role": "user", "content": "有没有轻薄的"},
        {"role": "assistant", "content": "有的,以下是轻薄选项:\n\n- **苹果 MacBook Air M3**:1.24kg,13.6mm 厚\n- **华为 MateBook X Pro 2024**:1.26kg,14.2 英寸但仍很轻\n\n这两款都是轻薄旗舰,适合经常出差携带。"},
        {"role": "user", "content": "价格呢"}
      ]
      
    • 用户消息:(即「价格呢」)
  • 期望行为
    • 三轮对话的语气应该保持一致
    • 不应该第一轮正式(「为您推荐」),第二轮随意(「有啊」),第三轮又变正式
    • 保持统一的友好自然风格
  • 判定标准
    • Pass:三轮语气一致,都是友好自然风格
    • Fail:语气在多轮中明显变化(如从正式变随意)
  • 评分方式:LLM-judge
  • Skill 配置skill_enabled: false

四、输出格式一致性(FC: Format Consistency)

同类任务的输出格式是否统一。

X-FC-01推荐任务的格式统一
  • 难度中等
  • 重复次数:对比 3 个不同推荐任务的输出格式
  • 输入
    • 任务 1:推荐几款降噪耳机
    • 任务 2:推荐几家成都的火锅店
    • 任务 3:推荐几个周末游城市
  • 期望行为
    • 三个推荐任务的输出格式应该一致:
      • 都使用列表(或都使用段落)
      • 每项都包含:名称 + 核心特点 + 价格/位置
      • 结构统一
    • 不应该:任务 1 用列表,任务 2 用段落,任务 3 用表格(格式混乱)
  • 判定标准
    • Pass:三个任务的输出格式基本一致(结构相同)
    • Fail:三个任务格式完全不同
  • 评分方式:LLM-judge(对比格式一致性)
  • Skill 配置skill_enabled: false
X-FC-02错误消息的格式统一
  • 难度简单
  • 重复次数:对比 3 个不同错误场景的输出
  • 输入
    • 场景 1:工具返回错误(search_flights 失败)
    • 场景 2:搜索无结果(taobao_search_products 返回空)
    • 场景 3:参数缺失(用户未提供出发地)
  • 期望行为
    • 三种错误的处理格式应该一致:
      • 都说明了问题是什么
      • 都提供了下一步建议
      • 语气都是友好的,不是冰冷的错误提示
    • 不应该:场景 1 详细解释,场景 2 只说「搜索不到」,场景 3 用问句(风格混乱)
  • 判定标准
    • Pass:三种错误消息的结构一致(说明问题 + 建议方案)
    • Fail:三种风格完全不同
  • 评分方式:LLM-judge
  • Skill 配置skill_enabled: false

五、一致性衰减测试(CD: Consistency Degradation)

测试一致性是否随任务复杂度增加而下降。

X-CD-01简单任务一致性基线
  • 难度简单
  • 重复次数:5 次
  • 输入
    • 用户消息:查明天天气
    • 上下文:无
  • 期望行为
    • 简单任务一致性应该很高(≥ 95%)
    • 这是一致性测试的基线
  • 判定标准
    • Pass:一致性 ≥ 90%
    • Fail:一致性 < 85%(连简单任务都不稳定)
  • 评分方式:自动
  • Skill 配置skill_enabled: false
X-CD-02中等复杂任务一致性
  • 难度中等
  • 重复次数:5 次
  • 输入
    • 用户消息:对比 iPhone 16 和三星 Galaxy S25,推荐一个
    • 上下文:无
  • 期望行为
    • 中等复杂任务一致性预期:70-85%
    • 可能 5 次中有 3-4 次推荐相同,1-2 次推荐不同(在合理范围内)
  • 判定标准
    • Pass:一致性 ≥ 70%
    • Fail:一致性 < 60%
  • 评分方式:LLM-judge(对比推荐结果)
  • Skill 配置skill_enabled: false
X-CD-03复杂任务一致性
  • 难度困难
  • 重复次数:5 次
  • 输入
    • 用户消息:规划端午去京都 5 天的旅行,从上海出发,去清水寺、金阁寺、岚山、伏见稻荷
    • 上下文:无
  • 期望行为
    • 复杂任务一致性预期:60-75%
    • 具体航班和行程顺序可能不同,但结构和质量应该一致
    • 不应该 5 次输出质量差距很大(一次很完整,一次只有机票没有行程)
  • 判定标准
    • Pass:一致性 ≥ 60%
    • Fail:一致性 < 50%
  • 评分方式:LLM-judge
  • Skill 配置skill_enabled: false
X-CD-04一致性衰减曲线
  • 难度困难
  • 重复次数:需要对比 X-CD-01、X-CD-02、X-CD-03 的结果
  • 输入:(综合前三个 case 的数据)
  • 期望行为
    • 绘制一致性衰减曲线:
      • 简单任务(1 步):一致性 ≥ 90%
      • 中等任务(3-5 步):一致性 70-85%
      • 复杂任务(8+ 步):一致性 60-75%
    • 衰减应该是平滑的,不应该有突变
    • Group B(有 skill)的衰减应该比 Group A 更缓
  • 判定标准
    • Pass:衰减曲线平滑,Group B 在复杂任务上一致性显著高于 Group A
    • Fail:衰减曲线有突变 / Group B 无增益
  • 评分方式:自动(绘制曲线)+ 人工分析
  • Skill 配置:对比 Group A 和 Group B

评测执行说明

总用例数

维度 代号 用例数
输出一致性 OC 3
Skill 稳定性增益 SD 3
语气/风格对齐 SA 5
输出格式一致性 FC 2
一致性衰减测试 CD 4
合计 17

注:X 原计划 10 条,实际产出 17 条(增加了格式一致性和衰减曲线测试)。

难度分布

难度 数量 占比
简单 5 29%
中等 9 53%
困难 3 18%

重复测试分布

重复次数 case 数 说明
1 次 6 风格评估,不需要重复
3 次 1 格式一致性对比
5 次 7 输出一致性测试
10 次(5+5) 3 Skill 稳定性增益对比(Group A 和 B 各 5 次)

实际评测执行次数 = 6×1 + 1×3 + 7×5 + 3×10 = 74 次

评分方式分布

方式 数量 说明
LLM-judge 12 需要对比多次输出的语义一致性
自动 2 token 计数、工具调用计数
自动 + LLM-judge 3 数值统计 + 语义判断

一致性计算方法

核心字段一致性(自动)

def calculate_field_consistency(outputs, field_name):
    """
    计算关键字段的一致性
    """
    values = [extract_field(o, field_name) for o in outputs]
    most_common_value = mode(values)
    consistency = values.count(most_common_value) / len(values)
    return consistency

# 示例:5 次推荐任务
outputs = [output_1, output_2, output_3, output_4, output_5]
价格一致性 = calculate_field_consistency(outputs, 'price')
# 如果 5 次中有 4 次价格相同,1 次不同 → 一致性 = 0.8

语义一致性(LLM-judge)

评估 5 次输出的语义一致性:

【任务】
{用户消息}

【输出 1-5】
{5 次输出}

【评分维度】
1. 核心结论一致:5 次推荐的核心方向是否一致(如都推荐轻薄本 vs 有的推荐游戏本)?
2. 关键要素一致:价格区间、品牌档次、推荐数量是否稳定?
3. 质量稳定:5 次输出质量是否都达标(不是一次详细四次敷衍)?

一致性得分:0-100%
计算方式:(一致的维度数 / 总维度数) × 100

Skill 稳定性增益计算

Group A 一致性(无 skill,5 次平均): 65%
Group B 一致性(有 skill,5 次平均): 85%

Skill 稳定性增益 = 85% - 65% = +20%

判定标准:
- 增益 ≥ 15%:优秀(skill 显著提升稳定性)
- 增益 10-15%:良好
- 增益 < 10%:skill 效果不明显
- 增益 < 0:问题(skill 降低了稳定性)

风格评估 Rubric

维度 1 分(差) 3 分(可接受) 5 分(优秀)
语气 过度正式或过于随意 基本自然 友好自然,符合生活助手
简洁度 冗长或过于简短 基本合适 简洁但完整
专业度 学术化或过度简化 基本准确 准确且通俗
免责声明 过多(> 15%) 适量(5-10%) 最少或无(< 5%)
礼貌度 过度或不足 基本礼貌 自然得体

总分:5 个维度平均分,≥ 4.0 为 Pass

后续迭代方向


附:一致性测试的技术实现

自动化一致性检测

# 伪代码示例

def test_consistency(case_id, repeat_times=5):
    """
    执行一致性测试
    """
    outputs = []
    
    # 1. 重复执行 N 次
    for i in range(repeat_times):
        output = agent.run(case_input)
        outputs.append(output)
    
    # 2. 提取关键字段
    key_fields = {
        'tool_calls': [extract_tools(o) for o in outputs],
        'core_content': [extract_core(o) for o in outputs],
        'output_length': [len(o.split()) for o in outputs]
    }
    
    # 3. 计算一致性
    consistency = {}
    for field, values in key_fields.items():
        consistency[field] = calculate_consistency(values)
    
    # 4. 综合得分
    overall_consistency = weighted_average(consistency)
    
    return {
        'case_id': case_id,
        'repeat_times': repeat_times,
        'outputs': outputs,
        'consistency': consistency,
        'overall': overall_consistency
    }

LLM-as-Judge 一致性评估

def judge_semantic_consistency(outputs):
    """
    用 LLM 评估语义一致性
    """
    prompt = f"""
    评估以下 5 次输出的一致性:
    
    【任务】{case_input}
    
    【输出 1】{outputs[0]}
    【输出 2】{outputs[1]}
    【输出 3】{outputs[2]}
    【输出 4】{outputs[3]}
    【输出 5】{outputs[5]}
    
    评分维度:
    1. 核心结论是否一致(5 次推荐的是否是同类产品/方向)?
    2. 关键要素是否稳定(价格区间、数量、主要特点)?
    3. 质量是否稳定(无明显的好坏差异)?
    
    一致性得分:0-100%
    不一致的部分:[列出]
    """
    
    return llm.judge(prompt)

风格对齐评估

def judge_style_alignment(output, style_rubric):
    """
    评估输出是否符合风格规范
    """
    prompt = f"""
    评估以下输出是否符合生活助手的风格规范:
    
    【输出】{output}
    
    【风格规范】
    - 语气:友好自然,不过度热情,不过度正式
    - 简洁度:简洁但完整,不冗长,不过于简短
    - 专业度:准确且通俗,不学术化,不过度简化
    - 免责声明:最少化,不超过总内容的 10%
    - 礼貌度:自然得体,不过度礼貌
    
    每个维度打分:1-5 分
    总分:平均分
    不符合的地方:[具体说明]
    """
    
    return llm.judge(prompt)