快速结论:这个报错通常出现在用 OpenAI Python SDK 反序列化模型响应时,某个 Pydantic BaseModel 字段或响应类型被标注为“裸” dict(没有任何类型参数),SDK 的 construct_type() 仍按 Dict[K, V] 去解包类型参数,于是触发 ValueError: not enough values to unpack (expected 2, got 0)。优先排查你自定义的模型字段或响应注解里是否存在未参数化的 dict。
适用环境:Issue 中确认涉及的组件为 OpenAI Python SDK,报错位置在 src/openai/_models.py 的 construct_type();问题出现于 main 分支,并明确不在 v3.11.0 中修复。Issue 未提供操作系统、Python 版本、CUDA、显卡或其他依赖版本信息。
最快修复方案:使用包含 PR #3760 的 SDK 发布版本。Issue 说明该修复已合入 main,并覆盖裸字典与裸列表,包括模型构造以及同步/异步响应反序列化;请在该修复发布后升级到对应版本。若暂时无法升级,可优先尝试把裸 dict 注解改为带类型参数的写法(例如指定 key/value 类型),但这属于推测性规避方案,Issue 未明确验证。
注意事项:修复不在 v3.11.0 中,升级前需确认所用版本确实包含 PR #3760。临时改写注解可能影响你的模型结构和类型校验行为,需自行评估;Issue 未提供其他已验证的临时方案。
问题场景
在使用 OpenAI Python SDK 时,无论是调用接口后反序列化响应,还是通过 construct_type() 直接构造模型对象,只要待解析的类型是未带类型参数的裸 dict,SDK 尝试把映射值反序列化成该类型,就会触发崩溃。典型触发方式是把某个 Pydantic BaseModel 字段或响应类型直接标注为 dict,而不是 Dict[str, X] 这类带参数形式。
报错原文
ValueError: not enough values to unpack (expected 2, got 0)
File "/tmp/repro.py", line 2, in <module>
result = construct_type(value={"key": "value"}, type_=dict)
File ".../src/openai/_models.py", line 660, in construct_type
_, items_type = get_args(type_) # Dict[_, items_type]
^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
原因分析
construct_type() 在判断 origin == dict 之后,无条件执行 _, items_type = get_args(type_),期望拿到两个类型参数。当 type_ 是裸的、未参数化的 dict 类本身时,get_args(dict) 返回空元组 (),用两个目标去解包自然抛出 ValueError。也就是说,问题根因是裸字典注解缺少类型参数,而代码没有对这种情况做分支处理。PR #3760 正是为裸字典和裸列表补上了处理逻辑。
环境排查
- 确认当前安装的 OpenAI Python SDK 版本,检查是否已包含 PR #3760;Issue 明确指出 v3.11.0 不包含该修复。
- 确认你是否在 Pydantic
BaseModel字段、响应类型或其他被 SDK 反序列化的类型上使用了裸dict注解。 - 确认触发路径是模型构造还是同步/异步响应反序列化,这有助于判断影响范围。
- Issue 未提供 Python、CUDA、PyTorch、显卡或第三方依赖版本要求,这些项目无需按 Issue 结论补写。
解决步骤
- 先按 Issue 给出的最小复现方式确认问题:对
construct_type()传入映射值和裸dict类型时会抛错。 - 检查代码中所有被 SDK 反序列化的字段或类型注解,定位是否存在裸
dict(不含[K, V])。 - 升级到包含 PR #3760 的 OpenAI Python SDK 版本;Issue 说明修复已合入
main,但不在 v3.11.0 中,需等待或选用包含该 PR 的发布版本。 - 如果暂时无法升级,可优先尝试把裸
dict改为带类型参数的字典注解作为规避,但该方式属于推测性方案,Issue 未明确验证。
验证方法
在包含 PR #3760 的版本上,重新运行原先会崩溃的构造或反序列化路径,确认不再出现 ValueError: not enough values to unpack (expected 2, got 0),且裸字典字段能正常构造出模型对象。同时复测同步与异步响应反序列化场景,确认两者都恢复正常。若仍报错,先确认当前运行版本是否真的包含该修复,再检查是否还有其他未经处理的类型注解。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


