You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Pydantic Output Parser功能及LLM结构化输出的问题咨询

PydanticOutputParser工作原理及结构化输出成功率提升方案

一、PydanticOutputParser的核心工作逻辑

你之前的理解偏差在于:PydanticOutputParser并不能强制LLM输出正确格式,它是事后的校验与转换工具,具体流程是:

  1. 根据你定义的Pydantic模型自动生成结构化描述(比如JSON Schema),将其嵌入提示词告知LLM预期输出格式
from pydantic import BaseModel, Field, Optional
from typing import List

class Diploma(BaseModel):
    diploma_name: Optional[str] = Field(None, description="diploma name")
    institution: Optional[str] = Field(None, description="institution")
    city: Optional[str] = Field(None, description="City of the institution.")
    issue_date: Optional[str] = Field(None, description="Issue date of the diploma")
    relevant_coursework: Optional[List[str]] = Field(None, description="relevant courseworks")

class Education(BaseModel):
    diplomas: List[Diploma] = Field(default_factory=list, description="List of diplomas.")
  1. 接收LLM输出后,尝试将JSON字符串解析为对应的Pydantic类实例
  2. 若输出不符合模型规则(比如字段缺失、类型错误、语法不合法),直接抛出解析失败错误——它只负责校验,无法提前约束LLM的输出行为

二、提升结构化输出成功率的落地方案

1. 极致优化提示词

  • 强制LLM只输出纯JSON,禁止添加任何额外内容(比如“结果如下:”“这是解析后的内容”这类前缀后缀)
  • 明确格式约束:强调“必须完全匹配提供的JSON结构,所有字段必须保留,无数据则填null或空字符串,数组类型必须用[]包裹,字符串统一用双引号”
  • 提供多组示例:除了空结构示例,再补充1-2个填充了真实数据的完整示例,比如:
{
    "diplomas": [
        {
            "diploma_name": "计算机科学学士",
            "institution": "XX大学",
            "city": "北京",
            "issue_date": "2020-06-30",
            "relevant_coursework": ["数据结构", "机器学习"]
        },
        {
            "diploma_name": "软件工程硕士",
            "institution": "YY研究院",
            "city": "上海",
            "issue_date": "2023-03-15",
            "relevant_coursework": []
        }
    ]
}
  • 在提示词末尾添加强约束指令:“如果无法识别对应数据,对应字段留空或填null,绝对不能省略字段或修改结构”

2. 强化Pydantic模型的提示作用

  • 直接使用PydanticOutputParser生成的Schema嵌入提示词,避免手动编写JSON格式的误差
  • 将模型中每个字段的description直接加入提示词,让LLM明确每个字段的含义,减少歧义

3. 增加解析失败后的重试机制

  • 捕获解析异常时,提取具体错误信息(比如“字段institution缺失”“relevant_coursework应为数组类型”),把错误信息作为新的提示词部分,让LLM修正后重新输出
  • 设置合理的重试次数(比如2-3次),每次重试都明确指出之前的错误点,引导LLM修正格式

4. 针对本地LLM的适配优化

  • 调整LLM参数:将temperature设为0(彻底降低随机性),设置足够的max_tokens确保输出完整
  • 选择对结构化输出更友好的模型:优先选用专门微调过JSON输出的开源LLM变体,这类模型对格式约束的服从度更高
  • 采用few-shot提示:在提示词中加入2-3组输入-输出示例,帮助LLM快速学习预期的格式规范

内容的提问来源于stack exchange,提问作者thomasrichardgit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:05:03