6.1 エラーハンドリング

Error Handling Strategies

エラーの種類

エラー種別原因対処法
ValidationErrorバリデーション失敗Reask/FIX/フォールバック
ParseErrorJSONパース失敗Reask/プロンプト改善
LLMErrorAPI呼び出し失敗リトライ/フォールバック

基本的なエラーハンドリング

from guardrails.errors import ValidationError

try:
    result = guard(
        llm_api=openai.chat.completions.create,
        model="gpt-4",
        messages=[...],
        num_reasks=2
    )
    
    if result.validation_passed:
        return result.validated_output
    else:
        # 検証失敗(リトライ後も失敗)
        return handle_validation_failure(result)

except ValidationError as e:
    print(f"検証エラー: {e}")
    return default_response()

except Exception as e:
    print(f"予期せぬエラー: {e}")
    return error_response()

フォールバック戦略

def process_with_fallback(input_text):
    # 1. 厳密なスキーマで試行
    try:
        result = strict_guard(...)
        if result.validation_passed:
            return result.validated_output
    except:
        pass
    
    # 2. 緩いスキーマで再試行
    try:
        result = relaxed_guard(...)
        if result.validation_passed:
            return result.validated_output
    except:
        pass
    
    # 3. デフォルト値を返す
    return {"status": "error", "message": "処理失敗"}
段階的フォールバック

厳密→緩い→デフォルトの順で試行することで、可能な限り有用な出力を得られる。

エラーログの活用

import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("guardrails")

result = guard(...)

if not result.validation_passed:
    logger.warning(
        f"検証失敗: {result.error}, "
        f"リトライ回数: {result.reask_attempts}, "
        f"生出力: {result.raw_llm_output[:100]}..."
    )
参考文献
[1] Guardrails AI - Error Handling - https://docs.guardrailsai.com/how_to_guides/error_handling/