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 · 确定性任务的完全一致


X-OC-02 · 推荐任务的部分一致


X-OC-03 · 复杂任务的结构一致性


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

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

X-SD-01 · 机票推荐的稳定性


X-SD-02 · 行程规划的稳定性


X-SD-03 · 推荐任务的稳定性


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

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

X-SA-01 · 友好但不过度热情


X-SA-02 · 简洁但不失礼貌


X-SA-03 · 专业但不学术


X-SA-04 · 避免不必要的免责声明


X-SA-05 · 多轮中的语气一致性


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

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

X-FC-01 · 推荐任务的格式统一


X-FC-02 · 错误消息的格式统一


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

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

X-CD-01 · 简单任务一致性基线


X-CD-02 · 中等复杂任务一致性


X-CD-03 · 复杂任务一致性


X-CD-04 · 一致性衰减曲线


评测执行说明

总用例数

维度 代号 用例数
输出一致性 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)