菜单

数据类型与模型

相关源文件

本文档介绍了 OpenAI Python 库的数据类型系统和模型架构,包括基础模型类、类型构造机制以及生成的类型定义。该系统在保持与 Pydantic 版本兼容性的同时,提供了 API 请求和响应的类型安全表示。

有关 HTTP 客户端基础和请求/响应处理的信息,请参阅 请求和响应处理。有关生成的 API 资源类的详细信息,请参阅 API 资源

模型架构概述

OpenAI Python 库使用基于 Pydantic 的分层数据模型架构来实现类型安全和验证。

来源: src/openai/_models.py85-89 src/openai/_models.py729-730 src/openai/_models.py784-807 src/openai/types/__init__.py1-96

BaseModel 类

BaseModel 类扩展了 Pydantic 的 BaseModel,并加入了 OpenAI 特有的增强功能。

核心配置

BaseModel 类提供了增强的序列化方法,这些方法能够理解 API 字段命名约定。to_dict() 方法包含使用 API 名称或属性名称的选项,而 to_json() 则提供格式化的 JSON 输出。

来源: src/openai/_models.py85-104 src/openai/_models.py123-194 src/openai/_models.py203-258

增强的序列化

方法目的关键参数
to_dict()字典表示use_api_names, exclude_unset, mode
to_json()JSON 字符串表示indent, use_api_names, exclude_unset
model_dump()Pydantic 兼容性by_alias, exclude_unset, warnings
construct()无验证构造_fields_set, **values

序列化方法处理 API 字段名(如 "fooBar")和 Python 属性名(如 foo_bar)之间的区别,并根据 use_api_names 参数自动使用相应的命名约定。

来源: src/openai/_models.py123-159 src/openai/_models.py161-194 src/openai/_models.py273-327

类型构造系统

该库提供了多种构造和验证类型的方法。

构造函数

来源: src/openai/_models.py448-563 src/openai/_models.py692-697 src/openai/_models.py416-436

联合类型处理

类型构造系统包含复杂的联合类型处理,特别是针对区分联合类型。

联合类型处理策略
简单联合按顺序尝试每个变体
区分联合使用鉴别器字段选择变体
嵌套联合递归变体选择
带有字面量的联合直接值匹配

该系统使用元数据注解来识别区分联合,并构建从鉴别器值到具体类型的映射。

来源: src/openai/_models.py477-512 src/openai/_models.py612-668 src/openai/_models.py571-610

生成的类型系统

该库包含一套来自 OpenAPI 规范的全面生成的类型。

类型组织

来源: src/openai/types/__init__.py8-23 src/openai/types/__init__.py25-47 src/openai/types/__init__.py77-95

参数类型

类型系统包含全面的 API 请求参数类型。

参数类别示例
创建参数CompletionCreateParams, ChatCompletionCreateParams
列表参数FileListParams, BatchListParams
更新参数EvalUpdateParams, ThreadUpdateParams
专用参数ImageEditParams, AudioTranscriptionParams

这些参数类型使用 TypedDict 定义,为 API 请求提供类型安全,同时保持与底层 HTTP 客户端的兼容性。

来源: src/openai/types/__init__.py41-75 api.md32 api.md83-85

数据转换系统

字段映射和别名

转换系统使用 Pydantic 的 Field 别名系统,处理 API 字段名(通常是 camelCase)和 Python 属性名(snake_case)之间的映射。

来源: src/openai/_models.py136-146 src/openai/_models.py171-180 tests/test_models.py171-181

日期时间与类型强制转换

该系统包含对常见类型强制转换的专门处理。

源类型目标类型强制转换策略
字符串datetime通过 parse_datetime() 解析 ISO8601
字符串date通过 parse_date() 解析日期
整数浮点数安全数值转换
映射BaseModel递归构造

来源: src/openai/_models.py551-562 src/openai/_models.py542-549 tests/test_models.py423-441

Pydantic 兼容层

该库在 Pydantic v1 和 v2 之间保持兼容性

版本检测与适配

来源: src/openai/_models.py86-89 src/openai/_models.py273-327 src/openai/_models.py733-767

兼容方法

BaseModel 类提供了向前兼容的方法,可以在两个 Pydantic 版本中工作

方法V2 实现V1 实现
model_dump()原生方法使用 dict() 的自定义包装器
model_dump_json()原生方法使用 json() 的自定义包装器
model_construct()原生方法别名至 construct()

这确保了为任一 Pydantic 版本编写的代码都能正确工作,无论安装了哪个版本。

来源: src/openai/_models.py273-327 src/openai/_models.py329-379 src/openai/_models.py260-264