# 高级验证模式
使用 Pydantic 在 Instructor 中进行验证的完整指南。
## 目录
- 内置验证器
- 自定义字段验证器
- 模型级验证
- 复杂验证模式
- 错误处理
## 内置验证器
### 数值约束
python
from pydantic import BaseModel, Field
class Product(BaseModel):
price: float = Field(gt=0, description="价格必须为正数")
discount: float = Field(ge=0, le=100, description="折扣 0-100%")
quantity: int = Field(ge=1, description="至少 1 件")
rating: float = Field(ge=0.0, le=5.0, description="评分 0-5 星")
# 如果 LLM 提供无效值,将自动重试并提供错误反馈
**可用约束:**
- `gt`: 大于
- `ge`: 大于或等于
- `lt`: 小于
- `le`: 小于或等于
- `multiple_of`: 必须是此数字的倍数
### 字符串约束
python
class User(BaseModel):
username: str = Field(
min_length=3,
max_length=20,
pattern=r'^[a-zA-Z0-9_]+$',
description="3-20 个字母数字字符"
)
bio: str = Field(max_length=500, description="简介最多 500 字符")
status: str = Field(pattern=r'^(active|inactive|pending)$')
# pattern 根据正则表达式进行验证
### 邮箱和 URL 验证
python
from pydantic import EmailStr, HttpUrl, AnyUrl
class Contact(BaseModel):
email: EmailStr # 验证邮箱格式
website: HttpUrl # 验证 HTTP/HTTPS URL
portfolio: AnyUrl # 任何有效的 URL 方案
contact = client.messages.create(
model="claude-sonnet-4-5-20250929",
max_tokens=1024,
messages=[{
"role": "user",
"content": "提取:
[email protected], https://example.com"
}],
response_model=Contact
)
### 日期和时间验证
python
from datetime import date, datetime
from pydantic import Field, field_validator
class Event(BaseModel):
event_date: date # 验证日期格式
created_at: datetime # 验证日期时间格式
year: int = Field(ge=1900, le=2100)
@field_validator('event_date')
def future_date(cls, v):
"""确保事件在未来。"""
if v < date.today():
raise ValueError('事件必须在未来')
return v
### 列表和字典验证
python
class Document(BaseModel):
tags: list[str] = Field(min_length=1, max_length=10)
keywords: list[str] = Field(min_length=3, description="至少 3 个关键词")