AI Security for Apps は、LLM プロンプトが危険または望ましくない主題に触れていることを検出できます。トピック検出には 2 つの層があります。
- デフォルトの危険なトピック: 暴力犯罪、ヘイトスピーチ、性的コンテンツなどの有害な内容を検出する、組み込みの安全カテゴリです。
- カスタムトピック: 「competitors」や「financial-advice」など、組織固有のポリシーに合わせて定義するトピックです。
AI Security for Apps を有効にすると、プロンプトをデフォルトの危険なトピックカテゴリと照合し、次の 2 つのフィールドに値を入れます。
- LLM Unsafe topic detected(
cf.llm.prompt.unsafe_topic_detected): 危険なトピックが見つかった場合はtrueです。 - LLM Unsafe topic categories(
cf.llm.prompt.unsafe_topic_categories): 検出した具体的なカテゴリの配列です。
デフォルトの危険なトピックカテゴリ
| カテゴリ | 説明 |
|---|---|
S1 |
暴力犯罪 |
S2 |
非暴力犯罪 |
S3 |
性関連の犯罪 |
S4 |
児童の性的搾取 |
S5 |
名誉毀損 |
S6 |
専門的な助言 |
S7 |
プライバシー |
S8 |
知的財産 |
S9 |
無差別兵器 |
S10 |
ヘイト |
S11 |
自殺と自傷 |
S12 |
性的コンテンツ |
S13 |
選挙 |
S14 |
コードインタープリターの濫用 |
カスタムトピック検出では、独自のトピックを定義し、AI Security for Apps が各プロンプトをそれらと照合してスコアを付けます。そのスコアを カスタムルール または レート制限ルール で使い、自分で決めた関連度スコアに基づいてリクエストをブロック、チャレンジ、またはログできます。
この機能は、実行時にプロンプトを評価する zero-shot 分類モデル を使います。モデルの学習は不要です。
- 最大 20 件のカスタムトピックの一覧を定義します。各トピックは次で構成されます。
- Label: ルール式と分析で使う、短いハイフン区切りの識別子です(例:
financial-advice)。 - Topic description: モデルがプロンプトを分類するために使う説明文です(例:
seeking financial advice)。
- Label: ルール式と分析で使う、短いハイフン区切りの識別子です(例:
cf-llmラベル付きエンドポイントにリクエストが届くと、モデルはプロンプトを定義済みのすべてのトピック説明と照合し、それぞれに関連度スコアを返します。- スコアは
cf.llm.prompt.custom_topic_categoriesマップフィールドに、ラベルをキーとして書き込まれます。ルール式と分析では、トピック説明ではなくラベルを使います。
ダッシュボードでは、次の 2 か所からカスタムトピックを管理できます。
- Security Settings ページ: Security > Settings を開き、AI Security for Apps セクションを検索します。Custom Topics で Manage topics を選び、トピックの追加、編集、削除を行います。
- 式ビルダーのサイドバー: カスタムルール の作成または編集時に LLM Custom topic フィールドを選びます。次に Manage custom topics を選ぶと、ルール作成ページを離れずにトピックを管理できるサイドバーが開きます。
どちらの方法でも、同じトピック一覧が更新されます。一方での変更は、もう一方にすぐ反映されます。
-
Cloudflare ダッシュボードで、Security の Settings ページを開きます。
Settings を開く ↗または、カスタムルールの作成ページ を開き、LLM Custom topic フィールドを選び、Manage custom topics を選んでサイドバーを開きます。
-
次を指定してトピックを追加します。
- Label: 短いハイフン区切りの識別子です(例:
competitors)。 - Topic Description: モデルが分類に使う英語の説明フレーズです(例:
seeking info on competitors)。
- Label: 短いハイフン区切りの識別子です(例:
-
Save を選択します。
PUT リクエストでカスタムトピックの一覧を更新します。
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/ai-security/custom-topics" \
--request PUT \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"topics": [
{
"label": "competitors",
"topic": "seeking info on competitors"
},
{
"label": "financial-advice",
"topic": "seeking financial advice"
},
{
"label": "hr-internal",
"topic": "asking about internal HR policies"
}
]
}'現在のトピックを取得するには、GET リクエストを使います。
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/ai-security/custom-topics" \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"| パラメーター | 上限 |
|---|---|
| トピックの最大数 | 20 |
| トピック文字列の長さ | 印字可能な ASCII 文字 2〜50 文字 |
| ラベルの長さ | 2〜20 文字 |
| ラベルの形式 | 小文字、数字、ハイフン(-)のみ |
カスタムトピック検出の精度は、トピック説明の書き方に依存します。基盤のモデルは、プロンプトの意味とトピック説明を比較する zero-shot 分類器 です。
いちばん大切なのは、主題だけでなく、ユーザーの意図を書くことです。
モデルはキーワード一致ではなく、意味による分類を行います。ユーザーが 何をしようとしているか を捉えたトピック説明は、主題名だけを書いた説明より明らかに正確です。短い動詞句(3〜6 語)が、精度とカバー範囲のバランスとして最適であることが多いです。
同じ 2 つのトピック説明が、どちらも金融に触れるが意図が大きく違う 2 つのプロンプトに対して、どう動くかを比較します。
| トピック説明 | プロンプト: "Should I invest my savings in index funds?" | プロンプト: "Our finance team just finished the Q3 report." |
|---|---|---|
financial advice(名詞のみ) |
一致する | こちらも一致する。「finance」という語があるため、助言を求めていなくても一致します |
seeking financial advice(意図を表すフレーズ) |
一致する | 正しく無視する。金融には触れるが、助言を求める意図がないためです |
| 品質 | トピック説明 | 理由 |
|---|---|---|
| 最良 | seeking info on competitors |
意図を捉えます。ユーザーが競合について能動的に尋ねているときだけ発火します |
| 可 | Acme Corp, Banana Co, Candy & Sons |
既知の名前には効きますが、無名の競合を見逃し、何気ない言及にも反応します |
| 避ける | other companies |
あいまいすぎます。企業に触れるほぼすべてのプロンプトに一致します |
| 品質 | トピック説明 | 理由 |
|---|---|---|
| 最良 | seeking financial advice |
意図ベースです。案内を求めるユーザーに一致し、金融の受動的な言及は無視します |
| 可 | securities and investments |
主題の範囲としては妥当ですが、助言だけでなくニュース記事や事実の言及にも発火します |
| 避ける | finance |
非常に広いです。経費報告から料金の質問まで、ほぼすべてに一致します |
- 具体的に書きます。 広すぎると誤検知が増え、狭すぎると見逃しが増えます。
- 意味の重なりを避けます。 2 つのトピックがほぼ同じ意味(例:
seeking financial adviceとasking for investment guidance)だと、同じプロンプトで似たスコアになり、20 件のトピック枠を無駄にします。 - テストして繰り返します。 テスト用プロンプトを送り、Security Analytics でスコアを確認します。トピック説明の具体度や、ルールのスコアしきい値(
lt 20は厳しく、lt 50は緩い)で調整できます。 - 1 つのトピック説明に複数の値を並べないでください。 モデルはカンマ区切りリストの先頭項目だけを評価します。たとえば
Toyota, Ford, Audi, BMWはToyotaに関するプロンプトにしか一致せず、残りは無視されます。カンマを外しても精度は上がりません。seeking info on competitorsのような意図ベースの 1 フレーズを使うか、値ごとに別トピックを作ってください。
| ラベル | トピック説明 |
|---|---|
competitors |
seeking info on competitors |
financial-advice |
seeking financial advice |
legal-advice |
asking for legal or regulatory advice |
sensitive-data |
requesting passwords or API keys |
job-seeking |
asking about job openings or careers |
bias |
comparing demographic groups as better or worse |