使用PydanticOutputParser解析时遇类型错误:期望字典而非列表
问题解决思路
核心问题原因
你遇到的NEFDataModel expected dict not list错误,根本原因是解析器的目标是单个NEFDataModel对象(字典结构),但API返回的是多个该对象组成的数组(列表结构),和parameters字段关系不大,先解决结构不匹配的问题。
具体修复步骤
调整解析目标为数组类型
直接把PydanticOutputParser的解析目标改成List[NEFDataModel],示例代码:from langchain.output_parsers import PydanticOutputParser from typing import List from pydantic import BaseModel # 你的原有NEFDataModel定义 class NEFDataModel(BaseModel): parameters: dict # 其他字段... # 修改解析器,目标为数组 nef_output_parser = PydanticOutputParser(pydantic_object=List[NEFDataModel])处理响应内容格式
注意response.content是字节流,需要先转成JSON字符串再传给解析器,避免格式问题:import json # 把字节转成JSON对象再转成字符串 response_json = json.loads(response.content) parsed_result = nef_output_parser.parse(json.dumps(response_json))验证parameters字段(可选)
如果调整后仍有错误,再检查parameters字段的定义是否和API返回的结构一致:- 如果API返回的parameters是固定结构的嵌套对象,建议把它定义成Pydantic子模型,而不是用
dict类型,比如:class ParametersModel(BaseModel): param1: str param2: int # 其他参数字段... class NEFDataModel(BaseModel): parameters: ParametersModel # 其他字段...
这样能更精准地匹配数据结构,避免类型错误。
- 如果API返回的parameters是固定结构的嵌套对象,建议把它定义成Pydantic子模型,而不是用
内容的提问来源于stack exchange,提问作者Zainab Younus
相关产品推荐
相关产品推荐

