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

关于GPT API与Pydantic模型的技术问询及发票表格优化

问题解答

1. OpenAI API调用方式与response_format机制

调用方式正确性

代码存在一处语法错误:class quantity_code: str = Field(...)这行写法无效,应将quantity_code字段归入TableRow类中,修正后的代码如下:

class TableRow(BaseModel):
    net_amount: float = Field(..., description="The amount before taxes of the line item")
    gross_amount: float = Field(..., description="The amount after taxes of the line item")
    quantity: int = Field(..., description="The quantity of the line item bought")
    quantity_code: str = Field(..., description="The code associated with the line item")

排除上述语法错误后,使用llm_client.beta.chat.completions.parse()并传入Pydantic模型作为response_format的调用方式是正确的,这是OpenAI官方支持的结构化输出方案,仅适用于gpt-4o及以上支持结构化输出的模型。

response_format的处理逻辑

OpenAI不会将Pydantic BaseModel直接注入提示词,而是会自动将模型结构转换为对应的JSON Schema,后台基于该Schema约束模型输出,确保返回内容严格匹配指定结构,无需开发者手动在提示词中描述结构规则。

2. 提升GPT处理发票表格数据性能的方法

  • 优化图像输入质量
    • 上传高分辨率、清晰对焦的发票图像,避免模糊、倾斜;扫描件需去除阴影、噪点等干扰元素。
    • 裁剪发票的表格区域,仅保留有效内容,减少模型处理的冗余信息。
  • 精准设计提示词
    • 明确提取规则,例如“忽略合计行”“空字段返回null”“严格按指定字段输出,不得添加额外内容”。
    • 补充发票背景信息,比如“这是餐饮行业增值税普通发票,表格每行对应一个消费条目”。
  • 强化结构化约束
    • 细化Pydantic模型的字段描述,消除歧义,例如将quantity的描述明确为“购买商品的实际数量”。
    • 为数值型字段添加校验规则,比如net_amount: float = Field(..., gt=0, description="税前金额,必须大于0"),确保输出符合业务逻辑。
  • 合理选择模型与参数
    • 优先选用gpt-4o或gpt-4o-mini,二者在多模态表格提取场景下的性能显著优于旧模型;对成本敏感时可选择gpt-4o-mini。
    • 将temperature参数设置为0.1-0.2,在保证输出稳定性的同时,适配少量格式特殊的发票。
  • 优化处理流程
    • 批量发票采用异步处理方式,避免同步调用的超时问题。
    • 对提取失败或不符合结构的结果设置重试逻辑,重试时补充更明确的提示词引导模型输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:12:15