AI・機械学習
中級
Outlines(構造化出力ライブラリ)(アウトラインズ)
dottxtチームが開発するPythonライブラリ。有限状態機械(FSM)ベースの文法制約デコーディングでLLMからJSON・正規表現・型安全なPydanticモデルを確実に生成する。
0 回閲覧
0 いいね
2026/6/6 更新
関連タグ
構造化出力
Python
FSM
Pydantic
LLM
Outlinesとは
dottxtチームが開発するPython製LLM構造化出力ライブラリ。有限状態機械(FSM)を使ったGrammar-Constrained Decodingにより、JSONや正規表現に完全準拠した出力を確実に生成する。
インストール
pip install outlines
# vLLM統合
pip install outlines[vllm]
# llama.cpp統合
pip install outlines[llamacpp]
主要機能
1. JSONスキーマ生成
import outlines
from outlines import models, generate
from pydantic import BaseModel
from typing import List
model = models.transformers("mistralai/Mistral-7B-Instruct-v0.2")
class Product(BaseModel):
name: str
price: float
features: List[str]
in_stock: bool
generator = generate.json(model, Product)
result = generator("GeForce RTX 5090の製品情報を教えて")
print(result) # Product(name='GeForce RTX 5090', price=299800.0, ...)
2. 正規表現制約
# 郵便番号のみ返す
generator = generate.regex(model, r"[0-9]{3}-[0-9]{4}")
postcode = generator("東京都渋谷区の郵便番号は?")
# 常に "XXX-XXXX" 形式
3. EBNF文法
grammar = """
?start: object
object: "{" key_value ("," key_value)* "}"
key_value: ESCAPED_STRING ":" value
value: number | ESCAPED_STRING | "true" | "false" | "null"
number: /[0-9]+/
"""
generator = generate.cfg(model, grammar)
4. 選択肢制約
# 指定した選択肢のみ出力
generator = generate.choice(model, ["positive", "negative", "neutral"])
sentiment = generator("このレビューの感情は?: とても良い製品でした")
# 必ず "positive", "negative", "neutral" のいずれか
バックエンド対応
| バックエンド | 特徴 |
|---|---|
| Hugging Face Transformers | 最も広くサポート |
| vLLM | 高スループット本番向け |
| llama.cpp | ローカルGGUFモデル |
| MLX | Apple Silicon最適化 |
| OpenAI / Anthropic | APIラッパーとして動作 |
vLLMとの統合
from vllm import LLM, SamplingParams
llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.2")
sampling_params = SamplingParams(
guided_decoding={
"json": schema_dict # JSON Schemaを直接渡す
}
)
よくある質問(FAQ)
Q1: Outlinesは商用利用できる? A: Apache 2.0ライセンスで商用利用可能。
Q2: GPUなしでも動く? A: CPU推論のllama.cppバックエンドを使えばCPUのみでも動作する。
Q3: OpenAIのStructured OutputsとOutlinesの違いは? A: OpenAI版はAPIサービス(サーバー側制約)、Outlinesはオープンソース(クライアント側・ローカルLLM対応)。