ผู้สอนเป็นห้องสมุด Python ที่ได้รับความนิยมมากที่สุดสำหรับการทำงานกับผลลัพธ์ที่มีโครงสร้างจากรุ่นภาษาขนาดใหญ่ (LLMS) มีการดาวน์โหลดมากกว่า 600,000 ครั้งต่อเดือน สร้างขึ้นบน Pydantic ให้บริการ API ที่ง่ายโปร่งใสและใช้งานง่ายเพื่อจัดการการตรวจสอบการตอบสนองและการตอบสนองการสตรีม เตรียมพร้อมที่จะเติมเต็มเวิร์กโฟลว์ LLM ของคุณด้วยตัวเลือกอันดับต้น ๆ ของชุมชน!
หาก บริษัท ของคุณใช้ผู้สอนมากเรายินดีที่จะมีโลโก้ของคุณบนเว็บไซต์ของเรา! กรุณากรอกแบบฟอร์มนี้
ติดตั้งผู้สอนด้วยคำสั่งเดียว:
pip install -U 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 ())
# Extract structured data from natural language
user_info = client . chat . completions . create (
model = "gpt-4o-mini" ,
response_model = UserInfo ,
messages = [{ "role" : "user" , "content" : "John Doe is 30 years old." }],
)
print ( user_info . name )
#> John Doe
print ( user_info . age )
#> 30
ผู้สอนให้ระบบ hooks ที่ทรงพลังที่ช่วยให้คุณสกัดกั้นและบันทึกขั้นตอนต่าง ๆ ของกระบวนการปฏิสัมพันธ์ LLM นี่คือตัวอย่างง่ายๆที่สาธิตวิธีการใช้ hooks:
import instructor
from openai import OpenAI
from pydantic import BaseModel
class UserInfo ( BaseModel ):
name : str
age : int
# Initialize the OpenAI client with Instructor
client = instructor . from_openai ( OpenAI ())
# Define hook functions
def log_kwargs ( ** kwargs ):
print ( f"Function called with kwargs: { kwargs } " )
def log_exception ( exception : Exception ):
print ( f"An exception occurred: { str ( exception ) } " )
client . on ( "completion:kwargs" , log_kwargs )
client . on ( "completion:error" , log_exception )
user_info = client . chat . completions . create (
model = "gpt-4o-mini" ,
response_model = UserInfo ,
messages = [
{ "role" : "user" , "content" : "Extract the user name: 'John is 20 years old'" }
],
)
"""
{
'args': (),
'kwargs': {
'messages': [
{
'role': 'user',
'content': "Extract the user name: 'John is 20 years old'",
}
],
'model': 'gpt-4o-mini',
'tools': [
{
'type': 'function',
'function': {
'name': 'UserInfo',
'description': 'Correctly extracted `UserInfo` with all the required parameters with correct types',
'parameters': {
'properties': {
'name': {'title': 'Name', 'type': 'string'},
'age': {'title': 'Age', 'type': 'integer'},
},
'required': ['age', 'name'],
'type': 'object',
},
},
}
],
'tool_choice': {'type': 'function', 'function': {'name': 'UserInfo'}},
},
}
"""
print ( f"Name: { user_info . name } , Age: { user_info . age } " )
#> Name: John, Age: 20
ตัวอย่างนี้แสดงให้เห็นว่า:
ตะขอให้ข้อมูลเชิงลึกที่มีคุณค่าเกี่ยวกับอินพุตของฟังก์ชั่นและข้อผิดพลาดใด ๆ เพิ่มความสามารถในการแก้ไขข้อบกพร่องและการตรวจสอบ
import instructor
from anthropic import Anthropic
from pydantic import BaseModel
class User ( BaseModel ):
name : str
age : int
client = instructor . from_anthropic ( Anthropic ())
# note that client.chat.completions.create will also work
resp = client . messages . create (
model = "claude-3-opus-20240229" ,
max_tokens = 1024 ,
system = "You are a world class AI that excels at extracting user data from a sentence" ,
messages = [
{
"role" : "user" ,
"content" : "Extract Jason is 25 years old." ,
}
],
response_model = User ,
)
assert isinstance ( resp , User )
assert resp . name == "Jason"
assert resp . age == 25
ตรวจสอบให้แน่ใจว่าได้ติดตั้ง cohere
และตั้งค่าตัวแปรสภาพแวดล้อมระบบของคุณด้วย export CO_API_KEY=<YOUR_COHERE_API_KEY>
pip install cohere
import instructor
import cohere
from pydantic import BaseModel
class User ( BaseModel ):
name : str
age : int
client = instructor . from_cohere ( cohere . Client ())
# note that client.chat.completions.create will also work
resp = client . chat . completions . create (
model = "command-r-plus" ,
max_tokens = 1024 ,
messages = [
{
"role" : "user" ,
"content" : "Extract Jason is 25 years old." ,
}
],
response_model = User ,
)
assert isinstance ( resp , User )
assert resp . name == "Jason"
assert resp . age == 25
ตรวจสอบให้แน่ใจว่าคุณติดตั้ง Google AI Python SDK คุณควรตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_API_KEY
ด้วยคีย์ API ของคุณ การโทรหาเครื่องมือราศีเมถุนยังต้องมีการติดตั้ง jsonref
pip install google-generativeai jsonref
import instructor
import google . generativeai as genai
from pydantic import BaseModel
class User ( BaseModel ):
name : str
age : int
# genai.configure(api_key=os.environ["API_KEY"]) # alternative API key configuration
client = instructor . from_gemini (
client = genai . GenerativeModel (
model_name = "models/gemini-1.5-flash-latest" , # model defaults to "gemini-pro"
),
mode = instructor . Mode . GEMINI_JSON ,
)
หรือคุณสามารถโทรหาราศีเมถุนจากไคลเอนต์ OpenAI คุณจะต้องตั้งค่า gcloud
รับการตั้งค่าบน Vertex AI และติดตั้งไลบรารี Google Auth
pip install google-auth
import google . auth
import google . auth . transport . requests
import instructor
from openai import OpenAI
from pydantic import BaseModel
creds , project = google . auth . default ()
auth_req = google . auth . transport . requests . Request ()
creds . refresh ( auth_req )
# Pass the Vertex endpoint and authentication to the OpenAI SDK
PROJECT = 'PROJECT_ID'
LOCATION = (
'LOCATION' # https://cloud.google.com/vertex-ai/generative-ai/docs/learn/locations
)
base_url = f'https:// { LOCATION } -aiplatform.googleapis.com/v1beta1/projects/ { PROJECT } /locations/ { LOCATION } /endpoints/openapi'
client = instructor . from_openai (
OpenAI ( base_url = base_url , api_key = creds . token ), mode = instructor . Mode . JSON
)
# JSON mode is req'd
class User ( BaseModel ):
name : str
age : int
resp = client . chat . completions . create (
model = "google/gemini-1.5-flash-001" ,
max_tokens = 1024 ,
messages = [
{
"role" : "user" ,
"content" : "Extract Jason is 25 years old." ,
}
],
response_model = User ,
)
assert isinstance ( resp , User )
assert resp . name == "Jason"
assert resp . age == 25
import instructor
from litellm import completion
from pydantic import BaseModel
class User ( BaseModel ):
name : str
age : int
client = instructor . from_litellm ( completion )
resp = client . chat . completions . create (
model = "claude-3-opus-20240229" ,
max_tokens = 1024 ,
messages = [
{
"role" : "user" ,
"content" : "Extract Jason is 25 years old." ,
}
],
response_model = User ,
)
assert isinstance ( resp , User )
assert resp . name == "Jason"
assert resp . age == 25
นี่คือความฝันของผู้สอน แต่เนื่องจากการปะหน้าของ Openai มันเป็นไปไม่ได้ที่ฉันจะพิมพ์ให้ทำงานได้ดี ตอนนี้ด้วยไคลเอนต์ใหม่เราสามารถพิมพ์ให้ทำงานได้ดี! นอกจากนี้เรายังได้เพิ่มวิธี create_*
สองสามวิธีเพื่อให้ง่ายต่อการสร้าง iterables และ partials และเพื่อเข้าถึงความสำเร็จดั้งเดิม
create
import openai
import instructor
from pydantic import BaseModel
class User ( BaseModel ):
name : str
age : int
client = instructor . from_openai ( openai . OpenAI ())
user = client . chat . completions . create (
model = "gpt-4-turbo-preview" ,
messages = [
{ "role" : "user" , "content" : "Create a user" },
],
response_model = User ,
)
ตอนนี้ถ้าคุณใช้ IDE คุณสามารถเห็นประเภทที่อนุมานได้อย่างถูกต้อง
await create
สิ่งนี้จะทำงานได้อย่างถูกต้องกับลูกค้าแบบอะซิงโครนัส
import openai
import instructor
from pydantic import BaseModel
client = instructor . from_openai ( openai . AsyncOpenAI ())
class User ( BaseModel ):
name : str
age : int
async def extract ():
return await client . chat . completions . create (
model = "gpt-4-turbo-preview" ,
messages = [
{ "role" : "user" , "content" : "Create a user" },
],
response_model = User ,
)
ขอให้สังเกตว่าเพียงเพราะเราส่งคืนวิธี create
ฟังก์ชัน extract()
จะส่งคืนประเภทผู้ใช้ที่ถูกต้อง
create_with_completion
นอกจากนี้คุณยังสามารถส่งคืนวัตถุที่เสร็จสมบูรณ์เดิม
import openai
import instructor
from pydantic import BaseModel
client = instructor . from_openai ( openai . OpenAI ())
class User ( BaseModel ):
name : str
age : int
user , completion = client . chat . completions . create_with_completion (
model = "gpt-4-turbo-preview" ,
messages = [
{ "role" : "user" , "content" : "Create a user" },
],
response_model = User ,
)
create_partial
ในการจัดการสตรีมเรายังคงรองรับ Iterable[T]
และ Partial[T]
แต่เพื่อลดความซับซ้อนของการอนุมานประเภทเราได้เพิ่มวิธี create_iterable
และ create_partial
ด้วย!
import openai
import instructor
from pydantic import BaseModel
client = instructor . from_openai ( openai . OpenAI ())
class User ( BaseModel ):
name : str
age : int
user_stream = client . chat . completions . create_partial (
model = "gpt-4-turbo-preview" ,
messages = [
{ "role" : "user" , "content" : "Create a user" },
],
response_model = User ,
)
for user in user_stream :
print ( user )
#> name=None age=None
#> name=None age=None
#> name=None age=None
#> name=None age=None
#> name=None age=None
#> name=None age=None
#> name='John Doe' age=None
#> name='John Doe' age=None
#> name='John Doe' age=None
#> name='John Doe' age=30
#> name='John Doe' age=30
# name=None age=None
# name='' age=None
# name='John' age=None
# name='John Doe' age=None
# name='John Doe' age=30
แจ้งให้ทราบตอนนี้ว่าประเภทที่อนุมานคือ Generator[User, None]
create_iterable
เราได้รับวัตถุที่วนซ้ำเมื่อเราต้องการแยกวัตถุหลายชิ้น
import openai
import instructor
from pydantic import BaseModel
client = instructor . from_openai ( openai . OpenAI ())
class User ( BaseModel ):
name : str
age : int
users = client . chat . completions . create_iterable (
model = "gpt-4-turbo-preview" ,
messages = [
{ "role" : "user" , "content" : "Create 2 users" },
],
response_model = User ,
)
for user in users :
print ( user )
#> name='John Doe' age=30
#> name='Jane Doe' age=28
# User(name='John Doe', age=30)
# User(name='Jane Smith', age=25)
เราขอเชิญชวนให้คุณมีส่วนร่วมใน Evals ใน pytest
เพื่อตรวจสอบคุณภาพของโมเดล OpenAI และห้องสมุด instructor
ในการเริ่มต้นตรวจสอบ Evals สำหรับมานุษยวิทยาและ Openai และมีส่วนร่วมในการทดสอบของคุณเองในรูปแบบของการทดสอบ pytest evals เหล่านี้จะทำงานสัปดาห์ละครั้งและผลลัพธ์จะถูกโพสต์
หากคุณต้องการความช่วยเหลือให้ตรวจสอบปัญหาบางอย่างที่ทำเครื่องหมายว่าเป็น good-first-issue
หรือ help-wanted
ที่นี่ พวกเขาอาจเป็นอะไรก็ได้จากการปรับปรุงรหัสโพสต์บล็อกของแขกหรือตำราอาหารใหม่
นอกจากนี้เรายังมีฟังก์ชั่น CLI เพิ่มเติมเพื่อความสะดวกสบาย:
instructor jobs
: สิ่งนี้ช่วยในการสร้างงานปรับแต่งกับ OpenAI instructor jobs create-from-file --help
เพื่อเริ่มต้นสร้างรุ่น GPT-3.5 ที่ปรับแต่งได้ครั้งแรกของคุณ
instructor files
: จัดการไฟล์ที่อัปโหลดของคุณได้อย่างง่ายดาย คุณจะสามารถสร้างลบและอัปโหลดไฟล์ทั้งหมดจากบรรทัดคำสั่ง
instructor usage
: แทนที่จะมุ่งหน้าไปยังไซต์ OpenAI ในแต่ละครั้งคุณสามารถตรวจสอบการใช้งานของคุณจาก CLI และตัวกรองตามวันที่และช่วงเวลา โปรดทราบว่าการใช้งานมักจะใช้เวลา ~ 5-10 นาทีในการอัปเดตจากด้านของ Openai
โครงการนี้ได้รับใบอนุญาตภายใต้ข้อกำหนดของใบอนุญาต MIT