instructor は何をしますか?
アクティブループ中に複合テキスト出力を複雑なビジネスモデルルールに対して検証する本番構成。
概要
instructor は、LLM(大規模言語モデル)からの応答を検証・整形するためのPythonライブラリです。pydanticのデータモデルを利用して、出力を厳密に制御し、バリデーションを自動化します。
主な機能
- 構造化出力: LLMの応答を指定したPydanticモデルに従って抽出・整形します。
- カスタムバリデーション: 複雑なビジネスルールに基づいて出力を検証します(例: 特定の値の範囲、正規表現パターン、外部APIとの整合性)。
- アクティブループ対応: イテレーティブなプロセスでの使用を想定し、エラー発生時の再試行や修正を容易にします。
- マルチプラットフォーム: OpenAI、Anthropic、Google Vertex AIなど、主要なLLMプロバイダーと統合可能。
- 型安全性: Pythonの型ヒントを活用し、IDEの補完や静的解析と連携。
インストール
pip install instructor pydantic
クイックスタート
以下は、OpenAIのChatCompletion APIを使用した例です。
import instructor
from pydantic import BaseModel
from openai import OpenAI
# 検証モデルの定義
class User(BaseModel):
name: str
age: int
# instructorでクライアントをラップ
client = instructor.from_openai(OpenAI())
# 構造化応答を取得
user = client.chat.completions.create(
model="gpt-3.5-turbo",
response_model=User,
messages=[
{"role": "user", "content": "John Doe is 30 years old."}
]
)
print(user) # name='John Doe' age=30
カスタムバリデーション
pydanticのバリデータを使って複雑なルールを適用できます。
from pydantic import BaseModel, field_validator
class Product(BaseModel):
name: str
price: float
@field_validator("price")
@classmethod
def price_must_be_positive(cls, v):
if v <= 0:
raise ValueError("price must be positive")
return v
try:
product = Product(name="Widget", price=-10.0)
except Exception as e:
print(e) # 1 validation error for Product
アクティブループでの使用
ループ内でLLMを呼び出し、出力を都度検証するパターン。
import instructor
from pydantic import BaseModel, ValidationError
from openai import OpenAI
client = instructor.from_openai(OpenAI())
class Step(BaseModel):
action: str
result: str
while True:
# プロンプト生成
prompt = f"Current step: {step.action}. Next action:"
try:
step = client.chat.completions.create(
model="gpt-4",
response_model=Step,
max_retries=3, # 自動リトライ
messages=[{"role": "user", "content": prompt}]
)
# 検証成功
print(f"Action: {step.action}, Result: {step.result}")
except ValidationError as e:
print(f"Validation failed: {e}")
break
設定
環境変数またはコード内で設定します。
OPENAI_API_KEY=sk-...
INSTRUCTOR_MODE=openai # または "anthropic", "vertex"
リンク
ライセンス
MIT License