> ## Documentation Index
> Fetch the complete documentation index at: https://docs.responsibleailabs.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# ポリシーエンジン

> RAIL スコアをアクションに変換する宣言的ルール: ブロック、警告、フラグ、許可。

評価はスコアが何であるかを教えてくれます。ポリシーエンジンは、それに対してアプリケーションが何をすべきかを教えてくれます。たとえば「スコアが 7.5 を下回ったらレスポンスをブロックする」といった具合です。

ポリシーを適用する方法は 2 つあります:

* **アプリケーションポリシー (推奨)。** エンフォースメントモード、しきい値、次元の重み、コンプライアンス、安全な再生成を、[アプリケーション](/concepts/applications)ごとにダッシュボードで一度設定します。そのアプリケーションのキーで行われるすべての評価に自動的に適用され、コード内にリクエストごとのルールを書く必要はありません。現在有効なポリシーは [`GET /config`](/api-reference/config) で確認でき、各評価は [`policy_outcome`](/api-reference/evaluation) を報告します。
* **SDK ポリシー (ローカル)。** コード内でルールを宣言し、SDK が自分のプロセス内でそれに従って動作します。ローカル限定のロジックや、中央で管理したくないルールに役立ちます。

<Info>
  **アプリケーションポリシー:** [`GET /config`](/api-reference/config) | **Python SDK:** [`policy=` を指定した `client.eval()`](/sdk/python/policy-engine) | **セッション:** [RAILSession](/sdk/python/sessions)
</Info>

## 評価とポリシー

|           | 評価                     | ポリシーエンジン                                   |
| --------- | ---------------------- | ------------------------------------------ |
| **返すもの**  | スコア、信頼度、説明             | アクション: `block` / `warn` / `flag` / `allow` |
| **役割**    | 観察                     | エンフォースメント                                  |
| **使いどころ** | スコアを取得して何をするか自分で決めたいとき | SDK にルールを自動的に適用させたいとき                      |

## 仕組み

```mermaid theme={null}
flowchart TD
    Eval["Evaluation result\n(scores per dimension)"] --> Engine["Policy Engine"]
    Engine --> R1{"Rule 1\nsafety &lt; 7?"}
    R1 -- yes --> Block["action: block"]
    R1 -- no --> R2{"Rule 2\nfairness &lt; 6?"}
    R2 -- yes --> Flag["action: flag"]
    R2 -- no --> R3{"Rule 3\nreliability &lt; 5?"}
    R3 -- yes --> Warn["action: warn"]
    R3 -- no --> Allow["action: allow"]
```

ルールは優先度順に評価されます。最初に一致したルールが主要なアクションを決定します。さらに一致した優先度の低いルールは、そのアクションを二次的に追加するため、どの失敗も静かに捨てられることはありません。

## ポリシーアクション

| アクション   | 使いどころ                          | 例                                      |
| ------- | ------------------------------ | -------------------------------------- |
| `block` | レスポンスがユーザーに届いてはならない場合          | 顧客向けチャットボットで `safety < 5`              |
| `warn`  | レスポンスは進めてよいが、呼び出し元に通知すべき場合     | `reliability < 6` — レスポンスに不確実性が含まれる可能性 |
| `flag`  | ブロックせずに非同期の人間レビュー用にキューに入れる場合   | `fairness < 7` — バイアスレビュー用にフラグ         |
| `allow` | 明示的に通過させる場合 (一致しないコンテンツのデフォルト) | ルールリスト末尾のキャッチオール                       |

## ポリシーの宣言

ルールは、その次元のスコアがその `threshold` を**下回った**ときに発火します。`threshold` は合格に必要な最小値です。たとえば `Rule(dimension="safety", threshold=7.0, action="block")` は、安全性スコアが 7.0 未満のレスポンスをすべてブロックします。

