快速结论:该问题发生在 LangChain 的 StructuredPrompt 构造过程中:当调用者复用同一个 structured_output_kwargs 字典创建多个提示时,第一个提示会把额外参数(如 strict=True)直接写入调用者提供的字典,导致后续提示意外继承未传入的配置。优先排查是否复用了同一个字典,并检查 StructuredPrompt.__init__ 是否原地合并了额外参数。
适用环境:langchain-core;Issue 中确认的环境为 Windows 10、Python 3.14.2、langchain_core 1.5.3、pydantic 2.12.5、pytest 9.0.3。未涉及 CUDA、显卡或操作系统之外的更多环境证据。
最快修复方案:Issue 中已验证的修复方向是:在 StructuredPrompt.__init__ 中先把调用者传入的 structured_output_kwargs 复制一份(例如 structured_output_kwargs = dict(structured_output_kwargs or {})),再合并额外参数,从而不修改原始字典。目前该修复以 PR 形式提出,尚未在 Issue 中确认已合并到正式发布版本。
注意事项:该修复只是浅拷贝字典;如果字典的 value 本身是可变对象,内部嵌套对象仍可能被共享。若你使用的是已发布版本且未包含该修复,可能需要自行打补丁或等待官方合入,不能把“复制字典”当作所有别名问题的通用解。
问题场景
在使用 LangChain 的 StructuredPrompt 时,调用者先通过工厂方法 from_messages_and_schema 创建第一个提示,并传入同一个 structured_output_kwargs 字典;随后再用同一个字典直接构造第二个 StructuredPrompt。第一个提示创建后,原字典被原地写入 strict=True,导致第二个提示继承了这个并非由调用者提供的选项,触发断言失败。
报错原文
StructuredPrompt mutates caller-provided structured_output_kwargs
assert shared_options == {"method": "json_schema"}
assert "strict" not in second.structured_output_kwargs
原因分析
直接原因是 StructuredPrompt.__init__ 在合并额外结构化输出参数时,直接复用了调用者传入的 structured_output_kwargs 字典,并在该字典上进行原地合并。也就是说,代码没有先复制一份字典,就把类似 strict=True 的额外参数写进了调用者拥有的对象。这不是模型推理或环境配置问题,而是对象别名(aliasing)导致的“调用者数据被意外修改”的副作用。
环境排查
- 确认当前使用的
langchain-core版本是否为 Issue 中复现的 1.5.3,或更早/更新的版本。 - 检查本机 Python 版本是否在 3.14.2 附近;该问题与 Python 版本无直接因果关系,但便于复现时对齐环境。
- 定位
lib
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Question]: error when attaching file in chat ----AttributeError("'Request' object has no attribute 'file'")](https://www.chat-gpts.plus/wp-content/uploads/2026/08/11805-40332ec3-768x403.jpg)
![[Question]: No keyword or question was found in dataSet afer files loaded by customized ingestion pipeline](https://www.chat-gpts.plus/wp-content/uploads/2026/08/11474-a36958b1-768x403.jpg)
