您的首次提取¶
本指南将引导您使用 Instructor 创建您的首次结构化提取,重点介绍一个简单示例的基础知识。
基本示例¶
让我们从文本中提取一个人的姓名和年龄
from pydantic import BaseModel
import instructor
from openai import OpenAI
# 1. Define your data model
class Person(BaseModel):
name: str
age: int
# 2. Set up the Instructor client
client = instructor.from_openai(OpenAI())
# 3. Extract structured data
person = client.chat.completions.create(
model="gpt-3.5-turbo",
response_model=Person,
messages=[
{"role": "user", "content": "John Doe is 30 years old"}
]
)
# 4. Use the structured data
print(f"Name: {person.name}, Age: {person.age}")
# Output: Name: John Doe, Age: 30
工作原理¶
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Define │ -> │ Instruct LLM │ -> │ Get Typed │
│ Structure │ │ to Extract │ │ Response │
└─────────────┘ └──────────────┘ └─────────────┘
让我们分解每个部分
1. 定义数据模型¶
这告诉 Instructor 要提取什么:- name:一个文本字符串 - age:一个整数
2. 设置客户端¶
这使用 Instructor 的功能封装了 OpenAI 客户端。
3. 提取结构化数据¶
person = client.chat.completions.create(
model="gpt-3.5-turbo",
response_model=Person,
messages=[
{"role": "user", "content": "John Doe is 30 years old"}
]
)
关键部分是:- model:要使用的 LLM - response_model:您的数据结构定义 - messages:要从中提取的文本
4. 使用结构化数据¶
结果是一个具有类型安全属性的 Python 对象。
添加字段描述¶
您可以添加描述来帮助指导提取
from pydantic import BaseModel, Field
class Person(BaseModel):
name: str = Field(description="Person's full name")
age: int = Field(description="Person's age in years")
这些描述有助于模型理解要提取什么。
处理缺失信息¶
如果信息可能缺失,将字段设置为可选
from typing import Optional
class Person(BaseModel):
name: str
age: Optional[int] = None # Now age is optional
下一步¶
既然您已经创建了您的首次提取,您可以:1. 了解更复杂的 响应模型 2. 设置不同的 客户端配置 3. 探索 简单对象提取