---
title: ガードレール
---

import { Callout } from 'fumadocs-ui/components/callout'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Image } from '@/components/ui/image'
import { Video } from '@/components/ui/video'

ガードレールブロックは、複数の検証タイプに対してコンテンツをチェックすることで、AIワークフローを検証し保護します。データ品質の確保、ハルシネーション（幻覚）の防止、個人情報の検出、フォーマット要件の強制などをワークフローに組み込む前に行います。

<div className="flex justify-center">
  <Image
    src="/static/blocks/guardrails.png"
    alt="ガードレールブロック"
    width={500}
    height={350}
    className="my-6"
  />
</div>

## 概要

ガードレールブロックでは以下のことが可能です：

<Steps>
  <Step>
    <strong>JSON構造の検証</strong>：パース前にLLM出力が有効なJSONであることを確認
  </Step>
  <Step>
    <strong>正規表現パターンの一致</strong>：コンテンツが特定のフォーマット（メール、電話番号、URLなど）に一致するか確認
  </Step>
  <Step>
    <strong>ハルシネーション（幻覚）の検出</strong>：RAG + LLMスコアリングを使用してAI出力をナレッジベースコンテンツと照合して検証
  </Step>
  <Step>
    <strong>個人情報の検出</strong>：40種類以上のエンティティタイプにわたる個人を特定できる情報を識別し、オプションでマスク処理
  </Step>
</Steps>

## 検証タイプ

### JSON検証

コンテンツが適切にフォーマットされたJSONであることを検証します。構造化されたLLM出力を安全にパースできることを確認するのに最適です。

**ユースケース：**
- パース前にエージェントブロックからのJSON応答を検証
- APIペイロードが適切にフォーマットされていることを確認
- 構造化データの整合性をチェック

**出力：**
- `passed`: 有効なJSONの場合は`true`、それ以外は`false`
- `error`: 検証が失敗した場合のエラーメッセージ（例：「無効なJSON：予期しないトークン...」）

### 正規表現検証

コンテンツが指定された正規表現パターンに一致するかどうかをチェックします。

**ユースケース：**
- メールアドレスの検証
- 電話番号フォーマットのチェック
- URLやカスタム識別子の確認
- 特定のテキストパターンの強制

**設定：**
- **正規表現パターン**：一致させる正規表現（例：メールの場合は`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`）

**出力:**
- `passed`: コンテンツがパターンに一致する場合は `true`、それ以外の場合は `false`
- `error`: 検証が失敗した場合のエラーメッセージ

### 幻覚検出

検索拡張生成（RAG）とLLMスコアリングを使用して、AI生成コンテンツがナレッジベースと矛盾している場合や、ナレッジベースに根拠がない場合を検出します。

**仕組み:**
1. 関連するコンテキストについてナレッジベースに問い合わせます
2. AI出力と取得したコンテキストの両方をLLMに送信します
3. LLMが信頼度スコア（0〜10のスケール）を割り当てます
   - **0** = 完全な幻覚（まったく根拠なし）
   - **10** = 完全に根拠あり（ナレッジベースで完全にサポートされている）
4. スコアが閾値以上（デフォルト：3）であれば検証に合格します

**設定:**
- **ナレッジベース**: 既存のナレッジベースから選択
- **モデル**: スコアリング用のLLMを選択（強力な推論能力が必要 - GPT-4o、Claude 3.7 Sonnetを推奨）
- **APIキー**: 選択したLLMプロバイダーの認証（ホスト型/Ollamaモデルでは自動的に非表示）
- **信頼度閾値**: 合格するための最小スコア（0〜10、デフォルト：3）
- **Top K**（詳細設定）: 取得するナレッジベースのチャンク数（デフォルト：10）

**出力:**
- `passed`: 信頼度スコアが閾値以上の場合は `true`
- `score`: 信頼度スコア（0〜10）
- `reasoning`: スコアに対するLLMの説明
- `error`: 検証が失敗した場合のエラーメッセージ

**ユースケース:**
- エージェントの応答をドキュメントに対して検証
- カスタマーサポートの回答が事実に基づいていることを確認
- 生成されたコンテンツがソース資料と一致することを確認
- RAGアプリケーションの品質管理

### PII検出

Microsoft Presidioを使用して個人を特定できる情報を検出します。複数の国や言語にわたる40以上のエンティティタイプをサポートしています。

<div className="mx-auto w-3/5 overflow-hidden rounded-lg">
  <Video src="guardrails.mp4" width={500} height={350} />
</div>

**仕組み:**
1. パターンマッチングとNLPを使用してコンテンツ内のPIIエンティティをスキャンします
2. 検出されたエンティティの位置と信頼度スコアを返します
3. オプションで出力内の検出されたPIIをマスクします

**設定:**
- **検出するPIIタイプ**: モーダルセレクターからグループ化されたカテゴリーを選択
  - **一般**: 個人名、メールアドレス、電話番号、クレジットカード、IPアドレスなど
  - **アメリカ**: 社会保障番号、運転免許証、パスポートなど
  - **イギリス**: NHS番号、国民保険番号
  - **スペイン**: NIF、NIE、CIF
  - **イタリア**: 納税者番号、運転免許証、VAT番号
  - **ポーランド**: PESEL、NIP、REGON
  - **シンガポール**: NRIC/FIN、UEN
  - **オーストラリア**: ABN、ACN、TFN、メディケア
  - **インド**: Aadhaar、PAN、パスポート、有権者番号
- **モード**: 
  - **検出**: PIIの識別のみ（デフォルト）
  - **マスク**: 検出されたPIIをマスク値に置き換え
- **言語**: 検出言語（デフォルト：英語）

