首页/AI/RAG 与向量库速查/格式一致性问题的修复

格式一致性问题的修复

模型输出格式漂移(该 JSON 时输出散文、该列表时输出段落)会直接破坏下游:用结构化输出/函数调用能力、提供格式示例、服务端加 schema 校验与一次重试,仍失败则降级纯文本。

RAG 与向量库速查AI更新于 2026-10-13

格式一致性修复是什么

格式一致性指模型输出是否稳定符合约定结构:该给 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 外包代码块模型习惯性包裹,解析前必须剥离开结构化输出,或解析前统一剥离标记
缺字段提示词未限定必填项模式里设为必填并校验重试
类型不对数字被写成字符串模式声明类型,解析层做必要转换
整段输出散文约束过弱补格式示例并控制输出长度
解析失败率要作为指标记录:它通常先于用户投诉出现,是格式问题最灵敏的信号,也是判断提示词改动是否有效的依据。
重试必须设预算:故障时无上限重试会形成重试风暴,把服务端限流压力放大成连锁雪崩。

易错点

  • 解析失败直接抛异常:用户侧看到的是服务错误,而且没有降级路径可走
  • 重试不设预算:故障期间请求量成倍放大,小故障演变成大面积不可用
  • 把模型输出当可信 JSON 直接反序列化并执行:既是稳定性风险也是安全风险
  • 只在提示词里写请输出 JSON,不给示例也不加模式约束:漂移率居高不下,下游反复改解析代码

数据来源与参考

  • OpenAI 官方文档(Structured Outputs)
  • Pydantic 官方文档(模型校验)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