Instruktur adalah perpustakaan Python paling populer untuk bekerja dengan output terstruktur dari model bahasa besar (LLM), menawarkan lebih dari 600.000 unduhan bulanan. Dibangun di atas Pydantic, menyediakan API yang sederhana, transparan, dan ramah pengguna untuk mengelola validasi, coba lagi, dan respons streaming. Bersiaplah untuk menambah alur kerja LLM Anda dengan pilihan utama komunitas!
Jika perusahaan Anda banyak menggunakan instruktur, kami ingin memiliki logo Anda di situs web kami! Silakan isi formulir ini
Instal Instruktur dengan satu perintah:
pip install -U instructor
Sekarang, mari kita lihat instruktur beraksi dengan contoh sederhana:
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
Instruktur menyediakan sistem kait yang kuat yang memungkinkan Anda untuk mencegat dan mencatat berbagai tahap proses interaksi LLM. Inilah contoh sederhana yang menunjukkan cara menggunakan kait:
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
Contoh ini menunjukkan:
Kait memberikan wawasan yang berharga tentang input fungsi dan kesalahan apa pun, meningkatkan kemampuan debugging dan pemantauan.
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
Pastikan untuk menginstal cohere
dan mengatur variabel lingkungan sistem Anda dengan 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
Pastikan Anda menginstal Google AI Python SDK. Anda harus mengatur variabel lingkungan GOOGLE_API_KEY
dengan kunci API Anda. Panggilan alat Gemini juga mengharuskan jsonref
untuk diinstal.
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 ,
)
Atau, Anda dapat menghubungi Gemini dari klien Openai. Anda harus menyiapkan gcloud
, mendapatkan pengaturan di Vertex AI, dan menginstal Google Auth Library.
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
Ini adalah impian instruktur tetapi karena penambalan Openai, tidak mungkin bagi saya untuk mengetik untuk bekerja dengan baik. Sekarang, dengan klien baru, kita bisa mengetik untuk bekerja dengan baik! Kami juga telah menambahkan beberapa metode create_*
untuk membuatnya lebih mudah untuk membuat iterable dan parsial, dan untuk mengakses penyelesaian asli.
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 ,
)
Sekarang jika Anda menggunakan IDE, Anda dapat melihat jenisnya disimpulkan dengan benar.
await create
Ini juga akan bekerja dengan benar dengan klien asinkron.
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 ,
)
Perhatikan bahwa kita hanya mengembalikan metode create
, fungsi extract()
akan mengembalikan jenis pengguna yang benar.
create_with_completion
Anda juga dapat mengembalikan objek penyelesaian asli
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
Untuk menangani aliran, kami masih mendukung Iterable[T]
dan Partial[T]
tetapi untuk menyederhanakan inferensi tipe, kami telah menambahkan metode create_iterable
dan create_partial
juga!
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
Perhatikan sekarang bahwa jenis yang disimpulkan adalah Generator[User, None]
create_iterable
Kami mendapatkan objek yang dapat diulang ketika kami ingin mengekstrak banyak objek.
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)
Kami mengundang Anda untuk berkontribusi pada Eval di pytest
sebagai cara untuk memantau kualitas model OpenAI dan Perpustakaan instructor
. Untuk memulai, periksa Evals for Anthropic dan Openai dan berkontribusi Eval Anda sendiri dalam bentuk tes Pytest. Eval ini akan dijalankan seminggu sekali dan hasilnya akan diposting.
Jika Anda ingin membantu, periksa beberapa masalah yang ditandai sebagai good-first-issue
atau help-wanted
ditemukan di sini. Mereka bisa berupa apa saja mulai dari peningkatan kode, posting blog tamu, atau buku masak baru.
Kami juga menyediakan beberapa fungsi CLI tambahan untuk kenyamanan yang mudah:
instructor jobs
: Ini membantu penciptaan pekerjaan yang menyempurnakan dengan Openai. Sederhana Penggunaan instructor jobs create-from-file --help
Untuk Mulai Membuat Model GPT-3.5 Fine-Tuned pertama Anda
instructor files
: Kelola file yang diunggah dengan mudah. Anda dapat membuat, menghapus, dan mengunggah file semua dari baris perintah
instructor usage
: Alih -alih menuju ke situs OpenAI setiap kali, Anda dapat memantau penggunaan Anda dari CLI dan memfilter berdasarkan periode tanggal dan waktu. Perhatikan bahwa penggunaan sering membutuhkan ~ 5-10 menit untuk memperbarui dari sisi Openai
Proyek ini dilisensikan berdasarkan ketentuan lisensi MIT.