Communityコーディング&開発github.com

jxnl/instructor

アクティブループ中に複合テキスト出力を複雑なビジネスモデルルールに対して検証する本番構成。

instructor とは?

jxnl/instructor は、AIエージェント(Claude Code、Cursor、Codexなど)が生成する複合テキスト出力を、複雑なビジネスモデルルールに基づいてリアルタイム検証するための本番対応スキルです。特にアクティブループ(能動的な処理ループ)内で出力の厳密な制御が必要なユースケースに最適で、エージェントが誤った形式やルール違反の出力を生成するのを防ぎます。本スキルは、JSONスキーマやカスタムバリデータを用いて、構造化データの抽出やフォーマット検証を自動化し、開発者の手動チェック負荷を軽減します。Pythonのpydanticライブラリをベースとしており、型安全なデータモデル定義と組み合わせて使うことで、CI/CDパイプラインや本番環境での信頼性を向上させます。対応プラットフォームは特に制限なく、Claude CodeやOpenAI関数呼び出しなど、多くのLLMベースのツールと統合できます。

対応~Claude Code~Codex CLI~Cursor
npx skills add jxnl/instructor

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

instructor は何をしますか?

アクティブループ中に複合テキスト出力を複雑なビジネスモデルルールに対して検証する本番構成。

概要

instructor は、LLM(大規模言語モデル)からの応答を検証・整形するためのPythonライブラリです。pydanticのデータモデルを利用して、出力を厳密に制御し、バリデーションを自動化します。

主な機能

  • 構造化出力: LLMの応答を指定したPydanticモデルに従って抽出・整形します。
  • カスタムバリデーション: 複雑なビジネスルールに基づいて出力を検証します(例: 特定の値の範囲、正規表現パターン、外部APIとの整合性)。
  • アクティブループ対応: イテレーティブなプロセスでの使用を想定し、エラー発生時の再試行や修正を容易にします。
  • マルチプラットフォーム: OpenAI、Anthropic、Google Vertex AIなど、主要なLLMプロバイダーと統合可能。
  • 型安全性: Pythonの型ヒントを活用し、IDEの補完や静的解析と連携。

インストール

pip install instructor pydantic

クイックスタート

以下は、OpenAIのChatCompletion APIを使用した例です。

import instructor
from pydantic import BaseModel
from openai import OpenAI

# 検証モデルの定義
class User(BaseModel):
    name: str
    age: int

# instructorでクライアントをラップ
client = instructor.from_openai(OpenAI())

# 構造化応答を取得
user = client.chat.completions.create(
    model="gpt-3.5-turbo",
    response_model=User,
    messages=[
        {"role": "user", "content": "John Doe is 30 years old."}
    ]
)

print(user)  # name='John Doe' age=30

カスタムバリデーション

pydanticのバリデータを使って複雑なルールを適用できます。

from pydantic import BaseModel, field_validator

class Product(BaseModel):
    name: str
    price: float

    @field_validator("price")
    @classmethod
    def price_must_be_positive(cls, v):
        if v <= 0:
            raise ValueError("price must be positive")
        return v

try:
    product = Product(name="Widget", price=-10.0)
except Exception as e:
    print(e)  # 1 validation error for Product

アクティブループでの使用

ループ内でLLMを呼び出し、出力を都度検証するパターン。

import instructor
from pydantic import BaseModel, ValidationError
from openai import OpenAI

client = instructor.from_openai(OpenAI())

class Step(BaseModel):
    action: str
    result: str

while True:
    # プロンプト生成
    prompt = f"Current step: {step.action}. Next action:"
    
    try:
        step = client.chat.completions.create(
            model="gpt-4",
            response_model=Step,
            max_retries=3,  # 自動リトライ
            messages=[{"role": "user", "content": prompt}]
        )
        # 検証成功
        print(f"Action: {step.action}, Result: {step.result}")
    except ValidationError as e:
        print(f"Validation failed: {e}")
        break

設定

環境変数またはコード内で設定します。

OPENAI_API_KEY=sk-...
INSTRUCTOR_MODE=openai  # または "anthropic", "vertex"

リンク

ライセンス

MIT License

関連スキル