instructor库 快速上手

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

代码执行流程:

  1. 导入必要的Python库
  2. 使用Pydantic定义数据结构模型
  3. 配置OpenAI客户端并应用instructor扩展
  4. 发送请求到LLM模型,指定输出结构
  5. 模型返回结构化数据
  6. 打印提取的数据

关键点说明:

  • 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

参考链接:https://github.com/instructor-ai/instructor/tree/main