Instructorは、SambaNova モデルを使って構造化された出力を生成するためのツールです。LLMからの応答を、JSON、XML、あるいはカスタムスキーマなどのあらかじめ定義された形式で出力させることができ、応答の一貫性を保ちつつ、下流システムへの統合やパースを容易にします。この機能は、API、自動化パイプライン、AI駆動型アプリケーションなど、信頼性と予測可能性の高い出力が求められる場面で特に有用です。

インストール

pip install "instructor[openai]"

基本的な使用方法

以下は、SambaCloud API と Instructor を使用して、Meta-Llama-3.1-405B-Instruct モデルから構造化された出力を生成する例です。Pydantic を使って User スキーマ (name: 文字列、 age: 整数) を定義し、モデルにその形式で応答を返すように要求しています。Instructor が応答の構文チェックとパース処理を行い、最終的に構造化された Python オブジェクトを生成します。
from openai import OpenAI
import instructor
import os
from pydantic import BaseModel
client = instructor.from_openai(
    OpenAI(
        base_url="https://api.sambanova.ai/v1",
        api_key=os.environ["SAMBANOVA_API_KEY"]
    )
)
class User(BaseModel):
    name: str
    age: int
user = client.chat.completions.create(
    model="Meta-Llama-3.1-405B-Instruct",
    messages=[
        {"role": "user", "content": "Ivan is 28"},
    ],
    response_model=User,
)
print(user)
# > User(name='Ivan', age=28)

非同期での利用

以下のコードでも同様に SambaCloud API と Instructor を使用し、構造化出力を取得します。結果は非同期で取得され、User(name='Ivan', age=28')という形式で出力されます。
from openai import AsyncOpenAI
import instructor
import os
from pydantic import BaseModel

client = instructor.from_openai(
    AsyncOpenAI(
        base_url="https://api.sambanova.ai/v1",
        api_key=os.environ["SAMBANOVA_API_KEY"]
    )
)

class User(BaseModel):
    name: str
    age: int

async def get_user():
    user = await client.chat.completions.create(
        model="Meta-Llama-3.1-405B-Instruct",
        messages=[ {"role": "user", "content": "Ivan is 28"},],
        response_model=User,
    )
    return user

# Run with asyncio
import asyncio
user = asyncio.run(get_user())
print(user)
# > User(name='Ivan', age=28)

応用例

Instructorを活用して、メール分類ツールを構築するサンプルノートブックもご覧いただけます。