格式一致性修复是什么
格式一致性指模型输出是否稳定符合约定结构:该给 JSON 时输出散文、该给列表时输出段落,都会直接打断下游解析。修复分三层:优先用结构化输出或函数调用能力,让模型按给定模式生成;其次在提示词里给格式示例;最后在服务端做模式校验,失败重试一次,仍失败就降级为纯文本但保住正文。同时把解析失败率作为指标监控,它通常先于用户投诉暴露问题。
基本信息
| 常见漂移 | JSON 里夹散文、缺字段、类型不对、被代码块包裹 |
|---|---|
| 首选手段 | 结构化输出或函数调用 |
| 次选手段 | 在提示词中提供格式示例 |
| 兜底手段 | 模式校验加重试,再降级为纯文本 |
| 监控指标 | 解析失败率 |
| 重试约束 | 必须设置重试预算 |
典型使用场景
- 前端要按字段渲染卡片或按钮,需要结构化返回
- 引用列表需要结构化携带编号与锚点
- 与工单系统对接,字段缺失会导致工单创建失败
- 多模型切换时输出风格差异引发解析失败,需要统一兜底
- 批量离线任务对格式更敏感,一次失败会中断整批
校验与重试
校验与重试
from pydantic import BaseModel, ValidationError
class Answer(BaseModel):
text: str
citations: list[int]
def parse_or_retry(raw, retry_budget=1):
try:
return Answer.model_validate_json(raw) # 模式校验
except ValidationError:
if retry_budget:
return parse_or_retry(call_model_again(strict=True), retry_budget - 1)
return Answer(text=plain_text(raw), citations=[]) # 降级但保住正文漂移类型与处置
| 表现 | 成因 | 处置 |
|---|---|---|
| JSON 外包代码块 | 模型习惯性包裹,解析前必须剥离 | 开结构化输出,或解析前统一剥离标记 |
| 缺字段 | 提示词未限定必填项 | 模式里设为必填并校验重试 |
| 类型不对 | 数字被写成字符串 | 模式声明类型,解析层做必要转换 |
| 整段输出散文 | 约束过弱 | 补格式示例并控制输出长度 |
解析失败率要作为指标记录:它通常先于用户投诉出现,是格式问题最灵敏的信号,也是判断提示词改动是否有效的依据。
重试必须设预算:故障时无上限重试会形成重试风暴,把服务端限流压力放大成连锁雪崩。