把 AI 生成的文本,在概率层重新生成一遍,使其统计特征接近人类写作——而不是在文字表面做任何手脚。
根本区别:
- 现有工具:生成文本 → 换词/打乱句子 → 输出(文本层,无效)
- 本产品:控制生成过程本身 → 每个词的选取概率被干预 → 输出(概率层,有效)
用户输入 AI 文本
↓
【第一步】理解原文
提取原文的核心命题(论点)、关键实体(人名/数字/专有名词)
↓
【第二步】概率层重新生成
用语言模型重写,但干预每个词的选取概率
使输出的统计特征偏离"AI典型模式",接近人类写作分布
↓
【第三步】语义验证
检查:核心命题有没有被丢掉?有没有被反转?
↓
【第四步】质量控制
检查两件事:① 检测器能不能识别出来? ② 文章写得好不好?
↓
【第五步】连贯性修复(如需要)
对段落衔接有问题的地方,重新生成(不是手动改词)
↓
输出最终文本 + 质量报告
AI 模型生成文字时,每一步都从一张"概率表"里选词。默认行为是总选概率最高的词,导致输出规律、可预测——这正是检测器抓到的特征。
我们做的是:在选词的那一刻,主动调整这张概率表。
具体方法是Mirostat v2 采样:
- 设定一个"目标困惑度"(对应人类写作区间)
- 生成过程中实时监控,自动调整每步选词的随机程度
- 高概率词被压制,低概率但语义合理的词被激活
- 不同段落使用不同的参数设置,制造自然的节奏起伏
效果: 输出文本的统计特征(困惑度、词汇分布、句间方差)全部落在人类写作的正常区间内。
重写之后,必须确保核心意思没有丢失或被篡改。分三层检查:
用嵌入模型(BGE-M3)把原文和输出各转成一个向量,计算相似度。
- 相似度 ≥ 80%:整体语义没有大幅偏离,继续
- 相似度 < 80%:整体跑题,直接打回重写
针对第一步提取的每一条核心命题,逐条检验:
| 检验结果 | 含义 | 处置 |
|---|---|---|
| 命题被保留 | 输出蕴含这条命题 | 通过 |
| 命题被反转 | "不支持"变成"支持"等极性翻转 | 立即打回重写 |
| 命题被遗漏 | 关键论点消失了 | 遗漏≥2条时打回重写 |
工具:NLI(自然语言推理)模型,专门用于判断两句话之间的蕴含关系。
用 BERTScore 做词汇级别的覆盖度检查,作为辅助参考,不单独触发重写。
只回答一个问题:这篇文章的统计特征像不像人类写的?
| 指标 | 含义 | 目标区间 |
|---|---|---|
| 困惑度(PPL) | 文本的可预测程度 | 25~80(AI文本通常<15) |
| Burstiness | 句子长度/节奏的起伏 | 标准差 ≥ 10(人类写作有自然波动) |
| 词汇多样性(TTR) | 词汇丰富程度 | ≥ 45%(AI文本词汇重复率高) |
只回答一个问题:这篇文章写得好不好?
先做规则快筛(毫秒级):
- 有没有重复句子
- 句子长度是否异常(过长或过短比例过高)
- 有没有标点符号错误
再用 G-Eval 评分(复用已有的语言模型,不额外消耗资源):
| 维度 | 权重 | 评判标准 |
|---|---|---|
| 忠实度 | 35% | 有没有凭空捏造内容 |
| 连贯性 | 25% | 段落逻辑是否通顺 |
| 流畅性 | 25% | 语言是否自然,有没有语法错误 |
| 可读性 | 15% | 结构是否清晰,用词是否恰当 |
综合得分 ≥ 3.5(满分5分):质量合格 综合得分 < 3.0:触发重新生成
三种失败对应三种不同的处理策略:
| 失败类型 | 原因 | 处理方式 |
|---|---|---|
| 语义验证失败 | 命题被丢或被反转 | 降低随机程度,在提示词中强调失败的命题 |
| 检测规避失败 | 统计特征还是太像AI | 调高重复惩罚,增大句式多样性 |
| 语言质量失败 | 文章写得不好 | 加强写作质量要求指令,采样参数不变 |
底线: 任何情况下,语言质量综合分不得低于 3.0。不存在为了通过检测而牺牲文章质量的路径。
上限: 最多重试3次。超过后返回3次中质量最高的版本,并标注提示。
| 组件 | 选用方案 | 理由 |
|---|---|---|
| 核心生成模型 | Qwen2.5-7B(中文)/ Llama3.1-8B(英文) | 7B级模型个人GPU可跑,中文质量最优 |
| 推理框架 | llama.cpp | 唯一支持Mirostat采样的轻量本地框架 |
| 语义嵌入 | BAAI/bge-m3 | 中英文通用,精度好,放CPU上跑 |
| NLI验证 | nli-deberta-v3-xsmall | 仅70MB,CPU可实时运行,专门用于命题蕴含判断 |
| 质量评分 | G-Eval(复用主模型) | 零额外内存,确定性输出,结果可复现 |
- 显卡:RTX 3060 12GB(消费级)
- 内存:16GB RAM
- 存储:50GB(模型文件约30GB)
| 占用项 | 显存 |
|---|---|
| Qwen2.5-7B 量化模型 | 6.5 GB |
| BERTScore 辅助模型 | 0.8 GB |
| 系统驱动开销 | 0.75 GB |
| 安全缓冲 | 约 4 GB |
BGE-M3 和 NLI 模型强制在 CPU 上运行,不占显存。
完全可用,质量与 GPU 方案相同,速度较慢:
| CPU | 处理1000词文本 |
|---|---|
| i7-12代 / i9-13代 | 约 2.5~4 分钟 |
| Ryzen 7 系列 | 约 3.5~4.5 分钟 |
CPU模式下改为异步处理:提交后台排队,完成后通知,不需要等待。
| 使用场景 | 每次费用 |
|---|---|
| 本地GPU自用 | ≈ 0.002 元(仅电费) |
| 云GPU提供服务 | ≈ 0.20 元 |
| 调用第三方API替代 | ≈ 0.004 元 |
阶段一:验证核心假设 搭建环境,跑通最简版本,验证 Mirostat 采样确实能降低 AI 检测率。
阶段二:语义约束系统 加入命题提取和 NLI 三层验证,确保重写后核心意思不丢失。
阶段三:质量控制双轨 接入 G-Eval 和检测规避指标,两组指标职能完全分离。
阶段四:连贯性修复与重试 实现段落级概率层修复,以及分维度重试调度策略。
阶段五:CPU-only 适配 异步批处理 UI,让无 GPU 用户完整可用。
阶段六:集成测试 验证检测率、语义保真度、内存稳定性,记录各硬件配置下的实际性能数据。
用本地语言模型对 AI 文本进行概率层重生成,通过 Mirostat 采样主动干预每个词的选取概率,使输出的统计特征接近人类写作;同时通过 NLI 命题验证保证语义不漂移、G-Eval 保证文章质量,整个过程不训练模型,不依赖重型基础设施,个人开发者可在消费级硬件上完整运行。