メインコンテンツへスキップ
評価はスコアが何であるかを教えてくれます。ポリシーエンジンは、それに対してアプリケーションが何をすべきかを教えてくれます。たとえば「スコアが 7.5 を下回ったらレスポンスをブロックする」といった具合です。 ポリシーを適用する方法は 2 つあります:
  • アプリケーションポリシー (推奨)。 エンフォースメントモード、しきい値、次元の重み、コンプライアンス、安全な再生成を、アプリケーションごとにダッシュボードで一度設定します。そのアプリケーションのキーで行われるすべての評価に自動的に適用され、コード内にリクエストごとのルールを書く必要はありません。現在有効なポリシーは GET /config で確認でき、各評価は policy_outcome を報告します。
  • SDK ポリシー (ローカル)。 コード内でルールを宣言し、SDK が自分のプロセス内でそれに従って動作します。ローカル限定のロジックや、中央で管理したくないルールに役立ちます。
アプリケーションポリシー: GET /config | Python SDK: policy= を指定した client.eval() | セッション: RAILSession

評価とポリシー

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

仕組み

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

ポリシーアクション

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

ポリシーの宣言

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

再利用可能なポリシー

ポリシーを一度定義してクライアントにアタッチすると、すべての eval() 呼び出しに自動的に適用されます:
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."

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

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

実際のポリシー例

block when safety       < 8.5
block when reliability   < 7.5
block when privacy       < 8.0
warn  when transparency  < 6.0
block when fairness    < 8.0
flag  when inclusivity < 7.0
warn  when safety      < 6.0
block when safety      < 7.0
warn  when reliability < 5.0
flag  when user_impact < 6.0

次のステップ

Python: ポリシーエンジン

Policy、Rule、ポリシーコールバックの完全な API。

Python: セッション

RAILSession のライフサイクルと集約ポリシー。

コンセプト: ミドルウェア

ボイラープレートなしのエンフォースメントのために、ポリシーとプロバイダラッパーを組み合わせます。

コンセプト: 評価

ポリシールールを適用する前にスコアを理解します。