AigcCheck · AI 味检测

粘一段中文进去 → 得到一个「有多像 AI 写的」评分、一句话结论,以及在原文里直接标出来的可疑片段。 两条通道:本地初筛(纯 JS,边打字边算,不联网、不限量)与模型判读(看语义,有限试用)。

它测的是文本里残留了多少「未经修改的大模型原样输出」特征,不是「是不是 AI 写的」的判决书。 分数是概率证据,不能当溯源证明;与知网 / 维普等平台的 AIGC 率也没有直接相关性。
这是有限试用。模型判读走的是作者本人的 Claude 订阅额度,不是无限的: 每个 IP 每天 8 次、单次输入 4000 字符、全站每天 300 次,用完当天不再放行。 想不受限地跑,请在下面填你自己的 API key(浏览器直连模型厂商,不经过本站服务器)。
请不要把未发表的稿子粘进来 —— 走本站通道等于把正文交给第三方模型;要正文一个字都不出本机,用文末说的那个本机 app。

1 · 它替你解决什么

场景没有它的时候用它之后
写完一段,想知道「AI 味重不重」 凭感觉,或者整篇粘进某个来路不明的检测站 粘进来先跑本地初筛:不联网、不限量、秒出,先看表面特征够不够干净
知道 AI 味重,但不知道改哪句 只有一个总分,只能整篇重写 模型逐条给出可疑片段 + 为什么可疑,并在原文里高亮,鼠标悬停看理由
不想给任何人留下正文 在线检测站默认留库 本地初筛在你的浏览器里算完;要更严格就用本机 app(正文不出本机)
额度用完了 / 不想排队 只能等 填自己的 API key,浏览器直连模型厂商,不受本站额度限制

2 · 三个分数不要混着看

分数量程看的是什么成本
本地初筛分(本页)0–100 只看表面特征:句长方差、连接词密度、四字格密度、段落整齐度、套话词密度、标点多样度。不理解语义,一段有意写得工整的人类公文一样会被打高分 零,纯 JS 本地算
模型判读分(本页)0–100 看语义:论述套路、观点空转、比喻陈旧、信息密度、有没有具体到不可替换的细节 占额度,每次约 10–30 秒
采样差异度 d(本机 app)约 −4 ~ +4 统计量,不是百分数:文本用词有多贴近打分模型的最高概率选择(原理见第 5 节) 本机推理,分钟级

三者不可换算。本地初筛分高只说明「文风整齐得可疑」,请以模型判读为准;两者都不能替代人读。

3 · 现在就试

待检文本
0 / 4000 字符

A · 本地初筛不联网 · 不限量 · 实时

下面这一格只看表面特征,不看语义;它存在的意义是让没有额度的人也能先拿到点东西, 并且告诉你「哪几个可量化的地方长得太整齐了」。判定语义要不要重写,只能靠第 B 格的模型。

0 干净3060100 整齐得可疑

B · 模型判读看语义 · 占额度

还没跑。上面点「调用模型判读」。

C · 原文高亮

红底 = 模型标出的可疑片段(悬停看理由) 虚线 = 本地词表命中的连接词 / 套话词
上面粘文本后,这里显示带标注的原文。
用我自己的 API key(可选,绕过本站额度)

填了 key 之后,请求由你的浏览器直接发给模型厂商api.anthropic.com), 这个 key 与你的正文都不会发到本站服务器,本站也没有任何日志能看到它。 默认只存在内存里,刷新即失效;勾了「记在本浏览器」才会写进本机 localStorage,点「清除 key」立即抹掉。 这条通道不受每 IP 8 次 / 全站 300 次的限制,花的是你自己的额度。

4 · 本地初筛到底在数什么

特征怎么算为什么它有信号权重
句长变异系数各句字数的标准差 ÷ 均值人写的句子忽长忽短,模型直出的句子长度扎堆。越低越可疑24
连接词密度「首先 / 其次 / 综上 / 值得注意的是」等命中数 ÷ 句数模型爱把论述骨架显式说出来,人写常省略20
套话词密度「赋能 / 助力 / 深刻 / 至关重要」等命中数 ÷ 百字高频抽象词是最省事的填充物24
段落长度整齐度1 − 段落字数的变异系数(需 ≥3 段)每段都差不多长 = 按模板生成的痕迹14
四字格密度内置四字词表命中数 ÷ 百字成语堆砌常见于「显得有文采」的直出文本12
标点多样度破折号 / 省略号 / 问号 / 感叹号 / 括号 ÷ 百字人写有停顿、犹豫、插话;直出文本标点极其规矩。越低越可疑6

