Instructor / Outlinesによる構造の保証
Instructor(Python)とOutlinesでデコードを制約し、モデルが不正なJSONを文字どおり生成できないようにします。
「Instructor / Outlinesによる構造の保証」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
主要な 2 つのライブラリ
保証付きの構造化出力を実現する代表的なアプローチは 2 つあります:
- Instructor(Jason Liu) — OpenAI、Anthropic、その他多数のプロバイダー向けの Pydantic ラッパー
- Outlines(.txt) — OSS モデル向けの制約付きデコーディング
Instructor Basics
# pip install instructor openai
import instructor
from openai import OpenAI
from pydantic import BaseModel
client = instructor.from_openai(OpenAI())
class User(BaseModel):
name: str
age: int
user = client.chat.completions.create(
model='gpt-4o-mini',
response_model=User,
messages=[{'role': 'user', 'content': 'Alice, 30'}]
)
print(user.name, user.age)Instructor の仕組み
内部では、Instructor は次の処理を行います:
- Pydantic モデルから JSON Schema を生成する
- それを OpenAI の呼び出しにツールとして追加する
- そのツールが呼び出されるよう強制する
- 引数をパースして Pydantic インスタンスを返す
- バリデーションエラーが発生した場合は、修復してリトライする
Instructor with Validation
from pydantic import field_validator
class User(BaseModel):
name: str
age: int
@field_validator('age')
@classmethod
def positive(cls, v):
if v <= 0:
raise ValueError('Age must be positive')
return v
# Instructor catches ValidationError and retries automaticallyStreaming Instructor
for partial in client.chat.completions.create_partial(
model='gpt-4o-mini',
response_model=User,
messages=[{'role': 'user', 'content': 'Alice, 30'}]
):
print(partial)
# Streams partial Pydantic instances as fields fill in.Instructor with Anthropic
from anthropic import Anthropic
client = instructor.from_anthropic(Anthropic())
user = client.messages.create(
model='claude-sonnet-4-5',
max_tokens=1024,
response_model=User,
messages=[{'role': 'user', 'content': 'Alice, 30'}]
)OSS モデル向け Outlines
Outlines は文法制約付きデコーディングを使用します。HuggingFace、vLLM、llama.cpp で動作します:
# pip install outlines
import outlines
model = outlines.models.transformers('mistralai/Mistral-7B-Instruct-v0.2')
generator = outlines.generate.json(model, User)
user = generator('Alice, 30')なぜ制約付きデコーディングなのか
Outlines は、スキーマに基づいて各ステップで有効なトークンを判断し、無効なトークンをマスクします。モデルは文字どおり無効な JSON を出力できません。
Outlines の正規表現と選択肢
正規表現または選択肢のリストに制約できます:
import outlines.text.generate as g
yes_no = g.choice(model, ['yes', 'no'])
result = yes_no('Are bananas fruits?') # 'yes'両方を組み合わせる
最大限の信頼性を得るには:
- マネージドモデルまたはクローズドモデル(OpenAI、Anthropic)には Instructor を使用する
- 自前ホストのモデルには Outlines を使用する
- 両方で Pydantic モデルを共有する
コスト比較
- Strict Outputs(OpenAI ネイティブ) — 料金に含まれます
- Instructor — バリデーション時のリトライによるわずかなオーバーヘッドがあります
- Outlines — マスク処理によってスループットがわずかに低下しますが、追加の呼び出しはありません
どれを使うべきか
| 用途 | ツール |
|---|---|
| OpenAI/Anthropic | Instructor + Pydantic |
| 自前ホストの OSS | Outlines |
| レイテンシー重視 | OpenAI Structured Outputs(ネイティブ) |
Outlines のアプローチ
Outlines はどのように構造化出力を保証しますか?
まとめ
OpenAI と Anthropic には、ネイティブの Structured Outputs または Instructor を使用します。OSS には Outlines を使用します。Pydantic モデルがすべてをつなぎます。
よくある質問
「Instructor / Outlinesによる構造の保証」レッスンは無料ですか?
はい。「Instructor / Outlinesによる構造の保証」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「Instructor / Outlinesによる構造の保証」で何を学びますか?
Instructor(Python)とOutlinesでデコードを制約し、モデルが不正なJSONを文字どおり生成できないようにします。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「Instructor / Outlinesによる構造の保証」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- JSON ModeとTool-Call出力
- Pydanticスキーマ検証
- 不正な出力の修復ループ
- Instructor / Outlinesによる構造の保証