开源AI检测器实测:你刷的热榜网文三成不对劲


3000万token烧掉2000美金,结果就为了逮住那些连Markdown都不删就收费的AI同人文,这买卖亏不亏?

一篇2026年初的技术博客炸出了个扎心真相:用古董级的机器学习算法(就是那种你大学选修课睡过去的内容),居然能靠“用词习惯统计”把AI写的网文和真人作品区分开,准确率高得离谱。作者为了验证这个想法,自己动手爬了上万篇真人小说,又用七大模型生成了对应的AI版本,最后用scikit-learn训练了个线性SVC分类器,单句话判断准确率就干到了85%以上。

文章还提供了一个网页Demo和GitHub开源代码(lyc8503/AITextDetector),顺便曝光了某平台热榜超三成内容疑似AI生成且无一主动标注的尴尬现状。

那些号称能查AI的检测器到底在干啥

AI内容检测这事儿听起来挺玄乎,但拆穿了其实就一招——看用词习惯。市面上那些所谓的AIGC查重平台,甭管宣传页吹得多天花乱坠,背后大概率跑的就是这种统计模型。作者当年写论文的时候就好奇过这事儿,亲手试了知网万方和一些第三方服务,发现它们确实能把手敲的文本和LLM吐出来的东西分开,但具体咋做到的谁也不知道。后来逛Lofter彻底把他惹毛了,满屏的AI同人文连格式都不清理就敢收费,于是他决定自己动手把这事儿整明白。

网上搜到的教程全是坑

搜“AIGC检测”出来的结果基本没法看,前几页全是软文广告,不是卖论文改写服务的就是推销所谓AI降重工具。好不容易翻到个叫“文本困惑度”的方法,原理听着挺科学:拿个现成的LLM去算每个词出现的概率,如果一句话里几乎每个词都在模型预测的高概率列表里,那八成就是AI写的。作者试了一通发现根本不靠谱,误报漏报满天飞,阈值怎么调都不对。而且这方法还有个致命伤——推理成本太高,本地跑不动大模型,API调用又贵得要死,跨模型还各种水土不服,纯属费力不讨好的笨办法。

自己动手丰衣足食,回归传统机器学习

既然网上没干货,那就自己造轮子。作者直接上了scikit-learn工具箱,照着他的Roadmap选了线性SVC和朴素贝叶斯当起点。这选择其实靠的是直觉:LLM生成文本肯定有固定的用词套路,哪怕是个最简单的贝叶斯分类器都应该能抓住这些规律,只是没想到信号会强到这种程度。

数据怎么来?作者从自己2023年爬过的一个小说平台里筛了差不多一万篇2010到2022年间发布的真人小说,把那些没人看或者太短的剔掉。AI样本这边就烧钱了,他先用LLM给每篇真人小说生成章节摘要,再拿摘要去让LLM重新扩写成完整文章。理论上这样能保证题材对等内容匹配,但API费用贵得离谱,一个周末项目砸几千块进去谁受得了。

于是作者开始打擦边球薅羊毛。Gemini那边用了个代理工具把CLI配额转成API调用,花二十美金开了个AI Pro账号就开干;通义千问那边有人搞了个逆向工程能免费用qwen-coder-plus;智谱GLM-5刚好赶上OpenRouter公测免费薅;Kimi、DeepSeek、豆包、GLM-4.7这些直接冲首月优惠套餐拿下API。说白了他就是玩了命地白嫖各家的羊毛,把批量任务塞成超大输入逼迫模型一次性吐更多内容。最后Gemini Flash干了3亿token,按原价算得两千美金。

训练结果超出预期

数据还没全部生成完作者就忍不住开始训练了。一开始让Claude帮忙写分类代码,那家伙直接把原始文本全部塞进模型,跑出个99.45%的离奇准确率——用脚想都知道过拟合了。作者自己上手重写,把文本按中文标点切分成句子,清洗掉非中英文字符,然后用scikit-learn的TF-IDF提取特征再喂给线性SVC。单句分类准确率直接干到85%。

单个句子信息量有限但85%的准确率意味着啥?一篇长文有几十上百个句子,拿这个逻辑去投票判断整篇文章几乎不会翻车。这表现把作者自己都惊到了,老祖宗的传统机器学习比那些“用AI检测AI”的蠢办法靠谱一百倍。

作者把所有AI样本按模型来源分成七类,尝试训练一个八分类模型(真人加七种AI),结果发现各家LLM用词习惯太像了——估计互相蒸馏出来的——分类准确率直接掉到50%。最后他改成训练七个独立的二分类器,然后搞了个投票机制:同一句话被两个以上模型判定为AI就标红。七个模型跑下来准确率全在85%以上F1值都过了0.8。

