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

如何解决Pydantic Answer类的两个验证错误问题?

问题分析与解决方案

核心问题

你遇到的验证错误根源在于:

  • answer字段被传入None,但模型未配置该字段为可选值
  • 代码存在字段定义错误与过度转义逻辑,导致JSON解析失败后传入无效的None值
  • 类嵌套结构不合理,Answer类嵌套在TableData内部引发解析命名空间混乱

具体修复步骤

1. 修正字段定义错误

原代码中= Field是错误用法,Field是字段配置工具而非默认值。需明确字段是否允许为空,正确使用Optional或Field配置规则。

2. 移除过度转义函数

fix_json_string错误转义了JSON核心结构符(如[]、{}),导致JSON完全无法解析,最终传入模型的是无效数据。LLM返回的JSON仅需处理换行等特殊字符,无需破坏结构的转义。

3. 调整类结构

将Answer类从TableData内部移出作为独立类,避免解析时的命名空间冲突。

4. 使用Pydantic原生解析能力

用model_validate_json替代手动json.loads,Pydantic会自动处理JSON解析与模型验证,减少手动逻辑错误。

修改后的完整代码

from pydantic import BaseModel, ValidationError
from typing import Union, Optional, Dict, List, Any
import json

class TableData(BaseModel):
    data: Union[Dict[str, List[Any]], List[Dict[str, Any]]]
    answer: Optional[str] = None

    @classmethod
    def from_json(cls, json_str):
        try:
            # 仅清理换行符,保留JSON结构完整性
            cleaned_str = json_str.strip().replace("\n", "\\n").replace("\r", "\\r")
            return cls.model_validate_json(cleaned_str)
        except json.JSONDecodeError as e:
            print(f"JSON解析错误: {e}")
            return None
        except ValidationError as e:
            print(f"验证错误: {e}")
            return None

class Answer(BaseModel):
    # 允许answer为None、字符串或TableData实例
    answer: Optional[Union[TableData, str]] = None
    # 允许sql为字符串或任意类型,默认值设为None
    sql: Optional[Union[str, Any]] = None

    @classmethod
    def from_json(cls, json_str):
        try:
            cleaned_str = json_str.strip().replace("\n", "\\n").replace("\r", "\\r")
            return cls.model_validate_json(cleaned_str)
        except json.JSONDecodeError as e:
            print(f"JSON解析错误: {e}")
            return None
        except ValidationError as e:
            print(f"验证错误: {e}")
            return None

额外说明

  • 若LLM返回JSON格式不稳定,可引入第三方库(如jsonrepair)修复无效JSON后再解析
  • 若不需要answer字段允许None,可移除Optional,但需确保LLM始终返回有效字符串或TableData结构
  • 测试时建议打印LLM原始返回内容,确认是否符合预期JSON格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:06:08