PydanticSerializationUnexpectedValue warning when using structured output for AzureChatOpenAI

用户在使用 AzureChatOpenAI 通过 with_structured_output() 调用结构化输出时,运行 Python 脚本触发 Pydantic 序列化警告。涉及 LangChain 框架中的 langchain-openai 包,具体在调用链中由底层序列化逻辑抛出。

PydanticSerializationUnexpectedValue warning when using structured output for AzureChatOpenAI

PydanticSerializationUnexpectedValue warning when using structured output for AzureChatOpenAI

快速结论:该警告在使用 AzureChatOpenAIwith_structured_output 方法时触发,核心问题是 Pydantic 序列化器对输出模式中的 parsed 字段进行了非预期类型检查。优先排查 langchain-openaipydantic 版本,并确认是否已升级到包含修复的版本。

问题场景

用户在使用 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

解决步骤

  1. 确认 langchain-openailangchain-core 已升级到最新稳定版本。Issue 中提及的修复已合并在 PR #37727 中,该修复应包含在后续的版本发布中(可优先尝试升级到包含该 PR 的版本)。
  2. 如果问题依旧,尝试将 pydantic 升级到 2.12.5 或更高版本(Issue 中使用版本),确保 Pydantic 序列化器兼容性。
  3. 检查你的 ModelOutput 定义是否包含非标准字段类型或默认值,尽管 Issue 中示例是简单结构,但复杂继承关系可能加剧问题。

验证方法

运行触发警告的 Python 脚本后,确认控制台不再输出 PydanticSerializationUnexpectedValue 警告。同时通过 print(result) 或检查 result.parsed 属性,确认结构化输出内容正确返回,无异常抛出。

参考来源

langchain-ai/langchain #36606

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 12167

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注