강사는 대형 언어 모델 (LLM)의 구조화 된 출력으로 작업하는 데 가장 인기있는 Python 라이브러리로 60 만 개가 넘는 월별 다운로드를 자랑합니다. 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
강사는 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를 설치하십시오. API 키로 GOOGLE_API_KEY
환경 변수를 설정해야합니다. 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 ,
)
또는 OpenAI 클라이언트에서 Gemini에 전화 할 수 있습니다. 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_*
메소드를 추가했습니다.
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
Method를 반환하기 때문에 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)
OpenAI 모델과 instructor
라이브러리의 품질을 모니터링하는 방법으로 pytest
의 EVAL에 기여하도록 초대합니다. 시작하려면 Anthropic 및 OpenAi의 EVAL을 확인하고 Pytest 테스트 형태로 자신의 EVAL을 제공하십시오. 이 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와 필터에서 날짜와 기간으로 사용량을 모니터링 할 수 있습니다. OpenAI 측에서 업데이트하는 데 사용되는 경우가 종종 있습니다.
이 프로젝트는 MIT 라이센스의 조건에 따라 라이센스가 부여됩니다.