# 综合 JSON 生成指南
使用 Pydantic 模型和 JSON 模式通过 Outlines 进行 JSON 生成的完整指南。
## 目录
- Pydantic 模型
- JSON 模式支持
- 高级模式
- 嵌套结构
- 复杂类型
- 验证
- 性能优化
## Pydantic 模型
### 基础模型
python
from pydantic import BaseModel
import outlines
class User(BaseModel):
name: str
age: int
email: str
model = outlines.models.transformers("microsoft/Phi-3-mini-4k-instruct")
generator = outlines.generate.json(model, User)
user = generator("Generate user: Alice, 25,
[email protected]")
print(user.name) # "Alice"
print(user.age) # 25
print(user.email) # "
[email protected]"
### 字段约束
python
from pydantic import BaseModel, Field
class Product(BaseModel):
name: str = Field(min_length=1, max_length=100)
price: float = Field(gt=0, description="美元价格")
discount: float = Field(ge=0, le=100, description="折扣百分比")
quantity: int = Field(ge=0, description="可用数量")
sku: str = Field(pattern=r"^[A-Z]{3}-d{6}$")
model = outlines.models.transformers("microsoft/Phi-3-mini-4k-instruct")
generator = outlines.generate.json(model, Product)
product = generator("Generate product: iPhone 15, $999")
# 保证所有字段满足约束
**可用约束:**
- `min_length`, `max_length`: 字符串长度
- `gt`, `ge`, `lt`, `le`: 数值比较
- `multiple_of`: 数值必须是该值的倍数
- `pattern`: 字符串的正则表达式
- `min_items`, `max_items`: 列表长度
### 可选字段
python
from typing import Optional
class Article(BaseModel):
title: str # 必填
author: Optional[str] = None # 可选
published_date: Optional[str] = None # 可选
tags: list[str] = [] # 默认空列表
view_count: int = 0 # 默认值
generator = outlines.generate.json(model, Article)
# 即使缺少可选字段也能生成
article = generator("Title: Introduction to AI")
print(article.author) # None (未提供)
print(article.tags) # [] (默认)
### 默认值
python
class Config(BaseModel):
debug: bool = False
max_retries: int = 3
timeout: float = 30.0
log_level: str = "INFO"
# 未指定时生成器使用默认值
generator = outlines.generate.json(model, Config)
config = generator("Generate config with debug enabled")
print(config.debug) # True (from pro