Instructor 是最流行的用于处理大语言模型(LLM)结构化输出的Python库,每月下载量超过100万次。基于Pydantic构建,它提供了一个简单、透明且用户友好的API来管理验证、重试和流式响应。准备好用这个社区首选工具来增强您的LLM工作流程吧!
代码
安装:
pip install instructor
第一个例子:
import instructor
from pydantic import BaseModel
from openai import OpenAI
# Define your desired output structure
class UserInfo(BaseModel):
name: str
age: int
# Patch the OpenAI client
client = instructor.from_openai(OpenAI(
base_url="https://ark.cn-beijing.volces.com/api/v3",
api_key="your api key",
))
# Extract structured data from natural language
user_info = client.chat.completions.create(
model="doubao-1.5-lite-32k-250115",
response_model=UserInfo,
messages=[{
"role": "user", "content": "John Doe is 30 years old."}],
)
print(user_info.name)
print(user_info.age)
John Doe
30
代码解释
以下是代码的详细解释:
# 导入必要的库
import instructor # 用于处理LLM结构化输出的库
from pydantic import BaseModel # 数据验证和设置管理
from openai import OpenAI # OpenAI官方客户端
# 定义用户信息的数据结构
class UserInfo(BaseModel):
name: str # 姓名字段,字符串类型
age: int # 年龄字段,整数类型
# 配置OpenAI客户端并应用instructor补丁
client = instructor.from_openai(OpenAI(
base_url="https://ark.cn-beijing.volces.com/api/v3", # API基础URL
api_key="your api key", # 替换为您的API密钥
))
# 从自然语言文本中提取结构化数据
user_info = client.chat.completions.create(
model="doubao-1.5-lite-32k-250115", # 使用的模型名称
response_model=UserInfo, # 指定输出的数据结构
messages=[{
"role": "user",
"content": "John Doe is 30 years old." # 输入的自然语言文本
}],
)
# 输出提取的结构化数据
print(user_info.name) # 输出姓名: John Doe
print(user_info.age) # 输出年龄: 30
代码执行流程:
- 导入必要的Python库
- 使用Pydantic定义数据结构模型
- 配置OpenAI客户端并应用instructor扩展
- 发送请求到LLM模型,指定输出结构
- 模型返回结构化数据
- 打印提取的数据
关键点说明:
response_model=UserInfo
确保输出符合定义的数据结构- instructor库在底层自动处理了数据验证和格式转换
- 整个过程将非结构化文本转换为强类型数据结构
类似例子
例子1:
import instructor
from pydantic import BaseModel
from openai import OpenAI
# 定义书籍信息的输出结构
class Book(BaseModel):
title: str
author: str
publish_year: int
genre: str
pages: int
# 配置OpenAI客户端
client = instructor.from_openai(OpenAI(
base_url="https://ark.cn-beijing.volces.com/api/v3",
api_key="your api key",
))
# 从复杂自然语言中提取结构化数据
book = client.chat.completions.create(
model="doubao-1.5-lite-32k-250115",
response_model=Book,
messages=[{
"role": "user", "content": """
我最近读了一本非常棒的小说,书名是《三体》,由中国著名科幻作家刘慈欣创作。
这本书最初于2008年出版,属于科幻小说类别,特别是硬科幻类型。
整本书共有大约400页内容,讲述了地球文明与三体文明的首次接触和后续发展。
这部作品获得了2015年雨果奖最佳长篇小说奖,是中国科幻文学的里程碑之作。
"""}],
)
print(book.title)
print(book.author)
print(book.publish_year)
print(book.genre)
print(book.pages)
三体
刘慈欣
2008
硬科幻
400
例子2:
import instructor
from pydantic import BaseModel
from openai import OpenAI
# 定义产品信息的输出结构
class Product(BaseModel):
name: str
price: float
in_stock: bool
# 配置OpenAI客户端
client = instructor.from_openai(OpenAI(
base_url="https://ark.cn-beijing.volces.com/api/v3",
api_key="your api key",
))
# 从自然语言中提取结构化数据
product = client.chat.completions.create(
model="doubao-1.5-lite-32k-250115",
response_model=Product,
messages=[{
"role": "user", "content": "iPhone 15售价7999元,目前有现货。"}],
)
print(product.name) #> iPhone 15
print(product.price) #> 7999.0
print(product.in_stock) #> True
iPhone 15
7999.0
True