**出力:**
- `passed`: 選択したPIIタイプが検出された場合は `false`
- `detectedEntities`: タイプ、位置、信頼度を含む検出されたPIIの配列
- `maskedText`: PIIがマスクされたコンテンツ（モード = "Mask"の場合のみ）
- `error`: 検証が失敗した場合のエラーメッセージ

**ユースケース:**
- 機密性の高い個人情報を含むコンテンツのブロック
- データのログ記録や保存前のPIIマスキング
- GDPR、HIPAAなどのプライバシー規制への準拠
- 処理前のユーザー入力のサニタイズ

## 設定

### 検証するコンテンツ

検証する入力コンテンツ。通常、以下から取得されます：
- エージェントブロックの出力: `<agent.content>`
- ファンクションブロックの結果: `<function.output>`
- APIレスポンス: `<api.output>`
- その他のブロック出力

### 検証タイプ

4つの検証タイプから選択：
- **有効なJSON**: コンテンツが適切にフォーマットされたJSONかどうかを確認
- **正規表現マッチ**: コンテンツが正規表現パターンに一致するか検証
- **幻覚チェック**: LLMスコアリングによる知識ベースとの検証
- **PII検出**: 個人を特定できる情報の検出と任意のマスキング

## 出力

すべての検証タイプは以下を返します：

- **`<guardrails.passed>`**: 検証が成功したかどうかを示すブール値
- **`<guardrails.validationType>`**: 実行された検証のタイプ
- **`<guardrails.input>`**: 検証された元の入力
- **`<guardrails.error>`**: 検証が失敗した場合のエラーメッセージ（オプション）

タイプ別の追加出力：

**幻覚チェック：**
- **`<guardrails.score>`**: 信頼度スコア（0〜10）
- **`<guardrails.reasoning>`**: LLMの説明

**PII検出：**
- **`<guardrails.detectedEntities>`**: 検出されたPIIエンティティの配列
- **`<guardrails.maskedText>`**: PIIがマスクされたコンテンツ（モード = "Mask"の場合）

## 使用例

### パース前にJSONを検証する

<div className="mb-4 rounded-md border p-4">
  <h4 className="font-medium">シナリオ：エージェントの出力が有効なJSONであることを確認する</h4>
  <ol className="list-decimal pl-5 text-sm">
    <li>エージェントが構造化されたJSON応答を生成</li>
    <li>ガードレールがJSON形式を検証</li>
    <li>条件ブロックが`<guardrails.passed>`をチェック</li>
    <li>成功した場合→データを解析して使用、失敗した場合→再試行またはエラー処理</li>
  </ol>
</div>

### 幻覚を防止する

<div className="mb-4 rounded-md border p-4">
  <h4 className="font-medium">シナリオ：カスタマーサポートの回答を検証する</h4>
  <ol className="list-decimal pl-5 text-sm">
    <li>エージェントが顧客の質問に対する回答を生成</li>
    <li>ガードレールがサポートドキュメントのナレッジベースと照合</li>
    <li>信頼度スコアが3以上→回答を送信</li>
    <li>信頼度スコアが3未満→人間によるレビューにフラグを立てる</li>
  </ol>
</div>

### ユーザー入力のPIIをブロックする

<div className="mb-4 rounded-md border p-4">
  <h4 className="font-medium">シナリオ：ユーザー提出コンテンツを無害化する</h4>
  <ol className="list-decimal pl-5 text-sm">
    <li>ユーザーがテキストコンテンツを含むフォームを提出</li>
    <li>ガードレールがPII（メール、電話番号、社会保障番号など）を検出</li>
    <li>PIIが検出された場合→提出を拒否または機密データをマスク</li>
    <li>PIIがない場合→通常通り処理</li>
  </ol>
</div>

<div className="mx-auto w-3/5 overflow-hidden rounded-lg">
  <Video src="guardrails-example.mp4" width={500} height={350} />
</div>

### メール形式を検証する

<div className="mb-4 rounded-md border p-4">
  <h4 className="font-medium">シナリオ：メールアドレス形式をチェックする</h4>
  <ol className="list-decimal pl-5 text-sm">
    <li>エージェントがテキストからメールを抽出</li>
    <li>ガードレールが正規表現パターンで検証</li>
    <li>有効な場合→メールを通知に使用</li>
    <li>無効な場合→修正を要求</li>
  </ol>
</div>

## ベストプラクティス

- **条件ブロックと連携する**: `<guardrails.passed>` を使用して検証結果に基づいてワークフローのロジックを分岐させる
- **JSONの解析前に検証する**: LLM出力を解析する前に、必ずJSON構造を検証する
- **適切なPIIタイプを選択する**: パフォーマンス向上のため、ユースケースに関連するPIIエンティティタイプのみを選択する
- **適切な信頼度しきい値を設定する**: 幻覚検出では、精度要件に基づいてしきい値を調整する（高いほど厳格）
- **幻覚検出には高性能モデルを使用する**: GPT-4oまたはClaude 3.7 Sonnetは、より正確な信頼度スコアリングを提供する
- **ログ記録のためにPIIをマスクする**: PIIを含む可能性のあるコンテンツをログに記録または保存する必要がある場合は、「マスク」モードを使用する
- **正規表現パターンをテストする**: 本番環境にデプロイする前に、正規表現パターンを徹底的に検証する
- **検証失敗を監視する**: `<guardrails.error>` メッセージを追跡して、一般的な検証の問題を特定する

<Callout type="info">
  ガードレールの検証はワークフロー内で同期的に行われます。レイテンシーが重要な場合は、幻覚検出にはより高速なモデル（GPT-4o-miniなど）を選択してください。
</Callout>