表格行 / 数字密集行(判据与本机引擎的 is_tabular_line() 同一套)在算之前会被剔掉 —— 数字序列的这些统计量没有 AIGC 含义,留着只会稀释分数。剔了几行会在上面如实报给你。 段落或句子太少时对应特征标 n/a 并把权重摊给其余特征,不拿默认值凑数

5 · 本机 app 的打分原理

本页的两个分数都是「够用」的近似。真正的统计判据在本机 app 里:Fast-DetectGPT 的解析式采样差异度 —— 用一个开源基座模型(Qwen2.5)对文本做一次前向,在每个 token 位置拿到三个量,合成一个标准化的差值:

d= i=1n i i=1n μi i=1n σi2
符号是什么
d这段文本的采样差异度,也就是 app 界面上那个总分
ii 个位置上,实际出现的那个词的对数概率 log p
μi同一位置,模型自己采样的对数概率期望 E[log p](对整个词表求和)
σi2同一位置该期望的方差,用来把差值标准化,长短文本才可比
n参与打分的 token 数(每块首 token 没有预测上下文,不算)

拿三个 token 的最小例子手算一遍。假设某段实际用词的对数概率是 ℓ = (−0.20, −0.35, −0.15),同位置模型自采样期望是 μ = (−1.40, −1.60, −1.30),方差 σ² = (0.50, 0.80, 0.45):

Σℓ  = -0.20 + -0.35 + -0.15 = -0.70
Σμ  = -1.40 + -1.60 + -1.30 = -4.30
分子 = -0.70 - (-4.30)       =  3.60
Σσ² =  0.50 +  0.80 +  0.45  =  1.75
分母 = sqrt(1.75)            =  1.3229
d   =  3.60 / 1.3229         =  2.72   → 落在 ≥1.5 档 → 「强 AI 指纹」

读法就写在数上:实际用词的概率(−0.70)远高于模型随手采样的平均水平(−4.30), 说明这段话句句都挑在模型最想说的词上 —— 这正是未经修改的大模型输出的特征。 人写的文字会夹着低概率的突兀选择,分子随之缩小甚至变负: 把上面的 ℓ 换成 (−3.10, −0.90, −4.20),分子变成 −8.20 −(−4.30) = −3.90,除以同一个 1.3229, d = −2.95,落进「未见明显 AI 指纹」。 相比原版 DetectGPT 要反复扰动文本重打分,这个解析形式只需一次前向, 所以一份长文档在个人电脑上是分钟级而不是小时级。

判定刻度(本机 app 用的那把尺,试着输个数)

< 0.7
未见明显 AI 指纹
≠ 证明是人写的
0.7 ~ 1.5
可疑
建议人工复核
≥ 1.5
强 AI 指纹
原样输出特征明显

这段判定逻辑是本机引擎 verdict() 的离线复刻,阈值同源。

这组阈值是对中文公文 / 报告体标定出来的(对照样本:AI 直出公文段 2.40, 人写的调查报告段 0.34 与 −2.49)。换文体、换语种,刻度就不再可信。

6 · 已知盲区(刻意写在这里)

7 · 在线版与本机版的分工

这两个不是同一件东西的两种打包,是两种隐私成本

本页(在线)本机 app
正文去哪了本地初筛留在浏览器;模型判读会把正文发给模型厂商(走本站通道时先经过本站中转)一个字都不出本机,权重下载到本地,推理在本地 CPU / GPU 跑
装不装打开网页就能用要装 app + 下模型权重(约 4.7 GB 内存峰值)
额度每 IP 每天 8 次;自带 key 则不限不限,自己的电脑自己烧
能吃什么粘进来的纯文本整份 .docx / .md / .txt,出块级热力条与句级修改优先级,可导出 HTML 报告
适合谁随手试一段、判断值不值得装本机版要检自己没发表的论文 / 报告 —— 这种稿子不该出现在任何在线框里,包括本页
本页两段「合成样例」文本以及第 5 节手算例子里的全部数字,都是为演示现编的合成数据, 不对应任何真实稿件、真实检测结果或任何客户材料。 本地初筛与判定刻度是本机引擎规则的离线复刻,在你的浏览器里算完,不外发。 模型判读会把你粘进来的文本发出去:走本站通道时经本站中转到模型厂商,填了自己的 key 时由浏览器直连厂商、不经过本站。 真实系统是一个装在本机的 macOS app(SwiftUI 壳 + Python 引擎),本页不提供下载。