3.1 バリデーター基礎

Validator Basics

Validatorとは

Validatorは、LLM出力の各フィールドに対する検証ルールを定義するコンポーネントである。スキーマの型定義だけでは表現できない、値の妥当性検証を担う。

Validatorの役割

・値の範囲チェック(数値が0-100の範囲内か)

・フォーマット検証(メールアドレス形式か)

・長さ制限(文字列が指定範囲内か)

・カスタムロジック(ビジネスルールの検証)

Validatorの適用方法

方法1: Pydantic Annotatedを使用

from typing import Annotated
from pydantic import BaseModel
from guardrails.validators import ValidLength, ValidRange

class Product(BaseModel):
    name: Annotated[str, ValidLength(min=1, max=100)]
    price: Annotated[int, ValidRange(min=0, max=1000000)]
    description: Annotated[str, ValidLength(max=500)]

方法2: RAILファイルで定義

<rail version="0.1">
  <output>
    <object name="product">
      <string name="name" validators="length: 1 100" />
      <integer name="price" validators="range: 0 1000000" />
      <string name="description" validators="length: 0 500" />
    </object>
  </output>
</rail>

方法3: Guardに直接追加

from guardrails import Guard
from guardrails.validators import ValidLength

guard = Guard.from_pydantic(Product)
guard.use(ValidLength(min=1, max=100), on="name")

検証結果の種類

結果 クラス 説明
成功 PassResult 検証に成功、値はそのまま使用
失敗 FailResult 検証に失敗、OnFailActionに従って処理

複数Validatorの適用

1つのフィールドに複数のValidatorを適用できる。

from guardrails.validators import ValidLength, RegexMatch

class User(BaseModel):
    email: Annotated[
        str,
        ValidLength(min=5, max=100),
        RegexMatch(pattern=r"^[\w\.-]+@[\w\.-]+\.\w+$")
    ]
適用順序 Validatorは定義順に実行される。最初に失敗したValidatorでOnFailActionが発動する。

OnFailActionの指定

from guardrails import OnFailAction
from guardrails.validators import ValidRange

class Score(BaseModel):
    # 失敗時にLLMへ再質問
    value: Annotated[
        int,
        ValidRange(min=0, max=100, on_fail=OnFailAction.REASK)
    ]
    
    # 失敗時に自動修正
    rating: Annotated[
        int,
        ValidRange(min=1, max=5, on_fail=OnFailAction.FIX)
    ]
参考文献
[1] Guardrails AI - Validators - https://docs.guardrailsai.com/concepts/validators/