AzureChatOpenAI._create_chat_result emits PydanticSerializationUnexpectedValue warnings for structured-output responses

用户在使用 AzureChatOpenAI (属 langchain-openai 包)并调用结构化输出(structured-output)功能时,控制台持续出现 PydanticSerializationUnexpectedValue 警告。该警告在 ChatOpenAI (非 Azure 版本

AzureChatOpenAI._create_chat_result emits PydanticSerializationUnexpectedValue warnings for structured-output responses

AzureChatOpenAI._create_chat_result emits PydanticSerializationUnexpectedValue warnings for structured-output responses

快速结论:该报错发生在使用 AzureChatOpenAI 且启用了 with_structured_output 时。优先排查 langchain-openai 是否已更新至包含 #37727 修复的版本。

问题场景

用户在使用 AzureChatOpenAI(属 langchain-openai 包)并调用结构化输出(structured-output)功能时,控制台持续出现 PydanticSerializationUnexpectedValue 警告。该警告在 ChatOpenAI(非 Azure 版本)中已通过 PR #35543 修复,但 AzureChatOpenAI._create_chat_result 的重写方法遗漏了相同的 exclude 参数。

报错原文

# warnings: 1
UserWarning Pydantic serializer warnings:
  PydanticSerializationUnexpectedValue(Expected `none` - serialized value may not be as expected [field_name='parsed', input_value=ModelOutput(output='Paris'), input_type=ModelOutput])

原因分析

根本原因是 AzureChatOpenAI._create_chat_result 方法覆盖了基类 BaseChatOpenAI._create_chat_result。基类方法在 PR #35543 中已添加了 exclude={"choices": {"__all__": {"message": {"parsed"}}}} 参数以抑制结构化输出中的序列化警告,但 Azure 覆盖方法为了检查 Azure 内容过滤元数据,执行了第二次 response.model_dump() 调用,且没有携带相同的 exclude 参数,导致警告仍然被触发。

环境排查

  • 确认 langchain-openai 的版本。该问题在 langchain-openai 包中,修复已合入 PR #37727。
  • 确认 langchain-corepydantic 版本兼容性。
  • 检查 AzureChatOpenAI_create_chat_result 方法实现,确认是否包含 exclude={"choices": {"__all__": {"message": {"parsed"}}}}

解决步骤

  1. 升级 langchain-openai 到包含 PR #37727 修复的版本(例如 >=0.2.10 或后续对应版本)。
  2. 如果无法立即升级,临时规避方案是手动将 exclude={"choices": {"__all__": {"message": {"parsed"}}}} 添加到 AzureChatOpenAI._create_chat_result 中的 response.model_dump() 调用处(位于 azure.py 第 774 行附近)。
  3. 验证修复:使用包含结构化输出的 mock 响应运行测试,确认不再产生 UserWarning

验证方法

使用 Issue 中提供的 mock 数据(MockChatCompletion 等)调用 AzureChatOpenAI._create_chat_result(),捕获并检查 warnings,确认 PydanticSerializationUnexpectedValue 警告不再出现。如果警告计数为 0,则问题已解决。

参考来源

langchain-ai/langchain #37844

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 12167

发表回复

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