Skip to content

Latest commit

 

History

History
205 lines (144 loc) · 7.39 KB

File metadata and controls

205 lines (144 loc) · 7.39 KB

ScholAI 技术架构文档


一、我们在做什么

把 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(复用主模型) 零额外内存,确定性输出,结果可复现

八、硬件要求与成本

推荐配置(GPU)

  • 显卡:RTX 3060 12GB(消费级)
  • 内存:16GB RAM
  • 存储:50GB(模型文件约30GB)

显存分配(RTX 3060 12GB)

占用项 显存
Qwen2.5-7B 量化模型 6.5 GB
BERTScore 辅助模型 0.8 GB
系统驱动开销 0.75 GB
安全缓冲 约 4 GB

BGE-M3 和 NLI 模型强制在 CPU 上运行,不占显存。

无 GPU 方案(CPU-only)

完全可用,质量与 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 保证文章质量,整个过程不训练模型,不依赖重型基础设施,个人开发者可在消费级硬件上完整运行。