前端Demo翻车翻出个新方案

模型训练完了按理说发个GitHub仓库就收工,但每次检测都开Python太麻烦。作者原本计划把模型导出成ONNX格式用WebAssembly跑推理,结果让Claude帮忙写转换脚本的时候那货理解歪了,直接把模型参数裁剪后存成JSON格式,接着用纯JavaScript在浏览器里实现了TF-IDF加SVM的完整推理流程。作者试了下百万字级别的文本在本地跑也就十秒左右,普通网文瞬间出结果。虽然这方案有点蠢但他觉得可读性更高更透明,于是将错就错用了这套JS实现。

特征数量作者纠结了一阵,最终为了性能保留了50万个特征。存成JSON后体积107MB,服务端gzip压缩完差不多38MB。如果压缩到5万到8万特征准确率只掉三四个百分点但实际检测中对真人文本的误报率会大幅波动,所以他宁可牺牲点加载速度也要保住精度。最终网页版准确率比完整版掉了大概1%,单句准确率平均85.9%。

实测效果惊人,顺便扒了热榜底裤

作者拿了一堆模型测试。训练集里出现过的豆包和DeepSeek随便写个三千字故事,检测分数直接干到93%和78.4%。没在训练集里出现过的Claude Sonnet 4.6和GPT-5.2照样被逮住,分数分别是71.9%和73.3%。其他没见过的模型如MiMo-V2、GPT-4o也都在70%以上。就算让LLM模仿真人风格续写二十章,检测率依然有67.8%。

反过来看真人写的网文。作者从订阅列表里抽了十本2022年前完本的小说,题材作者年代都不同,检测率最高29.1%最低只有4.9%,全部低于30%。Lofter那边的同人文因为更随意检测率经常低于10%。但那些他觉得像AI生成的一丢进去直接飙到83.4%。

最狠的是作者顺手爬了Lofter安卓端热门周榜的所有长文,32.22%的帖子AI检测分数超过50%,其中还有相当比例超过70%甚至90%。更离谱的是这么多疑似AI内容没有一篇主动标注过。这数据一出来群里朋友直接感叹“末法时代”。

对抗检测?基本没戏

作者顺手测了几个网上流传的“AI降重”骚操作。谷歌翻译来回翻中英中,检测率从89.9%掉到85%,有道翻译掉到79.2%,搜狗掉到86%。

用所谓的魔法提示词让LLM“减少AI味”,单句提示词只能降到83%,复杂提示词也就降到79.3%。

这些方法放在实际场景里根本没意义,该被逮住还是被逮住。

如果真的想硬刚检测器,唯一可能的路径是用海量真人文本去微调一个专用LLM,或者写一套巨复杂的规则系统定向破坏SVM匹配出来的特征。但这俩路子的成本已经超出普通玩家的能力范围了。

Hacker News讨论核心观点总结

正方(检测可行且有用):

1. 作者用scikit-learn的TF-IDF+线性SVC做文本分类,单句准确率85%,对长文本投票后准确率极高,在Lofter热门榜单检出32%的AI内容,假阳性率低于0.01%
2. Pangram等SOTA检测器假阳性率约万分之一,经过独立测试验证
3. 商业LLM经过RLHF调优后有固定用词模式,这种模式容易被统计模型捕捉
4. 检测器门槛低,可以做成浏览器插件实时过滤AI生成内容

反方(检测本质不可能):

1. 文本的“人类/机器”信号在信息论上不可分离——同一段文本可能由人或机器写出,标签冲突无法避免
2. 检测器只是识别当前模型的“口音”,LLM换风格或被对抗训练后检测立刻失效
3. 用检测器作为判别器训练GAN,LLM可以学会规避所有统计信号
4. 人类的写作风格正在被AI反向影响,未来“AI味”会成为人类自然的表达方式,检测器假阳性将飙升

一个被忽视的角度:

> 问题的核心不是“这段文字是不是AI写的”,而是“写这段文字的人花了多少effort”。AI生成后不经编辑直接发出来才是真正的问题——那种内容通常逻辑空洞、用词呆板、毫无意外感。如果作者用AI打草稿然后认真重写,读者根本看不出来,也不需要看出来。检测器的作用应该是筛掉“连编都懒得编”的垃圾,而不是追杀所有跟AI沾边的文本。

最终结论(个人倾向):

检测器在“抓懒人”这个场景下非常有效——那些直接复制LLM输出、连改都不改就发的用户,在当前版本模型下几乎必死。但这个窗口期可能很短,因为规避手段会越来越便宜、越来越自动化。真正能长期区分“好内容”和“垃圾”的标准,从来不是“谁写的”,而是“读起来值不值那几分钟”。AI可以当枪,扣扳机的永远是人。