AI API 流式输出怎么做内容审核?边生成边拦截的安全设计
2026-09-13 · 约 10 分钟阅读
非流式接口可以等待完整答案生成后再审核,但聊天产品通常希望尽快显示首批文字。问题在于,一旦某个 token 已经通过 SSE 发到浏览器,它就可能被用户看到、复制或被下游程序消费。等完整响应结束后再判定“违规”,只能算事后发现,不能算真正拦截。
因此,流式内容审核不是在现有接口后面加一个敏感词函数,而是重新设计“生成、缓冲、判定、展示”四个阶段。本文不依赖某一家模型的审核接口,适用于官方 API 与 AI API 中转场景。
先定义你要保护的对象
不同应用的风险不同。公开聊天需要关注违法、有害和骚扰内容;企业助手还要防止客户资料、内部提示词和个人信息外泄;Agent 则必须把文本展示与工具执行分开。审核策略应从业务风险分类开始,而不是复制一份通用词表。
建议把结果统一成三类:allow 继续展示,review 暂停并进入更严格检查,block 终止生成并返回安全提示。规则还应记录命中的策略版本,便于后续复盘。
三层审核架构
第一层:输入预检
请求上游前先检查用户输入、上传文件摘要和会话上下文。明显不允许的请求可以直接拒绝,既降低风险,也避免产生无意义的 API 消耗。输入预检还应识别“请忽略系统规则”等注入迹象,但不能只依赖关键词。
第二层:增量输出缓冲
不要收到一个字符就立即发给前端。服务端维护一个短缓冲区,按完整句子、标点或长度阈值组成审核片段。缓冲越长,判断上下文越完整,但用户感知延迟越高;缓冲越短,体验更快,却更容易误判。应使用真实业务样本调节,而不是追求一个通用数字。
type Decision = "allow" | "review" | "block";
async function handleChunk(text: string) {
buffer += text;
const segments = splitCompleteSegments(buffer);
for (const segment of segments.ready) {
const decision: Decision = await moderate(segment);
if (decision === "block") {
upstreamAbort.abort();
sendEvent("replace", { message: "该回答无法继续展示" });
return;
}
if (decision === "review") {
await runStrictReview(segment);
} else {
sendEvent("delta", { text: segment });
}
}
buffer = segments.remaining;
}
上例表达的是控制流程。实际实现需要给审核调用设置短超时,并明确审核服务失败时是“默认放行”还是“默认阻断”。高风险业务通常宁可暂停;低风险创作工具可以展示降级提示。
第三层:完整响应复核
局部片段安全,不代表组合后安全。生成结束后再做一次完整语义检查,可发现跨句泄密、逐段拼接规避和前后矛盾。若终检失败,前端必须支持替换已显示内容,而不是只弹出一个警告。
前端协议要支持撤回,而不只是 delta
很多聊天 UI 只处理 delta 和 done,这会让服务端无法纠正已经发出的内容。建议定义业务事件:
delta:追加已通过审核的文本hold:暂停展示,告诉用户正在检查replace:替换当前回答blocked:终止并展示安全说明done:审核与生成均完成
前端只应把 done 状态的回答写入长期会话、复制按钮和语音朗读。未完成内容可以视觉展示,但不能触发自动发布、发邮件或写数据库。
工具调用必须走独立安全通道
模型流式返回“准备执行转账”不等于可以执行。工具参数必须完整组装后进行 Schema 校验、权限检查和必要的人工确认。文本审核与动作授权是两套控制:前者决定用户能看到什么,后者决定系统能做什么。
如果上游在流中混合文本与工具参数,应分别缓存。绝不能把尚未闭合的 JSON 参数边到达边执行,也不要因为文本审核通过就跳过工具授权。
如何降低审核带来的延迟
第一,输入预检与路由选择可以并行完成;第二,对低风险固定文本使用本地规则,对模糊片段再调用语义审核;第三,缓存规则版本与无敏感数据的模板判定;第四,把审核耗时拆成队列等待和实际计算两项。切忌为了“更快”直接旁路超时请求,否则系统压力最大时反而最不安全。
需要记录哪些证据
建议保存 request ID、策略版本、片段序号、判定类别、处置动作、上游取消结果和最终展示状态。敏感原文应做脱敏或受控加密,访问要可审计。指标至少包括阻断率、人工复核改判率、审核延迟、误杀反馈和生成取消成功率。
上线前测试
准备正常样本、边界表达、跨片段拼接、编码变体、提示注入、隐私数据与工具调用样本。重点验证:违规片段是否曾短暂闪现;网络断开后生成是否仍在后台继续;终检失败能否撤回;审核服务不可用时策略是否符合风险等级。
总结
流式审核的关键是“先缓冲判定,再承诺展示”,而不是生成完再补一个过滤器。输入预检、片段审核、完整复核、可撤回前端协议和工具隔离共同构成闭环。选择 AI API 中转服务时,也应确认其 SSE 事件是否完整、取消是否可传播。可前往 openairouter.net 对比中转站与排行榜,先筛选稳定线路,再按本文方案做安全验收。