输出异常先分层
输出质量突然变差,按四层依次查:对话模板是否与模型匹配、采样参数是否被调成极端组合、是否被输出长度上限截断、以及量化或权重版本是否发生了变化。每一层的典型症状不同,用一个固定的小用例做基线回归,往往几分钟就能定位到层。跳过分层直接换模型,通常只是把问题暂时盖过去。
基本信息
| 适用平台 | 自托管推理服务的 OpenAI 兼容接口 |
|---|---|
| 关键字段 | 结束原因字段与用量字段 |
| 常用工具 | curl、Python 客户端、引擎日志 |
| 基线要求 | 固定一条提示词与一组默认采样参数 |
| 版本风险 | 量化方案与权重修订号变化会整体影响输出质量 |
症状对照排查方向
| 症状 | 优先排查 |
|---|---|
| 角色标记错乱、格式怪 | 对话模板与分词器配置 |
| 复读、循环 | 重复惩罚与温度等极端参数组合 |
| 突然截断 | 输出长度上限与结束原因等于长度 |
| 整体质量退化 | 量化方案或权重版本变化 |
固定冒烟用例(示意)
固定冒烟用例(示意)
cat > /tmp/smoke.json <<'JSON'
{
"model": "<模型>",
"messages": [{"role": "user", "content": "用一句话介绍你自己"}],
"max_tokens": 64
}
JSON
curl -s http://127.0.0.1:8000/v1/chat/completions -H 'Content-Type: application/json' -d @/tmp/smoke.json | python -m json.tool检查顺序
- 先看结束原因:正常停止与长度截断对应完全不同的处理路径
- 再比模板:换回模型自带的对话模板复测一遍
- 再看采样:温度与重复惩罚是否被调到了极端值
- 最后看权重:是否换了量化版本或权重修订号
把结束原因记录进日志:正常停止与长度截断对应完全不同的处理路径,带着它排查会快很多。
把固定冒烟用例做成脚本,每次发布后自动跑一遍:输出质量这类问题,靠人工巡检很难及时发现。
多轮对话的模板拼接最容易出问题:确认角色标记、系统提示与结束标记都由模板生成,而不是手工拼字符串,否则格式问题会跟着轮次放大。