从任何 LLM 可靠地获取 JSON。基于 Pydantic 构建,提供验证、类型安全和 IDE 支持。
import instructor
from pydantic import BaseModel
# 定义你想要的数据结构
class User(BaseModel):
name: str
age: int
# 从自然语言中提取它
client = instructor.from_provider("openai/gpt-4o-mini")
user = client.chat.completions.create(
response_model=User,
messages=[{"role": "user", "content": "John is 25 years old"}],
)
print(user) # User(name='John', age=25)
就这样。 无需 JSON 解析,无需错误处理,无需重试。只需定义一个模型,即可获得结构化数据。
快速提取请使用 Instructor,需要智能体功能请考虑 PydanticAI。 Instructor 让以模式为先的流程保持简单和低成本。如果你的应用需要更丰富的智能体运行、内置可观测性或可共享的追踪记录,请尝试 PydanticAI。PydanticAI 是 Pydantic 团队官方的智能体运行时,它在使用相同 Pydantic 模型的同时,增加了类型化工具、可重放的数据集、评估和生产仪表板等功能。请查阅 PydanticAI 文档,了解它如何扩展 Instructor 风格的工作流。
从 LLM 获取结构化数据很困难。你需要:
Instructor 通过一个简单的接口处理所有这些问题:
| 不使用 Instructor | 使用 Instructor |
|
|
pip install instructor
或使用你的包管理器:
uv add instructor
poetry add instructor
使用相同的代码与任何 LLM 供应商交互:
# OpenAI
client = instructor.from_provider("openai/gpt-4o")
# Anthropic
client = instructor.from_provider("anthropic/claude-3-5-sonnet")
# Google
client = instructor.from_provider("google/gemini-pro")
# Ollama (本地)
client = instructor.from_provider("ollama/llama3.2")
# 直接使用 API 密钥(无需环境变量)
client = instructor.from_provider("openai/gpt-4o", api_key="sk-...")
client = instructor.from_provider("anthropic/claude-3-5-sonnet", api_key="sk-ant-...")
client = instructor.from_provider("groq/llama-3.1-8b-instant", api_key="gsk_...")
# 全部使用相同的 API!
user = client.chat.completions.create(
response_model=User,
messages=[{"role": "user", "content": "..."}],
)
验证失败时会自动使用错误信息重试:
from pydantic import BaseModel, field_validator
class User(BaseModel):
name: str
age: int
@field_validator('age')
def validate_age(cls, v):
if v < 0:
raise ValueError('年龄必须为正数')
return v
# 当验证失败时,Instructor 会自动重试
user = client.chat.completions.create(
response_model=User,
messages=[{"role": "user", "content": "..."}],
max_retries=3,
)
在对象生成时流式传输部分结果:
from instructor import Partial
for partial_user in client.chat.completions.create(
response_model=Partial[User],
messages=[{"role": "user", "content": "..."}],
stream=True,
):
print(partial_user)
# User(name=None, age=None)
# User(name="John", age=None)
# User(name="John", age=25)
提取复杂的嵌套数据结构:
from typing import List
class Address(BaseModel):
street: str
city: str
country: str
class User(BaseModel):
name: str
age: int
addresses: List[Address]
# Instructor 自动处理嵌套对象
user = client.chat.completions.create(
response_model=User,
messages=[{"role": "user", "content": "..."}],
)
受到超过 100,000 名开发者和构建 AI 应用的公司信赖:
使用 Instructor 的公司包括 OpenAI、Google、Microsoft、AWS 以及许多 YC 初创公司的团队。
从任何文本中提取结构化数据:
from pydantic import BaseModel
import instructor
client = instructor.from_provider("openai/gpt-4o-mini")
class Product(BaseModel):
name: str
price: float
in_stock: bool
product = client.chat.completions.create(
response_model=Product,
messages=[{"role": "user", "content": "iPhone 15 Pro, $999, available now"}],
)
print(product)
# Product(name='iPhone 15 Pro', price=999.0, in_stock=True)
Instructor 的简单 API 支持多种语言:
对比原生 JSON 模式:Instructor 提供自动验证、重试、流式处理和嵌套对象支持。无需手动编写模式。
对比 LangChain/LlamaIndex:Instructor 专注于一件事——结构化提取。它更轻量、更快、更易于调试。
对比自定义解决方案:经过数千名开发者的实战检验。处理你尚未想到的边缘情况。
我们欢迎贡献!查看我们的新手友好任务开始吧。
MIT 许可证 - 详见 LICENSE。