AI・機械学習
上級

Guidance(ガイダンス)

MicrosoftリサーチチームがLLMの生成フローをプログラム的に制御するために開発したPythonライブラリ。テンプレート構文でLLM呼び出しと条件分岐・ループを混在させた「制御可能生成」を実現。

0 回閲覧
0 いいね
2026/6/4 更新
関連タグ
LLM
制御可能生成
Microsoft
テンプレート
構造化出力

Guidance — Microsoft製LLM制御可能生成ライブラリ

GuidanceはMicrosoft Researchが開発し、2023年にオープンソース公開したPythonライブラリ。従来の「プロンプトを投げてレスポンスを受け取る」モデルを超えて、LLMの生成プロセスそのものをプログラムから細かく制御するアプローチを採用している。

設計哲学: インターリーブ制御

Guidanceの最大の特徴は「テキスト生成とプログラムロジックのインターリーブ(交互実行)」。生成の途中で条件分岐・ループ・外部関数呼び出しを挟み込むことで、複雑な構造化タスクを確実かつ効率的にこなせる:

import guidance
from guidance import models, gen, select

# ローカルLLM使用例
lm = models.LlamaCpp("./llama-3.2-3b.gguf")

# テンプレートによる制御フロー
with lm:
    lm += "自作PCのCPU選択:
"
    lm += "用途: " + select(["ゲーミング", "クリエイター", "一般事務"]) + "
"
    lm += "予算: " + select(["5万円以下", "5〜10万円", "10万円以上"]) + "
"
    lm += "推奨CPU: " + gen("cpu_recommendation", max_tokens=50, stop="
")
    lm += "
理由: " + gen("reason", max_tokens=200)

print(lm["cpu_recommendation"])

デコレータスタイルAPI

Guidanceは関数デコレータ形式でLLMプログラムを定義できる:

@guidance
def product_analyzer(lm, product_name: str):
    lm += f"製品: {product_name}
"
    lm += "カテゴリ: " + select(["CPU", "GPU", "メモリ", "SSD", "その他"]) + "
"
    lm += "価格帯評価: " + select(["コスパ優秀", "標準", "プレミアム"]) + "
"
    lm += "総評: " + gen("review", max_tokens=300) + "
"
    return lm

result = product_analyzer(lm, "Ryzen 9 9900X")

select()による制約生成

select()は指定した選択肢から確率的に最適なものをLLMに選ばせる。選択肢以外の出力は物理的に不可能になるため、分類タスクのハルシネーションを完全に排除できる:

# 評価スコア(1〜5)の確実な生成
lm += "評価スコア: " + select(["1", "2", "3", "4", "5"]) + "点
"

# 製品カテゴリの分類
category = select(["電源ユニット", "PCケース", "CPUクーラー", "ケースファン"])

トークンヒーリング

Guidanceは「トークンヒーリング」機能を持つ。通常のLLM生成ではプロンプトの末尾文字がトークン境界と一致しないと性能が落ちることがある。Guidanceはこれを自動補正して正確な継続生成を保証する。

対応モデルバックエンド

  • models.LlamaCpp: ローカルGGUFモデル(Gemma/Qwen等)
  • models.Transformers: HuggingFaceモデル
  • models.OpenAI: OpenAI API(制限付き)
  • models.VertexAI: Google Vertex AI

JSONスキーマ生成

from guidance import json as guidance_json

schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "score": {"type": "number", "minimum": 0, "maximum": 100}
    }
}

with lm:
    lm += "評価結果:
" + guidance_json(schema=schema)

result = json.loads(lm["result"])

パフォーマンス最適化

GuidanceはKVキャッシュを最大限活用する設計。select()の候補評価時に共通プレフィックスのKVキャッシュを再利用することで、n個の候補に対するトークン生成コストをO(n)からO(1)+差分に削減できる。

InstructorやXGrammarとの違い

  • Guidance: 生成フローそのものを制御。条件分岐・ループが書ける。プログラミング的アプローチ。
  • Instructor: Pydantic+リトライ。プロンプトとスキーマの結合が目的。
  • XGrammar: 高速トークンマスキング。推論サーバー組み込み向け。

Guidanceは「LLMをサブルーチンとして呼び出す高度な制御フロー」が必要なケース、例えば複数ステップの推論チェーンや動的な質問生成・回答評価ループに特に適している。

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