解説
さらに詳しく解説
構造化出力とは
構造化出力(Structured Output)は、LLMの出力を特定のフォーマット(JSON、XMLなど)で生成する機能です。アプリケーションとの連携で重要な役割を果たします。
従来の課題
非構造化出力の問題:
├── パース困難
│ └── 自由形式のテキスト
├── 不安定性
│ └── 出力形式がばらつく
├── エラー処理
│ └── 予期しない形式への対応
└── 開発コスト
└── 後処理ロジックが複雑構造化出力の仕組み
| 方法 | 説明 |
|---|---|
| JSON Mode | JSON形式での出力を強制 |
| Function Calling | 関数の引数として構造化 |
| Schema指定 | JSONスキーマで形式定義 |
| Guided Decoding | 生成時に形式を制約 |
OpenAI API例
python
from openai import OpenAI
from pydantic import BaseModel
class Product(BaseModel):
name: str
price: float
category: str
client = OpenAI()
response = client.beta.chat.completions.parse(
model="gpt-4o",
messages=[
{"role": "user", "content": "iPhone 15の情報を教えて"}
],
response_format=Product
)
product = response.choices[0].message.parsed
print(product.name) # iPhone 15
print(product.price) # 119800活用シーン
| シーン | 用途 |
|---|---|
| データ抽出 | 文書からの情報抽出 |
| API連携 | 外部システムへのデータ送信 |
| フォーム生成 | ユーザー入力の構造化 |
| 分析 | 分類・スコアリング結果 |
JSONスキーマ例
json
{
"type": "object",
"properties": {
"sentiment": {
"type": "string",
"enum": ["positive", "negative", "neutral"]
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"keywords": {
"type": "array",
"items": {"type": "string"}
}
},
"required": ["sentiment", "confidence"]
}メリット
構造化出力のメリット:
├── 信頼性
│ └── 形式が保証される
├── 開発効率
│ └── パース処理が簡単
├── 型安全
│ └── スキーマによる検証
└── 自動化
└── 後続処理との連携が容易各社対応状況
| 提供者 | 機能 |
|---|---|
| OpenAI | Structured Outputs、Function Calling |
| Anthropic | Tool Use |
| Function Calling | |
| Mistral | JSON Mode |
ベストプラクティス
- スキーマを明確に: 必要なフィールドを定義
- 例を提供: Few-shotで期待形式を示す
- 検証を実装: 出力のバリデーション
- フォールバック: 失敗時の代替処理
