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モデル
MLXApple Silicon最適化
OpenAI / AnthropicAPIラッパーとして動作

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対応)。

この記事について
カテゴリーAI・機械学習
難易度中級
作成日2026/6/6