LLM API 内容审核与安全过滤:跨供应商的拒绝行为、审核 API 和内容策略对比
我们对比了 OpenAI、Anthropic、DeepSeek、DashScope 和 Kimi 的内容审核机制,涵盖审核 API 端点、拒绝响应格式、内容策略分类,以及在跨供应商路由请求时运营者需要掌握的关键差异。
每家 LLM API 供应商的内容审核方式各不相同。OpenAI 提供了一个免费的审核端点,可以逐类别打分。Anthropic 将宪法分类器训练进模型内部,在推理时内联处理拒绝。DeepSeek 和 Kimi 在服务端施加过滤,过滤策略受中国法规要求约束。DashScope 则在内置策略之上叠加了一层可选的 Guardrails 服务。
如果你在多个供应商之间路由请求,迟早会碰到一种情况,供应商 A 接受的提示词被供应商 B 拒绝。这篇参考文档梳理了各家的审核机制,帮助你构建能平滑处理这些不对称问题的路由逻辑。
OpenAI 兼容指供应商提供一个 chat-completions 接口,其请求与响应结构与 OpenAI API 契约足够接近——只需替换三个值(API key、base URL、模型名),原来的 OpenAI SDK 调用即可直接工作。最小实践面是POST /v1/chat/completions 带 messages、model, 并返回 OpenAI 形式的流式响应。
速查对比表
| 供应商 | 专用审核 API | 内联审核 | 拒绝格式 | 内容类别 | 可配置过滤 |
|---|---|---|---|---|---|
| OpenAI | 有,omni-moderation-latest(免费) | 有,Responses API 的 moderation 参数 | HTTP 200 + 拒绝文本 | 仇恨、骚扰、自残、色情、暴力(含子类别) | 否(模型级别) |
| Anthropic | 无 | 有,宪法分类器 | HTTP 200 + stop_reason: "end_turn" 礼貌拒绝 | CBRN、武器、儿童安全、选举干预、欺诈 | 否(模型与分类器级别) |
| DeepSeek | 无 | 有,服务端过滤 | HTTP 400 或响应正文中返回拒绝文本 | 中国法规类别 + 通用安全 | 否 |
| DashScope | 无(独立 Guardrails 产品) | 有,内置策略 + 可选 Guardrails | HTTP 400 DataInspectionFailed(Guardrails);拒绝文本(内置) | 中国法规类别,可通过 Guardrails 配置标签 | 部分可配(Guardrails 标签管理) |
| Kimi | 无 | 有,服务端过滤 | 响应正文中返回拒绝文本 | 中国法规类别 + 通用安全 | 否 |
OpenAI:审核端点 + 内联评分
在主流供应商中,OpenAI 是唯一提供独立、免费审核端点的。omni-moderation-latest 模型同时接受文本和图像输入(单张图像最大 20 MB),返回逐类别的标记和置信度分数,无需触发补全调用。
独立审核
from openai import OpenAI
client = OpenAI()
result = client.moderations.create(
model="omni-moderation-latest",
input="需要分类的文本"
)
print(result.results[0].flagged) # True/False
print(result.results[0].categories) # 各类别布尔值
print(result.results[0].category_scores) # 各类别 0.0–1.0
这个端点免费使用,不计入用量配额。类别包括 hate、harassment、self-harm、sexual、violence 以及子类别 hate/threatening、self-harm/instructions、sexual/minors、violence/graphic。
Responses API 内联审核
从 2026 年中开始,OpenAI 支持在 Responses API 调用中传入 moderation 参数实现内联审核。
response = client.responses.create(
model="gpt-5.6",
input=[{"role": "user", "content": "..."}],
moderation={"model": "omni-moderation-latest"}
)
# 检查输入和输出审核结果
input_mod = response.moderation.input # flagged, categories, scores
output_mod = response.moderation.output # flagged, categories, scores
单次 API 调用即可同时返回输入和输出的审核分数。模型仍然正常生成内容,审核信号是你应用内容策略的参考,并非自动拦截。
运营者注意 内联审核分数在完整响应生成后才返回。如果你使用流式输出,审核结果不包含在部分 delta 中。以安全方式讨论有害内容的响应(比如解释为什么某件事很危险的拒绝回答)仍然可能触发审核标记。OpenAI Moderation 文档,检索于 2026-08-10
Anthropic:宪法分类器
Anthropic 没有提供独立的审核端点。Claude 模型使用宪法 AI 原则进行训练,并在推理时受到宪法分类器的保护。这些分类器是独立的输入/输出 AI 系统,在推理过程中过滤请求。
拒绝机制
当 Claude 判定请求违反内容策略时,返回的是正常的 HTTP 200 响应,stop_reason 为 "end_turn",内容是一段礼貌的拒绝文本。没有特殊的错误码或 HTTP 状态码来标识内容审核拒绝,从 HTTP 层面看,拒绝与正常补全没有区别。
{
"content": [
{
"type": "text",
"text": "I can't help with that request. Creating instructions for weapons could cause serious harm..."
}
],
"stop_reason": "end_turn"
}
宪法分类器
Anthropic 在 2025 年初发布了宪法分类器的研究成果。这些分类器基于合成数据训练,用于防御越狱攻击。漏洞悬赏计划的关键发现有几条。
- 183 名参与者花了超过 3,000 小时尝试寻找通用越狱方法
- 在两个月的测试期内没有发现通用越狱漏洞
- 改进版分类器在仅增加 0.38% 过度拒绝率的情况下实现了同等的鲁棒性
2026 年中发布的 Claude Fable 5 和 Mythos 5 引入了新一代分类器,可以检测包括越狱尝试在内的潜在滥用行为。Anthropic 宪法分类器研究,检索于 2026-08-10
内容策略类别
Anthropic 的可接受使用政策覆盖以下领域。
- CBRN(化学、生物、放射性、核)威胁
- 武器和爆炸物
- 儿童性虐待材料 (CSAM)
- 选举干预和政治操纵
- 欺诈和欺骗
- 恶意软件和网络攻击
与 OpenAI 不同,Anthropic 不暴露逐类别的分数。你无法通过程序判定 Claude 为什么拒绝了某个请求,只能知道它确实拒绝了。
DeepSeek:服务端过滤
DeepSeek 对所有 API 请求施加服务端内容过滤。作为一家中国 AI 公司,DeepSeek 的内容审核受到中国内容法规框架的约束,过滤范围涵盖政治敏感性、暴力以及其他本地监管要求的类别。
拒绝行为
DeepSeek 的拒绝响应有两种形式。
- 正常的 HTTP 200 响应,内容中包含拒绝文本,例如 "Sorry, that's beyond my current scope. Let's chat about something else?"
- 针对触发硬性策略违规的内容返回 HTTP 400 错误
{
"choices": [
{
"message": {
"role": "assistant",
"content": "Sorry, that's beyond my current scope. Let's chat about something else?"
},
"finish_reason": "stop"
}
]
}
运营者须知
- DeepSeek 没有暴露审核 API 或逐类别分数
- 内容过滤不可通过 API 配置
- 软拒绝在 HTTP 层面与正常补全完全相同(都是 HTTP 200)
- 过滤范围反映了中国法规要求,与西方供应商的策略存在实质性差异
- 自部署的 DeepSeek 开源模型(V4、V4-0324)不包含这些 API 级别的过滤器,过滤仅适用于托管 API
DeepSeek API 文档,检索于 2026-08-10
DashScope(阿里云):内置策略 + Guardrails 服务
DashScope(阿里云百炼)采用两层审核体系。内置内容策略在所有 Qwen 模型 API 调用上强制执行基线合规。在此之上,运营者可以选择启用 Guardrails 服务以获得更精细的控制。
内置内容策略
所有 DashScope API 调用都会经过基线内容审核,与中国法规要求保持一致。当内置过滤器触发时,模型可能在响应正文中返回拒绝内容,finish_reason 为 "stop"。
Guardrails 服务(可选)
Guardrails 服务提供可配置标签的额外审核。启用方式是在请求中传入 X-DashScope-DataInspection 头。
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-plus",
messages=[
{"role": "user", "content": "..."}
],
extra_headers={
"X-DashScope-DataInspection": '{"input":"cip","output":"cip"}'
}
)
Guardrails 触发时,DashScope 返回 HTTP 400,错误码 DataInspectionFailed(OpenAI 兼容模式)或 data_inspection_failed。
{
"error": {
"code": "data_inspection_failed",
"message": "Output data may contain inappropriate content.",
"type": "data_inspection_failed"
}
}
可配置的标签管理
与其他供应商不同,DashScope 的 Guardrails 允许运营者根据应用需求启用或禁用特定审核标签。企业用户还可以使用自定义安全策略配置。这使得 DashScope 成为国内供应商中内容审核可配置性最高的选择,尽管核心策略合规仍然是强制性的。
阿里云 Guardrails 服务文档,检索于 2026-08-10
Kimi(月之暗面):内联安全过滤
Kimi 的 API 对所有请求施加服务端内容过滤,与中国法规要求保持一致。和 DeepSeek 类似,Kimi 没有暴露审核 API 或逐类别分数。
拒绝行为
Kimi K3 在响应正文中内联返回拒绝消息。API 文档声明模型"will reject any questions involving terrorism, racial discrimination, pornography, incitement to violence, etc."
拒绝以正常的 HTTP 200 响应到达,拒绝文本作为 assistant 消息返回。
{
"choices": [
{
"message": {
"role": "assistant",
"content": "I'm sorry, but I can't assist with that request..."
},
"finish_reason": "stop"
}
]
}
运营者须知
- 没有专用审核端点
- 内容过滤不可通过 API 配置
- 拒绝行为是内联的(HTTP 200 + 拒绝文本),不会抛出错误级别的响应
- 当 Kimi K3 开源权重发布后,自部署版本不包含 API 级别的过滤
对多供应商路由的影响
跨供应商路由请求时,三个实际问题会浮出水面。
1. 检测审核拒绝
根本挑战在于,大多数供应商以正常的 HTTP 200 响应形式返回拒绝。只有启用了 Guardrails 的 DashScope 返回明确的 HTTP 400 错误码。对于 OpenAI、Anthropic、DeepSeek 和 Kimi,你需要解析响应文本来判断模型是真的回答了问题还是礼貌地拒绝了。
我们观察到运营者常用以下几种方法。
- 关键词匹配,检查 "I can't help with that"、"beyond my current scope" 等拒绝短语
- OpenAI 内联审核,使用
moderation参数获取机器可读的标记,与生成结果同时返回 - 响应长度启发式,审核拒绝通常比真实回答短得多(低于 200 token)
2. 不对称拒绝处理
通过 OpenAI 审核的提示词可能被国内供应商拒绝,反之亦然。两类供应商的策略空间有交叉但不完全对齐。
| 场景 | OpenAI | Anthropic | 国内供应商 |
|---|---|---|---|
| 政治内容(西方视角) | 通常允许 | 通常允许 | 可能被过滤 |
| 政治内容(中国敏感话题) | 通常允许 | 通常允许 | 被过滤 |
| 武器/爆炸物 | 标记审核 | 拒绝 | 拒绝 |
| CBRN 内容 | 标记审核 | 拒绝 | 拒绝 |
| 成人内容 | 标记审核 | 拒绝 | 拒绝 |
| 历史/教育性暴力描写 | 通常允许 | 通常允许 | 可能被过滤 |
3. 回退策略
当主供应商拒绝请求时,路由层需要做出策略决策。
- 在备选供应商上重试,适用于供应商特定的拒绝(如国内供应商的政治敏感性过滤)。如果不记录日志,存在策略套利风险。
- 将拒绝结果透传给用户,从合规角度来看更安全。
- 记录并告警,无论是否重试,都应记录审核事件用于审计追踪。
TheRouter 支持供应商回退路由,可以配置针对不同错误类型的处理方式。当供应商返回错误时,路由层可以回退到备选供应商。对于以 HTTP 200 形式到达的内容审核拒绝,运营者需要在应用层实现拒绝检测逻辑,路由层才能据此行动。
决策矩阵:选择审核方案
| 你的需求 | 建议方案 |
|---|---|
| 在生成前预筛用户输入 | OpenAI 审核端点(免费、独立) |
| 每次生成时获取审核信号 | OpenAI 内联审核(moderation 参数) |
| 最大化审核类别的控制 | DashScope Guardrails(可配置标签) |
| 审核事件的审计追踪 | OpenAI 审核端点 + 应用级日志 |
| 绕过供应商特定的拒绝 | 应用级拒绝检测 + 回退路由 |
| 无内容过滤的自部署模型 | DeepSeek 或 Kimi 开源模型 |
FAQ
如何程序化检测内容审核拒绝?
OpenAI 的内联审核返回机器可读的 flagged 布尔值和逐类别分数。其他所有供应商都需要解析响应文本。可以检查常见的拒绝模式、异常短的响应,或者对输出运行轻量级分类器。DashScope 启用 Guardrails 是例外,它返回明确的 HTTP 400 错误码。
可以用 OpenAI 的审核端点审查其他供应商的输出吗?
可以。审核端点接受任意文本输入,不限于哪个模型生成的内容。一些运营者会将所有 LLM 输出都通过 OpenAI 的审核端点做二次安全检查,无论内容来自哪个供应商。这个端点免费,不需要生成 API 密钥,任何 OpenAI API 密钥都能用。
为什么同一个提示词在不同供应商上得到不同的审核结果?
每家供应商维护独立的内容策略,训练不同的安全分类器,并在不同的法规框架下运营。国内供应商(DeepSeek、DashScope、Kimi)必须遵守中国内容法规,其覆盖范围包含西方供应商不做过滤的类别。西方供应商(OpenAI、Anthropic)也有自己的策略类别,未必与中国要求一致。
流式响应中内容审核如何工作?
OpenAI 的内联审核分数在完整响应生成后才返回,不包含在部分流式 delta 中。如果一条响应在流式传输过程中触发了审核标记,你的应用此时已经开始向用户发送 token 了。对于返回内联拒绝的供应商(Anthropic、DeepSeek、Kimi),拒绝文本作为响应的一部分正常流式输出。
TheRouter 在路由中如何处理内容审核拒绝?
TheRouter 将 OpenAI 兼容的请求路由到已配置的供应商,并支持供应商返回错误时的回退路由。对于 DashScope HTTP 400 DataInspectionFailed 这样的硬错误,路由层可以触发回退。对于软拒绝(HTTP 200 + 拒绝文本),检测和路由决策在应用层完成,因为从 HTTP 角度看响应在技术上是成功的。
不同地区的内容审核严格程度有差异吗?
有。国内供应商在强制性内容法规下运营,覆盖政治敏感性、历史事件等西方供应商通常不做过滤的类别。DashScope 的国际端点(dashscope-intl.aliyuncs.com)与国内端点适用相同的核心内容策略。在国内供应商和西方供应商之间路由时,运营者应针对具体使用场景分别测试两套策略。
延伸阅读
- LLM API 跨供应商错误码参考,HTTP 级别的错误处理,包括审核触发的错误
- AI Agent 治理与运行时护栏对比,代理编码工作流的治理控制
- LLM API 供应商对比 2026,供应商综合概览,包含定价和速率限制
- OpenAI 迁移到 TheRouter 指南,从直接使用 OpenAI 迁移到多供应商路由
- DeepSeek API 完整指南,DeepSeek API 完整参考,含错误处理
- 阿里云百炼(DashScope)API 指南,DashScope 设置、模型与集成模式
- Kimi K3 API 集成指南,Kimi K3 设置与 API 用法
- Anthropic Claude API 完整指南,Claude API 参考与集成