Skip to content

评测不是“分高即好”,而是“业务可用”。 注:本文为“1 月份重点篇”,补充可落地的评测清单与样例脚本。

🎯 文章目标

  • 理解“基准评测 vs 业务内评估”的差别
  • 设计一个小而全的离线集,并建立在线 A/B 的观测看板
  • 快速搭建自动化评测脚本

📚 背景/前置

  • 通用基准:MMLU、BBH、GSM8K 等用于横向比较,不代表你的业务
  • 业务内评估:覆盖真实任务、格式约束、边界输入、反事实与噪声样本
  • 指标维度:正确率/一致性、可执行性、延迟、成本、拒答率与有害输出

🔧 核心内容

1) 评测集设计

  • 覆盖典型流程:主路径/分支/错误输入/越权输入
  • 题型混合:抽取/归纳/生成/结构化输出
  • 样本标注:黄金答案/答案模板/可执行校验器(JSON Schema/正则/单元测试)

2) 评测框架与自动化

  • 离线:固定随机种子、稳定 prompt、冻结模型版本
  • 在线:A/B 人群划分、灰度比例、观测与报警
  • 度量:分 bucket 汇总(按任务、客户、重要性),输出报表与 Top-N 失败样本

3) 结果解读与取舍

  • 高分不等于可用:对齐差、格式不稳、延迟过高都可能导致“上线不可用”
  • 用“成本/延迟/可执行性”联合排序
  • 决策要点:简单任务先小模型,难任务才回退大模型

💡 实战示例:最小评测脚本

python
# pip install openai pandas jsonschema
import os, json, time, pandas as pd
from jsonschema import validate
from openai import OpenAI

API_BASE = os.getenv('OPENAI_API_BASE', 'http://localhost:8000/v1')
API_KEY  = os.getenv('OPENAI_API_KEY',  'sk-xxxx')
MODEL   = os.getenv('EVAL_MODEL', 'qwen2.5-7b-instruct')

schema = {
  "type":"object",
  "properties":{ "title": {"type":"string"}, "bullets": {"type":"array"} },
  "required":["title", "bullets"]
}

data = pd.DataFrame({"input":[
  "总结这段话,输出 {title, bullets} JSON 对象: ...",
  "从文本中抽取 {订单号, 金额} 字段,输出 JSON",
  "识别这段话是否含敏感词(是/否),并说明理由"
]})

client = OpenAI(base_url=API_BASE, api_key=API_KEY)

ok, lat = 0, []
for _, row in data.iterrows():
    t0 = time.time()
    resp = client.chat.completions.create(model=MODEL, messages=[{"role":"user","content":row['input']}])
    lat.append(time.time()-t0)
    try:
        obj = json.loads(resp.choices[0].message.content)
        validate(obj, schema)
        ok += 1
    except Exception:
        pass

print({"pass_rate": ok/len(data), "avg_latency": sum(lat)/len(lat)})

要点:

  • 用 JSON Schema/正则/单测,转“主观打分”为“可执行校验”
  • 固定 prompt 与模型版本,避免离线评测抖动
  • 在线要监控拒答率/越权调用/有害输出

📊 对比/取舍(速查)

  • 通用基准:横向参考价值高,但与业务弱相关
  • 业务内评估:最能反映上线可用性,但设计/维护成本更高
  • 组合建议:先业务内离线小集 → 通过后灰度上线做在线评估

🧪 踩坑与经验

  • 评测集污染:训练/评测样本混淆导致虚高;务必隔离
  • 指标误读:只看正确率忽略延迟/成本,容易造成错误决策
  • 忽略观测:上线后不留失败样本,导致问题无法复盘

📎 参考与延伸

  • HELM、Dynabench 等评测框架
  • 结构化输出与 JSON Schema 校验实践
  • 在线实验与灰度发布最佳实践

💭 总结

  • 评测的目标是“上线可用”而非“分数好看”
  • 以可执行校验与在线观测为核心,构建稳定、可复用的评测体系