AI Security for Apps 可检测 LLM 提示何时触及不安全或不需要的主题。主题检测有两层:
- 默认不安全主题:一组内置安全类别,用于检测有害内容,例如暴力犯罪、仇恨言论和色情内容。
- 自定义主题:由您定义的主题,以匹配组织的特定策略,例如 "competitors" 或 "financial-advice"。
启用 AI Security for Apps 后,它会自动根据一组默认不安全主题类别评估提示,并填充两个字段:
- 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 classification model 在运行时评估提示。无需模型训练。
- 您定义最多 20 个自定义主题的列表。每个主题包含:
- Label(标签):用于规则表达式和分析的简短连字符标识符(例如
financial-advice)。 - Topic description(主题描述):模型用于对提示进行分类的描述性文本(例如
seeking financial advice)。
- Label(标签):用于规则表达式和分析的简短连字符标识符(例如
- 当请求到达带有
cf-llm标签的端点时,模型会根据所有已定义的主题描述评估提示,并为每个主题返回相关性分数。 - 分数写入
cf.llm.prompt.custom_topic_categoriesmap 字段,以 label 为键。您在规则表达式和分析中使用 label(而不是主题描述)。
您可以在仪表板中的两个位置管理自定义主题:
- Security Settings(安全设置)页面:前往 Security(安全性) > Settings(设置),搜索 AI Security for Apps 部分。在 Custom Topics(自定义主题) 下,选择 Manage topics(管理主题) 以添加、编辑或移除主题。
- Expression builder sidebar(表达式构建器侧边栏):创建或编辑自定义规则时,选择 LLM Custom topic(LLM 自定义主题) 字段。然后选择 Manage custom topics(管理自定义主题) 打开侧边栏,可在不离开规则创建页面的情况下管理主题。
两种方法会更新同一底层主题列表。在一处所做的更改会立即反映到另一处。
-
在 Cloudflare 仪表板中,前往 Security Settings(设置) 页面。
Go to Settings ↗或者,前往自定义规则创建页面,选择 LLM Custom topic(LLM 自定义主题) 字段,并选择 Manage custom topics(管理自定义主题) 打开侧边栏。
-
通过提供以下内容添加主题:
- Label(标签):简短的连字符标识符(例如
competitors)。 - Topic description(主题描述):模型用于分类的描述性英语短语(例如
seeking info on competitors)。
- Label(标签):简短的连字符标识符(例如
-
选择 Save(保存)。
使用 PUT 请求更新自定义主题列表:
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/firewall-for-ai/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/firewall-for-ai/custom-topics" \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"| 参数 | 限制 |
|---|---|
| 最大主题数量 | 20 |
| 主题字符串长度 | 2–50 个可打印 ASCII 字符 |
| Label 长度 | 2–20 个字符 |
| Label 格式 | 仅限小写字母、数字和连字符(-) |
自定义主题检测的质量取决于您如何编写主题描述。底层模型是 zero-shot classifier,它将提示的语义含义与您的主题描述进行比较。
最重要的是描述用户意图,而不仅仅是主题领域。
模型执行语义分类,而不是关键词匹配。捕捉用户_试图做什么_的主题描述,比仅命名主题领域的描述准确得多。简短的动词短语(3–6 个词)通常是精度与覆盖面之间的最佳权衡。
比较相同的两个主题描述在两个都提到金融但意图截然不同的提示上的表现:
| 主题描述 | 提示:"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 |
极其宽泛。几乎匹配从费用报告到定价问题的所有内容 |
- 要具体。 过于宽泛的主题导致误报;过于狭窄的主题导致漏报。
- 避免语义重叠。 若两个主题含义几乎相同(例如
seeking financial advice和asking for investment guidance),它们会在相同提示上得到类似分数,并浪费您的 20 个主题配额。 - 测试并迭代。 发送测试提示并在 Security Analytics 中审查分数。您可以通过调整主题描述(更具体或更宽泛)或规则中的分数阈值(
lt 20较严格,lt 50较宽松)来调优。 - 不要在一个主题描述中列出多个值。 模型仅根据逗号分隔列表中的第一项进行评估。例如,
Toyota, Ford, Audi, BMW将仅匹配关于Toyota的提示——其余项会被忽略。去掉逗号也不会改善结果。请使用单一的以意图为导向的短语,例如seeking info on competitors,或为每个值创建单独的主题。
| Label | 主题描述 |
|---|---|
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 |