Skip to main content

Pydantic 数据校验

Written: 2026.06

1. 为什么需要这讲

Pydantic 在本项目中被五处关键位置使用,但主讲义从未系统讲解它是什么、怎么工作:

2. Pydantic 是什么

Pydantic 是 Python 最流行的数据校验库。它的核心思想:用 Python 类型注解定义数据结构,运行时自动校验类型
对比手写校验:

3. BaseModel 核心能力

3.1 基础类型校验

当 FastAPI 收到一个 JSON 请求体时:
Pydantic 会自动校验:
  • querystr
  • tenant_idint 但期望 str ❌ → 返回 422 错误,附带清晰描述

3.2 Field 约束

Field 支持的常用约束:

3.3 嵌套模型

4. BaseSettings — 环境变量管理

这是 Pydantic 的一个特殊子类,专门用于管理配置:
上面是 Pydantic 的通用示例。本项目的约定更具体:本机 API 调试时,Settings 从进程环境变量和项目根目录 .env 读取;Docker Compose 部署时,Compose 读取 .env.compose 并注入到 API 容器的进程环境变量里。因此不要把 .env.compose 复制成 .env 使用,也不要把 .env 里的 localhost 配置拿去跑 API 容器。 本项目中的 Settings 实例被 @lru_cache 缓存为全局单例:

5. with_structured_output — LLM 输出约束

这是本项目中 Pydantic 最高级的用法:让 LLM 按指定结构返回结果。
工作原理:LangChain 将 Pydantic 模型的 JSON Schema 嵌入 System Prompt,告诉 LLM 只能用这些字段和枚举值来回答。LLM 返回的 JSON 会被 Pydantic 自动校验——如果 LLM 返回了 {"intent": "INVALID_TYPE"},Pydantic 会报错。

6. 在本项目中的使用速查

7. 小结

  • BaseModel = 类型注解 + 自动校验,替代手写 if/else 校验
  • Field = 为字段附加约束(长度、范围、正则)
  • BaseSettings = 自动从环境变量和本机 .env 加载配置;Docker Compose 模式由 .env.compose 注入环境变量
  • with_structured_output = 用 Pydantic Schema 约束 LLM 输出格式