インストラクターは、大規模な言語モデル(LLMS)からの構造化された出力を操作するための最も人気のあるPythonライブラリであり、毎月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インストラクターは、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 == 25export CO_API_KEY=<YOUR_COHERE_API_KEY> 、 cohereをインストールし、システム環境変数を設定してください。
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 == 25Google AI Python SDKをインストールしてください。 APIキーを使用してGOOGLE_API_KEY環境変数を設定する必要があります。 Gemini Tool Callingでは、 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メソッドを返すという理由だけで、 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のEvalsに貢献することをお勧めします。開始するには、人類とOpenaiのEvalsをチェックして、Pytestテストの形で独自のEvalを提供してください。これらのエバルは週に1回実行され、結果が投稿されます。
支援したい場合は、ここにある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の側から更新するのに5〜10分かかることが多いことに注意してください
このプロジェクトは、MITライセンスの条件に基づいてライセンスされています。