
PydanticSerializationUnexpectedValue warning when using structured output for AzureChatOpenAI
快速结论:该警告在使用 AzureChatOpenAI 的 with_structured_output 方法时触发,核心问题是 Pydantic 序列化器对输出模式中的 parsed 字段进行了非预期类型检查。优先排查 langchain-openai 和 pydantic 版本,并确认是否已升级到包含修复的版本。
问题场景
用户在使用 AzureChatOpenAI 通过 with_structured_output() 调用结构化输出时,运行 Python 脚本触发 Pydantic 序列化警告。涉及 LangChain 框架中的 langchain-openai 包,具体在调用链中由底层序列化逻辑抛出。
报错原文
PydanticSerializationUnexpectedValue(Expected `none` - serialized value may not be as expected [field_name='parsed', input_value=ModelOutput(output='The c...al of France is Paris.'), input_type=ModelOutput])
return self.__pydantic_serializer__.to_python(
原因分析
该警告是由于 with_structured_output 返回的 parsed 字段值类型与 Pydantic 序列化器预期类型不匹配导致的。具体来说,序列化器期望 parsed 字段为 None 类型(可能由于内部处理逻辑默认值设置),但实际收到的是一个 Pydantic BaseModel 实例(如 ModelOutput)。这属于 LangChain 内部工具调用输出处理逻辑的缺陷,已在后续 PR 中修复。
环境排查
- Python 版本:3.12.3(Issue 中使用的版本)
- langchain-core 版本:1.2.27
- langchain-openai 版本:1.1.12
- pydantic 版本:2.12.5
- openai 版本:2.30.0
- 操作系统:Linux
解决步骤
- 确认
langchain-openai和langchain-core已升级到最新稳定版本。Issue 中提及的修复已合并在 PR #37727 中,该修复应包含在后续的版本发布中(可优先尝试升级到包含该 PR 的版本)。 - 如果问题依旧,尝试将
pydantic升级到 2.12.5 或更高版本(Issue 中使用版本),确保 Pydantic 序列化器兼容性。 - 检查你的
ModelOutput定义是否包含非标准字段类型或默认值,尽管 Issue 中示例是简单结构,但复杂继承关系可能加剧问题。
验证方法
运行触发警告的 Python 脚本后,确认控制台不再输出 PydanticSerializationUnexpectedValue 警告。同时通过 print(result) 或检查 result.parsed 属性,确认结构化输出内容正确返回,无异常抛出。



