المعلم هو مكتبة Python الأكثر شعبية للعمل مع المخرجات المنظمة من نماذج اللغة الكبيرة (LLMS) ، والتي تضم أكثر من 600000 تنزيل شهري. تم تصميمه فوق Pydantic ، ويوفر واجهة برمجة تطبيقات بسيطة وشفافة وسهلة الاستخدام لإدارة الاستجابات للتحقق من الصحة وإعادة صحة واستجابات البث. احصل على استعداد لتوسيع نطاق سير عمل 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
يوفر المدرب نظام خطافات قوي يتيح لك اعتراض وتسجيل المراحل المختلفة لعملية تفاعل LLM. إليك مثال بسيط يوضح كيفية استخدام الخطافات:
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 الخاص بك. تتطلب استدعاء أداة Gemini أيضًا تثبيت 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 ,
)
بدلاً من ذلك ، يمكنك الاتصال بـ Gemini من عميل 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_*
لتسهيل إنشاء Teerables و 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 لـ Anthropic و Openai والمساهمة بـ EVALS الخاصة بك في شكل اختبارات 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
هذا المشروع مرخص بموجب شروط ترخيص معهد ماساتشوستس للتكنولوجيا.