
AIGC内容像潮水一样涌进后台的时候压力就给到了每一个做内容平台的内容安全团队。中文互联网里批量生产的AI水文、洗稿软文、甚至以假乱真的AI新闻报道已经在肉眼可见地挤占真实内容的流量空间。我所在的团队从半年前开始系统性推进中文语境下的AI生成内容治理内部代号就叫“陌讯 AIGC 检测”定位不是做一个论文里的模型而是一套能扛住线上流量、能说服审核员、能在误判和漏放之间找到平衡的落地系统。这篇文章把整个方案的设计逻辑、数据标注、模型训练、工程部署和踩坑记录完整拆开给正在做类似事情或准备立项的同行一个可参考的蓝本。无论你是内容平台的安全工程师、算法工程师、负责内容治理的产品运营还是刚准备踏入AIGC检测方向的研究者这套方案里的多数问题你们迟早都会遇到。中文语境的复杂性决定了它不能直接照搬英文社区那套“PPL分类器”的玩法后面我会把为什么不行、怎么调、怎么落地讲透。1. 项目定位与核心矛盾拆解1.1 中文语境下的治理难点在哪里先交代背景。我所在的内容平台每天的新增内容里AI直接生成或AI辅助改写的比例在几个月内从不到1%涨到了接近15%而且这个数字还在爬。这不是单一平台的个例是几乎所有UGC平台都在面对的共性问题。早期靠人工抽检和简单的关键词规则还能勉强应付但内容量一旦上来纯人力的成本谁也扛不住。立项做自动检测不是技术炫技而是运营成本和安全水位双重倒逼的结果。中文语境给AIGC检测加了几个英文场景不常见的难度。第一是中文信息密度高同样的语义用更短的字数表达模型判断的上下文窗口显得更局促。很多AI生成检测器在英文长文本上表现不错换到中文短句上精度掉得很快。第二是中文文本的风格跨度极大。同一个模型生成的小说、新闻稿、小红书种草文案、知乎回答表面特征差异非常大。如果检测器只在一个内容品类上训练换一个品类效果就崩。第三是中文资源语料里的“AI话术污染”已经发生。很多爬虫语料库本身已经混入了大量AI生成文本用这种数据预训练的模型天然就带着一定程度的“AI坐标偏移”会让下游检测器更难学。第四是“中英混杂”和“拼音缩写”在网络文本里太常见了。用户会在一句中文里夹英文关键词会把“真的”写成“zhen de”会故意用错别字规避审核。这些行为既出现在人类文本也出现在AI为了绕检测而模仿的文本里导致特征边界模糊。所以“陌讯”这个方案的第一步不是选模型而是定义清楚在中文场景里我们要检测的到底是什么。这直接影响后续所有技术选型。1.2 检测目标不是简单二分类一开始产品给我提的需求是“判断一段文本是不是AI写的”。我听到这个需求就觉得不行。真实场景里用户和创作者的行为是一个光谱纯人工创作未使用任何生成工具。人工起稿AI扩写或补全。AI起稿人工润色修改。AI翻译/改写后的文本。完全由AI生成粘贴发布。如果系统只输出“AI”或“非AI”一方面会让大量混合创作用户被误杀另一方面审核员拿到结果也不知道该怎么处置。我坚持把目标改成“风险分层标注”模型输出0到1之间的AI生成概率同时给出重点可疑句子的定位、文本困惑度、语义连贯度等辅助信号。人工审核员拿到的不是一个冷冰冰的二分类结果而是一份带“证据”的风险报告。这套思路决定了后续我们不是在做一个单点模型而是做一套多信号融合的检测体系。分类模型是核心但规则信号、统计特征、后处理逻辑同样重要。1.3 方案设计原则可解释、可兜底、可运营“陌讯”整体设计遵循三条原则。可解释检测结果必须能说明“为什么”。审核员对AI判罚本来就敏感如果系统只给“AI概率0.93”然后要求删文没有任何支撑证据审核员不敢点确认。我们要求每条处置建议必须附带置信区间、可疑片段、评估依据。可兜底任何模型都可能被绕过因此不能把自动化检测作为唯一防线。实际流程是规则引擎检测模型双重触发高风险内容进入人工复核队列低风险内容自动放行或仅标记观察。这样即使模型被对抗样本击穿也只是少了一条自动拦截不会造成大规模误杀。可运营检测系统不是上线就完事必须能持续用线上真实数据迭代。标注数据回流、误判案例复盘、模型周期更新这些被当作系统核心功能来建设而不是事后补丁。2. 检测技术方案选型从统计特征到大模型判别2.1 基础信号困惑度与爆发度先讲检测原理里最容易理解、也是我们最早用的两个统计信号困惑度和爆发度。困惑度PerplexityPPL衡量的是文本在某个语言模型下的“意外程度”。简单说如果一段话让一个训练充分的中文语言模型觉得“每个词都写得不出所料”那它有较大可能是AI生成的因为生成模型倾向于走概率最高的路径。反之人类写作经常出现“意料之外但语义合理”的表达困惑度更高。爆发度Burstiness衡量的是困惑度的波动情况。AI文章往往整体困惑度都比较平滑而人类文章会有一些“灵感爆发”的句子也会有比较平常的过渡句PPL曲线起伏更明显。原理想通了落地就碰到中文的坑。英文社区常用GPT-2或GPT-3系列计算PPL但在中文上直接套有两个问题分词器不同导致PPL绝对值没有跨模型可比性。同一个句子用不同分词器算出来的PPL差异很大。中文里大量成语、古诗、文言文引用对语言模型来说本身就是“低概率”但“高语义密度”的存在。人类引用一句“落霞与孤鹜齐飞”PPL会很高AI如果自动生成这句它的PPL反而可能很低因为模型学会了对高频古文片段的偏好。直接用PPL阈值会误杀引用古文的人类作者。所以PPL在“陌讯”里只作为底层信号之一不直接决定判罚。我们的做法是对全文分句计算PPL和句间PPL变化率输出6个连续特征进融合模型。纯粹规则阈值这条路试完就放弃了因为可绕过性太高。2.2 语义断层检测抓住AI长文的逻辑病在统计特征之后我们加了语义断层检测。这个方法来自对大量AI生成中文长文的观察生成模型写短段落很顺滑但写到长文时经常出现上下文信息密度不足、重复语义模板、逻辑跳跃的问题。典型表现是连续几句话都在用不同表述重复同一个观点。段落之间缺乏有效的递进关系像“车轱辘话来回说”。局部句子高质量但放到全文里会觉得“飘”没有主线。实现思路是把文本切成句子用中文预训练模型得到每句话的向量表示然后计算相邻句子的余弦相似度。人类文本相邻句子的相似度是动态变化的有铺垫、有转折、有递进AI文本的句间相似度往往单调偏高尤其在后半段会出现“自我重复”导致的相似度骤升。我们把这个指标叫做“语义平滑度”。经验值正常人类文章相邻句子的平均余弦相似度在0.45到0.62之间纯AI生成文章经常超过0.68而且标准差明显偏小。当然这个数值会因文本类型不同而浮动所以同样作为融合特征而非硬规则。语义断层检测还有一层价值它能够定位可疑片段。审核员打开内容详情页时系统会把相似度异常偏高的连续段落标黄并标注“此处语义重复度过高疑似生成模型常见模式”。这个细节对人工复核效率的提升非常明显。2.3 分类模型中文预训练模型做检测器第三块是核心分类模型。项目初期我们对比过几类方案传统机器学习TF-IDFLR/XGBoost、轻量深度模型TextCNN、BiLSTM、中文预训练模型BERT系最后用了基于中文RoBERTa的检测模型并在其基础上融合前面讲的统计特征和语义特征。选择预训练模型的原因很直接数据量有限的情况下预训练模型对复杂语义模式的泛化能力远超从零训练的浅层模型。AI生成的文本很多是“语义合理但微妙不自然”TF-IDF这类词袋模型根本抓不到这种深层特征。模型输入是三段信息拼接文档文本本身经分词后进入BERT编码器PPL、爆发度、语义平滑度等统计特征在池化层后拼接进全连接层句级可疑度序列的统计摘要如Top3可疑句得分、可疑句占比。这种结构能同时利用语义表示和浅层统计信号。我们做过消融实验单独BERT的F1在0.86左右融合统计特征后F1能到0.90以上尤其在“中文短文本”这一最难的类别上提升明显。2.4 生成侧水印与协作机制的补充检测侧再怎么努力也是在“事后”做识别。如果能从生成源头打上水印检测成本会大幅降低。所以项目里也接入了生成侧水印的验证能力。水印的原理不复杂在生成模型的解码阶段通过特定分组的随机采样扰动把一串不可见的二进制信息嵌入到文本中。第三方模型厂商可以在自家模型输出时主动打标检测方只需要维护对应的水印解码器就能判断文本是否由特定模型生成。但现实是市面上能接触到的开源模型和第三方API大部分没有统一的水印标准。真正干扰平台生态的黑产用的往往是开源模型或自己微调的模型根本不会配合打水印。所以水印只能作为辅助手段不能作为主力。真正能兜底的还是内容侧的语义检测。这条选型路径走下来我的体感是不要迷信某一个单一技术AIGC检测必须是一个“多信号融合”的工程体系每类信号都有它擅长的场景也都有它会被绕过的弱点。3. 中文数据集构建与标注体系落地3.1 数据来源与构造方式模型要能打数据是基础。中文AIGC检测最大的困境之一是公开数据集匮乏且场景单一。我们在项目里没有依赖现成数据集而是自己搭了一条数据生产线。人类文本侧从平台历史内容里做分层采样。重点不是随机抽而是按内容品类、作者活跃度、内容长度、写作风格四个维度分层。要覆盖长文、短文、评论、种草、问答、新闻、小说避免模型在单一品类上过拟合。这部分数据量最后占到训练集40%。AI文本侧通过多个中文生成模型、不同解码策略批量采样生成。这里有个关键细节不能只用默认解码参数。只用默认温度生成出来的文本特征高度集中模型很容易学到“温度0.8 top_p 0.9”的生成痕迹一旦黑产换了参数就失效。我们按温度0.4到1.4、top_p 0.7到1.0、repetition_penalty 1.0到1.15做了网格采样相当于人工制造了特征多样性。混合改写侧是最难构造的。纯AI文本和纯人类文本的区分相对容易难的是“半人半AI”。我们用规则生成人工后编辑双路来构造一种是把人类文章交给AI续写、扩写另一种是把AI文章交给标注员做轻度润色。这个过程消耗了大量标注工时但不做这部分线上根本扛不住真实用户“AI生成人工改几个字”的绕过行为。3.2 标注体系设计多标签与可信度标注规范是整个数据工程质量的地基。我们定义了一套三级标签体系一级标签文本类型区分“人类原创”“AI直接生成”“AI辅助创作”“AI改写/翻译”。二级标签生成模型类别如果有条件记录文本是来自哪个模型家族的输出。三级标签典型特征标注标注员需要勾选文本中肉眼可见的AI特征比如“开头模板化”“语义重复”“逻辑跳跃”“过度使用连接词”。这其中“AI辅助创作”是最难标、也是争议最大的类别。我们的仲裁原则是只要生成模型参与了超过一半篇幅的创作就算AI辅助如果只是查资料或改个句子不算。这个标准不一定通用但必须内部一致否则模型学到的边界会一团浆糊。标注可信度我们也做了控制。每条样本至少两人标注不一致的交第三人仲裁。项目跑了两个月标注的一致率从刚开始的0.72提升到0.89达到可用水准。值得一提的是模型上线后我们还把线上审核员的高置信判例持续回流标注这是数据迭代最宝贵的来源。3.3 难例挖掘与浅层特征陷阱初版模型上线后我们做过一次“寻找模型盲区”的专项分析。把模型误判的样本挑出来给标注团队看发现一个很扎眼的规律模型把大量“人类写的但结构规整”的文本判成了AI。典型例子一位作者写技术教程每一段都用“首先”“然后”“最后”开头词和句都很通顺结果被模型判定为AI概率高达0.87。这个误判让我意识到模型学到了中文AI写作的“模板词偏好”这种浅层特征。AI生成文本确实高频使用“首先/其次/总之/综上所述”但人类写作同样会用不能作为强特征让模型过度依赖。我们花了一周时间针对性补充了“结构规整的人类文本”和“刻意避免模板词的AI文本”同时把这种认知写进标注规范里要求标注员不要因为看见“首先”就打AI标签。经过这轮补数据模型对这类文本的误判率下降了约6个百分点。难例挖掘的工作必须持续做。每两周我们会用线上新误判样本跑一轮数据复盘这个节奏后来成了铁律。4. 模型训练与信号融合的实操细节4.1 模型结构与输入特征组织模型主体用中文RoBERTa具体网络结构上不是简单地在BERT后面接一个分类头。我前面提到过三路输入展开说下实现第一路是文档编码。长文本超过BERT最大长度限制时我们按段落切窗每个窗口独立编码再做序列池化。一个文档的每个窗口都会得到一组“AI风险概率”最后汇总成文档级概率和窗口级风险序列。第二路是统计特征。PPL均值、PPL标准差、爆发度、语义平滑度、可疑句占比这几个值归一化后拼成一个特征向量与BERT池化向量做concatenate。第三路是局部信号。从语义断层检测里拿到的Top3可疑句的相似度极值和位置信息也作为序列特征输入。训练时用多目标损失主任务是AI风险分类的交叉熵辅助任务是“可疑片段定位”。也就是说模型不仅要判断整篇文本是不是AI生成还要预测哪些句子最可疑。这个多任务设计让模型被迫学会关注句子级别的异常模式泛化能力比单标签模型明显要好。参考训练参数供同行复现时起步用预训练模型中文RoBERTa-wwm-ext序列长度512按句切窗批大小16学习率2e-5采用线性衰减优化器AdamW训练轮数5轮早停损失权重主任务0.8辅助定位任务0.2这个参数组合在我的数据规模下效果稳定但不同平台的数据分布不同建议把学习率和批大小当主要调参对象。4.2 对抗训练与类别不平衡处理单拿分类模型去做前一两个版本都能跑出不错的离线指标但上线就露馅。问题在于模型学会了“正常AI”的特征却扛不住“对抗AI”。所以我们做了两件事。对抗训练在BERT嵌入层上加FGM扰动。原理不展开讲效果是让模型对嵌入空间的小扰动更鲁棒。加了FGM之后模型在模拟对抗测试集上的F1从0.82提升到0.86代价是训练时间增加了约三分之一。对于检测这种天然有对抗属性的任务这笔时间值得花。类别不平衡真实线上数据里人类原创文本还是大多数AI文本占比在10%到15%之间。训练集如果过分平衡模型对正常人类文本的“误杀”会升高。我们在损失函数里给少数类加了权重把正样本权重设为负样本的2倍同时用标签平滑防止模型过度自信。最终模型在低误杀率区间的召回表现好了不少而业务上我们更优先保低误杀。4.3 阈值校准与人工介入策略任何二分类模型都需要阈值。这里的核心问题是阈值定得越低漏放越少但误杀越多阈值定得越高误杀少但漏放增加。我们不走“一刀切”路线而是设计了三档决策区间。模型输出概率低于0.45判断为低风险直接放行。 概率在0.45到0.75之间判断为中风险进人机协同队列。规则引擎再叠加检查如果文本同时触发“超长重复段落”或“外部链接插入”等业务规则则优先人工审核。 概率高于0.75且证据信号充分判断为高风险自动拦截进入复审流程。为什么选0.45和0.75这两个阈值不是拍脑袋而是在验证集上结合业务代价算出来的。0.45是“误杀率不超过2%”时的概率分位点0.75是“漏放率不超过1%”时的概率分位点。中间地带就是留给人类判断的空间。4.4 可解释输出给审核员看的证据报告模型输出如果只有“概率0.8”这个数字审核员的使用体验极差他们根本不知道该怎么复核。我们用七天时间做了一个结果解释模块将检测输出结构化总体风险高风险/中风险/低风险三档。AI生成概率0到1的数值附带置信区间。主要依据列出Top3条触发信号比如“全文困惑度偏低”“第4到9句语义重复度高”“疑似模板词频率过高”。可疑片段模型定位的句子高亮人工点击就能对照原文。语句可视化段落级风险热力条一眼看清风险集中在哪部分。这套可解释输出上线之后人工复核效率提升了大约30%。审核员不再是“盲信”系统而是有了可核查的线索很多不必要的争议也少了。5. 工程落地服务化部署与治理闭环5.1 系统模块划分与数据流“陌讯检测”不是单一模型服务而是一套围绕检测能力构建的治理子系统。整体数据流大致是内容发布者提交文本 → 网关 → 同步检测服务与规则引擎并行执行 → 输出风险结论 → 根据风险档位决定放行/拦截/人工队列 → 人工结果回流到样本库 → 进入下一轮训练。这里有一个工程取舍同步还是异步早期产品希望所有内容先检测再发布所以同步检测接口必须足够快但如果每个内容都走完整模型推理成本根本扛不住。我们最终做了分层策略第一层低耗时规则正则、关键词、长度、链接数量毫秒级拦截明显垃圾内容。第二层轻量文本分类模型用蒸馏后的小模型做粗筛过滤掉绝大多数低风险内容。第三层完整“陌讯”检测模型只在第一层或第二层命中可疑信号时触发。这套分层链路的直接效果是真正跑完整大模型的内容只占总量的20%到30%日均检测成本下降了接近一半。5.2 性能优化与长文本处理长文本是检测系统的性能瓶颈。BERT系模型有512 token上限一篇3000字的中文文章可能切出七八个窗口。如果每个窗口都独立推理单篇延迟直接超过2秒线上没法用。我们做了三个优化长文切窗按语义边界段落、句子切分不是盲目按字符切保证每个窗口语义相对完整。窗口级并行推理单篇多窗口在GPU上并行计算延迟从2秒压到800毫秒左右。蒸馏小模型白天在线用蒸馏后的6层轻量模型只有需要复核的风险内容才会在原库里跑完整大模型。实际压测数据单GPU卡消费级可以支撑日均数十万篇内容的粗筛完整检测模型作为兜底峰值QPS控制在20以内。这个吞吐量对绝大多数中大型内容平台足够了。MySQL存结果、Redis当中间队列、审核平台走独立的Web服务这些常规中间件不多做介绍重点强调的是检测结果必须持久化。我们专门建了“检测明细表”每一条检测结果都记录模型版本号、概率分数、触发信号、处理状态。没有这些记录后续复盘和模型迭代完全无从下手。5.3 人机协同治理闭环系统上线到第二周运营反馈了一个典型问题自动拦截确实拦住了AI内容但有些被拦截用户会反复申诉说“这篇稿子是我一个字一个字写的凭什么说是AI”申诉处理不能靠人工一个个看必须有配套机制。我们设计的闭环是系统拦截后用户可发起申诉。系统自动对申诉内容跑一次“复核检测”对比初次检测结果是否稳定并生成一条详细的差异说明。如果复核结果确认为低风险自动放行并记录一次“初次误判”。如果复核仍为高风险直接转到人工复核队列按优先级别处理。无论结论如何这条申诉样本都会进入“争议样本池”用于下一轮标注和训练。这个申诉闭环表面上只是产品功能实际上是我们获取高质量“困难样本”的最核心渠道。模型在争议样本池上每提升一个点线上误伤就会肉眼可见地减少。5.4 样本回流与自动迭代治理系统的技术债如果不还越往后越难。我们把“样本回流”做进了日常流程不是靠人肉整理而是每天凌晨自动拉取前一天的以下三类数据新标注样本人工复核中确认过高置信的样本。争议样本申诉后改判的样本。模型漂移样本模型置信度与最终裁决不一致的样本。这三类数据合并后进入标注平台批量补齐标签。每隔两周用增量数据微调一次模型并在固定的验证集上跑回归测试。连续跑了几轮后模型在“最近30天新出现的内容”上的表现越来越稳这比一次性训练一个模型直接上线要有效得多。6. 评估体系与踩坑实录6.1 离线指标与业务指标的平衡很多人上手检测项目第一反应是追求F1分数。但AIGC检测这个场景里离线指标高不等于业务可用的程度高。我们在模型选型阶段看一组指标指标含义我们的目标门限准确率判对的比例≥90%召回率AI内容被识别出的比例≥85%误杀率人类内容被误判为AI的比例≤2%AUC排序能力≥0.95人工介入率被拉去人工审核的比例≤15%离线准确率、召回率都好理解但业务最敏感的是误杀率。中文内容生态里最难受的投诉不是AI内容漏放而是真人作者被系统误判后带来的创作者信任崩塌。一个优质创作者被冤枉之后可能直接流失。所以我们在调参时给误杀率设了硬性底线宁可漏一些AI内容也不能大规模误伤。6.2 鲁棒性测试对抗样本如何设计评估检测系统不能只拿干净数据测试。真实线上环境的AI生成内容不是训练集里的标准输出黑产会用各种手段规避。我们建了一套对抗测试集语言模型改进的检测方向。第一类是文本噪声在AI生成内容里随机插入全角/半角空格、错别字、同音字替换、拼音替代。测试结果显示加入少量噪声后模型的召回终归下降但下降幅度从初版模型的8%压到了3%左右这个进步主要归功于对抗训练和数据增强。第二类是结构扰动把AI文本打断重排、段落调换、插入一段人类写的段落。这类扰动主要考验“局部特征”是否稳定。实践中发现如果文章后半段突然插入一段人类写的真实细节模型整体风险分会被拉低。所以我们还引入了“段落级标签”机制即使整体判低风险也标记出个别高危段落在人工审核中继续观察。第三类是风格模仿用几组人类常用句式改写AI文本例如把“首先”“其次”删掉换成短句连接。早期模型在这种测试集上掉点最严重后来补充了“去模板词”训练样本情况才明显好转。6.3 高频踩坑与排查速查表项目跑了半年踩过的坑不少。我整理了一张速查表按问题频率排列现象可能原因排查建议人类政治鬼畜文被误判为AI内容结构太规整模板词过多检查模型是否依赖“首先/其次”补充结构规整人类样本古文/诗词引用段被标为高危PPL偏高且模型没见过类似文本统计特征中加大“语义密度得分”权重减少PPL单项影响短文本少于50字识别率极低上下文不足统计特征波动大短文本走独立模型或并入规则引擎不要硬用长文本模型AI率高的文章带有大量外部链接、联系方式黑产文本会叠加内容垃圾特征规则引擎前置命中后可直接进人工队列不用等模型判断同一模型生成的文本不同参数下检测表现差异大训练数据解码参数覆盖不足按温度/top_p网格扩充生成数据定期用新参数抽查线上误报率突然升高新上线模型与旧模型特征分布偏移先回滚旧模型再查训练样本分布变化这张表里的前两条就是我们实际把线上误判压下去的突破口也是很多团队容易在“模型调参”里钻牛角尖而忽略的盲区。6.4 与AI生成工具的持续对抗最后聊一下这半年我最大的认知变化AIGC检测是一场军备竞赛不是一劳永逸的项目。开源模型和API都在升级生成文本的质量越来越接近人类。自己做检测的时候始终要保持“对抗思维”。我最近的实践是建了一个“检测器对战实验室”。团队定期拿最新发布的生成模型、最新的微调套路在内部批量生成挑战样本用现有的“陌讯”检测模型去测试再把失败的样本加入训练集。这个实验室一开始是我个人的小动作后来发现价值实在太高成了项目组的固定流程。它本质上是在告诉团队任何检测能力都只能阶段性占有优势持续迭代才是真正的护城河。如果你准备在团队里做类似的事情我建议从“保留争议样本池”开始。AI生成内容的核心特征会随模型升级而漂移但“与人类逻辑不一致”的底层矛盾短期内不会消失。所有表达能力、可解释能力、人机协同流程都要围绕这个底层矛盾去建设。这套方案并不是最优解只是当前环境下趟出来的一条相对可行的路。中文语境下的AIGC治理还需要更多同行贡献自己的实践细节大家把各自的数据分布、模型选型和踩坑复盘摊开来交流这个领域的整体水位才有机会快速抬高。