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

# ポリシーのテスト (Forge)

> Project GuardianごとにTest Datasetを登録し、Experimentを実行して、Guard PolicyがPASS / MASK / BLOCKをどれだけ正確に判定するかを測定します。

**Forge**は、v1.3で新たに導入されたStarfortのポリシーテスト機能です。v1.2では答えられなかった問い — *自分のGuard Policyは本当に期待どおりに判定しているのか？* — に答えます。各入力と、その入力が受けるべき判定をペアにした**Test Dataset**を登録し、Project Guardianに対して**Experiment**を実行すると、actionクラスごとの**accuracy**が算出されます。失敗したケースは、ポリシーを手動で改善するためのシグナルになります。

<Frame caption="Forgeは各Project Guardianの中にあります — (1) Forgeタブ、(2) Add Dataset、(3) Run Experiment">
  <img src="https://mintcdn.com/aimintelligence/-3ie4No4rGti8Jbz/images/v1.3/admin/forge-overview.png?fit=max&auto=format&n=-3ie4No4rGti8Jbz&q=85&s=c686ff90907eff09f6f6c7f5fdbc5da3" alt="Forgeナビゲーション項目とAdd Dataset、Run ExperimentボタンがハイライトされたProject GuardianのForgeタブ" width="1200" height="626" data-path="images/v1.3/admin/forge-overview.png" />
</Frame>

<Note>
  Forgeは測定と可視化を行うだけで、ポリシーを代わりに修正することはありません。評価はexpected actionとactual actionの決定論的（deterministic）な比較であり（LLMによる判定なし）、ポリシーの修正は通常の[Guard Policyの編集・バージョン管理](/ja/v1.3/admin/author-guard-policy)フローをそのまま使います。
</Note>

## Test Dataset

**Test Dataset**は**Project Guardian**（ポリシーをテストする対象）に従属します。1つのGuardianに複数のdatasetを持てます — 例:「PII攻撃パターン」「正常入力」「エッジケース」。Dataset名は所属Guardian内で一意であり、Guardianを削除するとそのdatasetとすべての結果も一緒に削除されます。

Datasetの各**item**は2つの部分で構成されます:

| 部分        | 内容                                                                                              |
| --------- | ----------------------------------------------------------------------------------------------- |
| **入力**    | Guardianに送信するコンテンツ — マルチターン会話（user / assistantメッセージの順序配列）。v1.3は**テキストのみ**をサポートします。              |
| **期待判定値** | Guardianが下す*べき*判定 — 最終**action**（`PASS` / `MASK` / `BLOCK`）と、任意で該当すべきポリシーコードおよび自由テキストの`reason`。 |

v1.3の評価は**最終actionのみ**を比較します。ポリシーコードとreasonは失敗ケース分析のためにすべての結果とともに保存されますが、スコアには影響しません。

### Datasetの登録

プロジェクトのGuardianで**Forge**を開き、datasetを作成します:

<Steps>
  <Step title="名前と説明">名前はそのProject Guardian内で一意である必要があります。</Step>
  <Step title="Guardian Action List">このdatasetが評価対象とするactionの集合（例: Pass / Mask / Block）— クラス別accuracyはこの基準で算出されます。</Step>
  <Step title="Itemのアップロード">CSVまたはJSONLファイル — 各レコードが1つのitem（`input` + `expected_output`）です。</Step>
  <Step title="Goal（任意）">0〜100%のaccuracy目標値。設定すると、このdatasetのすべてのExperimentに**PASS / FAIL**の判定が付きます: Total Accuracy ≥ GoalならPASS。</Step>
</Steps>

<Frame caption="Itemのアップロード — ファイルの列が各itemの入力、期待判定値、メタデータにマッピングされます">
  <img src="https://mintcdn.com/aimintelligence/-3ie4No4rGti8Jbz/images/v1.3/admin/forge-dataset-upload.png?fit=max&auto=format&n=-3ie4No4rGti8Jbz&q=85&s=eb1fe30449b462a0bb5e0989d8334cfc" alt="アップロードされたJSONLファイルと列マッピングを示すAdd Test DatasetダイアログのDataset Fileステップ" width="1200" height="626" data-path="images/v1.3/admin/forge-dataset-upload.png" />
</Frame>

<Frame caption="評価設定 — accuracy GoalとGuardian Action List">
  <img src="https://mintcdn.com/aimintelligence/-3ie4No4rGti8Jbz/images/v1.3/admin/forge-dataset-evaluation.png?fit=max&auto=format&n=-3ie4No4rGti8Jbz&q=85&s=dc909bc22c44a383947a5a14284a9cc0" alt="Goal 80%とPASS、MASK、BLOCKが選択されたAdd Test DatasetダイアログのEvaluationステップ" width="1200" height="626" data-path="images/v1.3/admin/forge-dataset-evaluation.png" />
</Frame>

Datasetはバージョン管理されます。編集や再アップロードで新しいバージョンが作成され、以前のバージョンも保存されます。Experimentは任意のバージョン（デフォルト = 最新）で実行できます。

## Experiment

**Experiment**は、選択した**ポリシー構成**で1つのTest DatasetをProject Guardianに通し、結果を採点する1回の実行です。以下を設定します:

