Jev Recipe / アーキテクチャ比較

Jev vs Instructor:構造化出力から型安全な意思決定へ

大モデルの JSON 生成、スキーマ検証エラー、リトライループを解消。決定論的な単一フォワードパスでレイテンシを ~95ms へ圧縮。

Instructor から Jev への移行 3 ステップ

01Pydantic / Zod モデルから Jev Question Schema へのマッピング手順を把握。
02リトライ待機ループ(Exponential Backoff)コードを削除し、単一 HTTP 呼び出しへ簡素化。
03モデルが直接出力する較正済み確率値(Confidence)を活用した安全な分岐処理へ移行。
schema / 共通意思決定コントラクト
{
  "routing": {
    "type": "choice",
    "instructions": "チケットを正しいキューへ振り分ける",
    "criteria": {
      "billing": "決済、返金、インボイス",
      "technical": "製品不具合や設定トラブル",
      "sales": "購入相談や見積もり"
    }
  }
}
このスキーマは Instructor Pydantic モデルと等価であり、Playground でゼロリトライ判定を検証できます。

アーキテクチャ特性の徹底比較

METRIC
Jev
Instructor / Guardrails
基本動作原理
System 1 意思決定モデル(離散 Softmax 確率計算)
汎用 LLM によるテキスト生成 + 外部 JSON パース検証
推論レイテンシ (P50)
~95ms(単一フォワードパスで完了)
1200ms〜3500ms(生成長に依存、リトライ時はさらに倍増)
スキーマハルシネーション率
0%(無効なキーや不正な JSON が構造上発生しない)
2%〜8%(モデルのブレによりパース失敗・再試行が必要)
信頼度(確信度)の較正
RLCD 学習による客観的な較正済み確率値を出力
未較正(プロンプトに自己申告させるか、対数確率の外部集計が必要)
耐プロンプトインジェクション性
非生成型アーキテクチャにより物理的に無効化
生成頭を持つため脱獄やプロンプト指示上書きに脆弱

コード対照:リトライループ vs ゼロリトライ型呼び出し

python / instructor リトライループ
import instructor
from openai import OpenAI
from pydantic import BaseModel

class RouteDecision(BaseModel):
    queue: str

client = instructor.from_openai(OpenAI())

def route_ticket(ticket: str) -> RouteDecision:
    return client.chat.completions.create(
        model="gpt-4o-mini",
        response_model=RouteDecision,
        max_retries=3,
        messages=[{"role": "user", "content": ticket}],
    )
python / jev ゼロリトライ型呼び出し
import requests

def route_ticket(ticket: str) -> dict:
    resp = requests.post(
        "https://api.typesafe.ai/v1/jev/evaluate",
        json={
            "state": {"ticket": ticket},
            "questions": {
                "routing": {
                    "type": "choice",
                    "instructions": "チケットを振り分ける",
                    "criteria": {
                        "billing": "決済、返金、インボイス",
                        "technical": "製品不具合や設定トラブル",
                        "sales": "購入相談や見積もり"
                    }
                }
            }
        }
    )
    resp.raise_for_status()
    return resp.json()["routing"]

コストと統合の継続評価