首页/AI/大模型部署与运维速查/输出异常:乱码/复读/截断排查
运维监控与排障50 条

输出异常:乱码/复读/截断排查

输出质量突然异常按四层查:chat template 错配、停止符与采样参数、finish_reason 截断、量化退化;用一个固定小用例做基线回归,可快速定位。

输出异常先分层

输出质量突然变差,按四层依次查:对话模板是否与模型匹配、采样参数是否被调成极端组合、是否被输出长度上限截断、以及量化或权重版本是否发生了变化。每一层的典型症状不同,用一个固定的小用例做基线回归,往往几分钟就能定位到层。跳过分层直接换模型,通常只是把问题暂时盖过去。

基本信息

适用平台自托管推理服务的 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

检查顺序

  • 先看结束原因:正常停止与长度截断对应完全不同的处理路径
  • 再比模板:换回模型自带的对话模板复测一遍
  • 再看采样:温度与重复惩罚是否被调到了极端值
  • 最后看权重:是否换了量化版本或权重修订号
把结束原因记录进日志:正常停止与长度截断对应完全不同的处理路径,带着它排查会快很多。
把固定冒烟用例做成脚本,每次发布后自动跑一遍:输出质量这类问题,靠人工巡检很难及时发现。
多轮对话的模板拼接最容易出问题:确认角色标记、系统提示与结束标记都由模板生成,而不是手工拼字符串,否则格式问题会跟着轮次放大。

易错点

  • 先怀疑模型坏了:换回官方模板与默认采样参数复测一遍再下结论
  • 只看输出不看结束原因:截断与质量问题混在一起,排查方向就跑偏了
  • 忽略模板拼接细节:多轮对话里角色标记不匹配,症状会表现为格式混乱或答非所问
  • 对照实验同时改多个变量:模板、参数、权重一起改,等于没有对照

数据来源与参考

  • Hugging Face 官方文档:chat templates(huggingface.co/docs)
  • vLLM 官方文档:Sampling Parameters(docs.vllm.ai)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