| 入力                            | 備考                                                                                                                                 |
| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| **Dataset**（+ バージョン）          | Datasetが対象Guardian、Goal、Action Listを決定します。バージョンのデフォルトは最新です。                                                                        |
| **名前 / 説明**                   | 任意 — 名前を指定しない場合、process typeとポリシー構成から自動命名されます。                                                                                     |
| **Policyの選択**                 | **互いに異なる**ポリシー1つ以上、それぞれに**バージョン1つ**を指定（デフォルト = そのポリシーの最新バージョン）。同じポリシーを2回選ぶことはできません — 1つのポリシーのバージョン間比較は、別々のExperimentを実行して並べて比較します。 |
| **Process type・model config** | Guardianがサポートするprocess typeから1つ（デフォルト = 先頭）。Model configはGuardianの設定値が事前入力され、この実行に限りoverrideできます。                                  |

<Frame caption="Experimentの設定 — バージョンを1つ指定したポリシー、process type、Guardianから事前入力されたmodel config">
  <img src="https://mintcdn.com/aimintelligence/-3ie4No4rGti8Jbz/images/v1.3/admin/forge-experiment-config.png?fit=max&auto=format&n=-3ie4No4rGti8Jbz&q=85&s=dbd0eea46ed7f61d2ba1e40f37807c1c" alt="PII Basicポリシーのバージョン0.1.0とinput process typeが選択されたRun ExperimentダイアログのConfigurationステップ" width="1200" height="626" data-path="images/v1.3/admin/forge-experiment-config.png" />
</Frame>

実行は\*\*同期（synchronous）\*\*です。完了までblockingされ（`RUNNING` → `COMPLETED`または`ERROR`）、完了時に結果が表示されます。結果・トレース・スコアは永続保存され、過去のExperimentをいつでも再照会できます。

### 採点方法

各itemはレスポンスが到着した瞬間に判定されます — expected action vs actual action、正解か不正解か。Experimentは以下を報告します:

* **Total Accuracy** — actionが一致したitem数 / 全item数。
* **Pass / Mask / Block Accuracy** — datasetのAction Listにあるクラスごとの、expected action基準の正解率。
* **PASS / FAIL** — datasetにGoalがある場合のみ: Total Accuracy ≥ GoalならPASS。

<Frame caption="Experimentの結果 — この実行は80%のGoalに未達（FAIL）で、actionごとの内訳がどこで失敗したかを正確に示しています（MASK・BLOCK項目の未検出）">
  <img src="https://mintcdn.com/aimintelligence/-3ie4No4rGti8Jbz/images/v1.3/admin/forge-experiment-results.png?fit=max&auto=format&n=-3ie4No4rGti8Jbz&q=85&s=a4f36227a270eb9a4e033809d8c0cdf8" alt="処理6件、不一致4件、Total Accuracy 33%、FAIL判定とactionごとの精度を示すRun Experimentの結果ステップ" width="1200" height="860" data-path="images/v1.3/admin/forge-experiment-results.png" />
</Frame>

### 結果の保存先

Experimentのトレースは[Opticon](/ja/v1.3/admin/monitoring-opticon)に*Guardian › dataset › Experiment*の階層で記録され、本番トラフィックとは厳密に分離されます: **`forge` environment**タグ（本番トレースは`default`）、Experiment名 = **session**、dataset名 = **user ID**。本番のPASS / MASK / BLOCKメトリクスがテスト実行で汚染されることはなく、特定のExperimentのトレースだけを正確にフィルタリングできます。StarfortのExperiment履歴には、Forgeからトリガーした実行のみが表示されます。

## 失敗ケースからポリシーを改善する

Forgeは、従来は本番トラフィックの事後分析に頼っていたループを、事前検証で閉じます:

<Steps>
  <Step title="失敗ケースを見つける">accuracyが低いExperimentで失敗したitem（accuracy = 0）を開き、各トレースを確認します — 入力、expected action、actual action。</Step>
  <Step title="診断">パターンを探します: 欠落しているPIIカテゴリ、過検出/見逃しのあるtopicなど。</Step>
  <Step title="ポリシーの修正">Guard Policyを修正し、新しいバージョンを発行します — 通常の[編集・バージョン管理](/ja/v1.3/admin/how-to/version-and-apply-policy)フローそのままです。</Step>
  <Step title="再実行して比較">同じdatasetで新バージョンのExperimentを実行します。Runを並べて比較するとaccuracyの変化が見え — リグレッションを本番トラフィックに到達する前に捕捉できます。</Step>
</Steps>

## 権限

| 操作                          | 必要な権限                         |
| --------------------------- | ----------------------------- |
| Dataset・Experimentの照会       | Project Member以上              |
| Datasetの登録/編集、Experimentの実行 | **`test-execute`** IAM権限      |
| Datasetの削除                  | Project Admin以上               |
| Guard Policyの修正・適用          | Project Admin以上（通常のポリシー編集と同じ） |

<Note>
  v1.3のForgeは意図的にテキスト専用・rule-basedです。ファイル/画像のdataset、LLM-as-judge評価、自動ポリシー最適化はこのバージョンの範囲外です。
</Note>