<CodeGroup>
  ```python Python theme={null}
  from rail_score_sdk import RailScoreClient, Policy, Rule

  client = RailScoreClient(api_key="...")

  policy = Policy(rules=[
      Rule(dimension="safety",      threshold=7.0, action="block"),
      Rule(dimension="fairness",    threshold=6.0, action="flag"),
      Rule(dimension="reliability", threshold=5.0, action="warn"),
  ])

  result = client.eval(
      content="...",
      mode="basic",
      policy=policy,
  )

  print(result.policy_outcome.action)           # "block" | "warn" | "flag" | "allow"
  print(result.policy_outcome.triggered_rules)  # Which rules fired
  print(result.policy_outcome.blocked)          # True if action == "block"
  ```

  ```typescript JavaScript theme={null}
  import { RailScoreClient } from "@responsible-ai-labs/rail-score";

  const client = new RailScoreClient({ apiKey: "..." });

  const policy = {
    rules: [
      { dimension: "safety",      threshold: 7.0, action: "block" },
      { dimension: "fairness",    threshold: 6.0, action: "flag"  },
      { dimension: "reliability", threshold: 5.0, action: "warn"  },
    ],
  };

  const result = await client.eval({ content: "...", mode: "basic", policy });

  console.log(result.policyOutcome.action);
  console.log(result.policyOutcome.blocked);
  ```
</CodeGroup>

## 再利用可能なポリシー

ポリシーを一度定義してクライアントにアタッチすると、すべての `eval()` 呼び出しに自動的に適用されます:

```python theme={null}
HEALTHCARE_POLICY = Policy(rules=[
    Rule(dimension="safety",       threshold=8.5, action="block"),
    Rule(dimension="reliability",  threshold=7.5, action="block"),
    Rule(dimension="privacy",      threshold=8.0, action="block"),
    Rule(dimension="transparency", threshold=6.0, action="warn"),
])

client = RailScoreClient(
    api_key="...",
    default_policy=HEALTHCARE_POLICY,
)

result = client.eval(content="...", mode="basic")  # Policy applies automatically

if result.policy_outcome.blocked:
    return "I'm unable to provide that information — please consult a healthcare professional."
```

## セッションレベルのポリシー

セッションは会話全体の品質を追跡します。会話全体の集約品質に対して発火するポリシーを設定でき、多数のターンにわたる緩やかなドリフトの検出に役立ちます:

```python theme={null}
from rail_score_sdk import RailScoreClient, RAILSession, Policy, Rule

turn_policy = Policy(rules=[
    Rule(dimension="safety", threshold=5.0, action="block"),
])

session_policy = Policy(rules=[
    Rule(dimension="safety", threshold=7.0, action="flag", aggregate="avg"),
])

session = RAILSession(
    client=client,
    turn_policy=turn_policy,
    session_policy=session_policy,
)

for user_message in conversation:
    response = await generate_response(user_message)
    outcome = session.record(content=response, mode="basic")

    if outcome.turn_blocked:
        send_fallback()
    elif outcome.session_flagged:
        notify_human_reviewer(session.session_id)
    else:
        send(response)
```

## 実際のポリシー例

<Accordion title="ヘルスケアチャットボット">
  ```
  block when safety       < 8.5
  block when reliability   < 7.5
  block when privacy       < 8.0
  warn  when transparency  < 6.0
  ```
</Accordion>

<Accordion title="採用アシスタント">
  ```
  block when fairness    < 8.0
  flag  when inclusivity < 7.0
  warn  when safety      < 6.0
  ```
</Accordion>

<Accordion title="カスタマーサポートボット">
  ```
  block when safety      < 7.0
  warn  when reliability < 5.0
  flag  when user_impact < 6.0
  ```
</Accordion>

## 次のステップ

<CardGroup cols={2}>
  <Card title="Python: ポリシーエンジン" icon="python" href="/sdk/python/policy-engine">
    Policy、Rule、ポリシーコールバックの完全な API。
  </Card>

  <Card title="Python: セッション" icon="python" href="/sdk/python/sessions">
    RAILSession のライフサイクルと集約ポリシー。
  </Card>

  <Card title="コンセプト: ミドルウェア" icon="layer-group" href="/concepts/middleware">
    ボイラープレートなしのエンフォースメントのために、ポリシーとプロバイダラッパーを組み合わせます。
  </Card>

  <Card title="コンセプト: 評価" icon="magnifying-glass" href="/concepts/evaluation">
    ポリシールールを適用する前にスコアを理解します。
  </Card>
</CardGroup>
