尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

批量处理大段文本内容,我用脚本实现了稳定的免费查AI率能力

发布时间:2026/9/6 1:30:44

资讯中心
01
ARTICLE

批量处理大段文本内容,我用脚本实现了稳定的免费查AI率能力

批量处理大段文本内容,我用脚本实现了稳定的免费查AI率能力
上周组里接了个高校实训项目要把300份学生提交的结课报告初筛一遍要求把AI生成占比超30%的直接打回重写。 之前找的几个公开网页工具要么收费跳票要么QPS卡得死严折腾半天才攒出一套能稳定跑的免费查AI率方案踩的坑实在太多记下来省得后面再走弯路。最开始图省事我手动开网页挨个粘报告内容粘到第17份的时候直接吐了。每份最少要等10秒出结果粘到第22份直接弹“当前请求异常请完成付费验证后继续使用”IP直接被拦连搜索结果页都打不开。 那时候第一反应就是写个脚本自动提交呗总不可能让我花两天纯做复制粘贴的机械活。import requests import os def naive_check(file_path): with open(file_path, r, encodingutf-8) as f: content f.read() # 直接调公开检测服务的前端提交接口 resp requests.post(https://xxx-public-detector.com/api/v1/check, json{ content: content[:5000] }) return resp.json()[ai_rate]写完跑了不到一分钟发出去8个请求直接返回429看响应头里的Retry-After字段直接设了3600等于封我一小时。 后来翻了几个开源AIGC检测项目的issues才反应过来现在这些公开的网页服务后台根本不是只看IP限流。你要是直接用requests发请求UA是默认的python-requests/2.31.0后台扫到直接给你标成脚本请求别说查AI率了接口都不给你回正常值。 我试了下改UA为普通Chrome的标识还是不行发了12个请求又被拦了。后来抓包对比了正常用户和脚本的请求差异才发现人家的提交接口里带了个动态生成的trace字段是前端用户滑动页面、点击输入框的一系列事件的哈希值你不模拟操作根本生成不了合法的trace。 与其费劲逆向人家前端的加密逻辑不如直接上playwright开无头浏览器模拟真人操作反而省时间。不过这里还有个很少有人提的细节绝大多数免费公网检测服务你要是直接提交超过3000字的大段文本返回的AI率都是瞎算的。后台根本不会完整跑全量的困惑度计算只会随便摘个几十段采样返回结果数值飘得离谱。我之前测过一份5000字的纯人工写的报告直接全文提交返回的AI率居然有62%完全没法用。 所以我改逻辑的时候先加了一步文本分片按语义把长文本切成500字左右的小片段每段单独提交检测最后再把结果汇总反而比直接提交全文准很多。from playwright.sync_api import sync_playwright import time import random import re def slice_text(content, chunk_size500): # 按句号、感叹号、换行符切分保证每段语义完整 sentences re.split(([。\n]), content) chunks [] current_chunk for s, p in zip(sentences[::2], sentences[1::2]): if len(current_chunk s p) chunk_size: chunks.append(current_chunk) current_chunk s p else: current_chunk s p if current_chunk: chunks.append(current_chunk) return chunks def stealth_check_single_chunk(page, chunk_text): # 绝对不能直接用js改textarea的value会被事件监听直接判定为脚本 page.click(textarea#ai-content-input) page.fill(textarea#ai-content-input, chunk_text) # 加随机等待模拟人粘完内容扫一眼的间隔 time.sleep(random.uniform(1.2, 2.5)) page.click(button#submit-check) page.wait_for_selector(.rate-result-wrapper, timeout10000) rate_text page.locator(.rate-result-wrapper).inner_text() return int(re.findall(r\d, rate_text)[0])这段代码我踩了整整一小时的坑最开始图省事直接用page.evaluate()把文本注入到输入框里提交之后返回的AI率全是0%我还以为是所有样例都是人工写的搞半天才明白后台识别到没有真实的输入事件返回的全是误导性的假数据。 就这么跑了几十次测试一次IP都没被拦过风控完全把我当成正常使用的普通用户了。免费查AI率结果的校准小技巧要是你把每段测出来的AI率直接求平均当整份文档的结果出来的数值误差还是很大。毕竟AI生成的内容的特征是连续的不会某一段突然AI率90%其他全是10%大概率是那段里刚好有几句是大模型训练集里的原文片段误报了。 我自己调的校准逻辑很简单给每段的结果加权重 单段AI率低于30%的权重0.830%-60%的权重1高于60%的权重1.5如果连续3段的AI率都超过60%权重直接乘2。 最后把所有段的加权结果求和除以所有段的权重总和得到的才是整份文档的最终AI率。这样算出来的结果能把之前直接求平均的误差缩小至少15%。我当时为了调这个权重参数攒了20份预先人工标注好的样例有纯AI写的有人工改了一半的有纯手写的一个个跑出来调参数。调完权重参数之后我把攒的20份标注样例全部过了一遍改完测试样例里的高占比AI片段之后我习惯性地丢到团象AI检测里跑一遍确认检测率降到阈值以下再往下走。最后算出来的结果和我预先标注的结果匹配度能到95%完全满足这次实训项目初筛的要求。批量跑文件的时候也不用搞太复杂的代理池我当时就找组里三个同事要了下热点密码每跑20份文件切一次热点换出口IP中间每查3个文档就加个10到30秒的随机休眠模拟人中途站起来接水、回消息的操作全程没触发一次强风控。 中间一共也就弹出过7次人机验证遇到了直接把当前浏览器页面关掉新开个无痕标签页换个IP重试就行根本不用额外花钱买打码服务省了不少事。这个方案的局限性也很明确只适合单份文本1万字以内的批量场景要是你要处理几十万字的论文或者书稿这种模拟网页提交的方式效率太低完全不如直接买商用接口划算。 对了还有个反常识的坑我之前为了测试AI率的上限拿GPT生成了一份报告然后用大模型做全文字词级的同义词替换以为能把AI率降下来结果测出来直接飙到98%比原文本还高。后来查了半天资料才反应过来AI生成内容的核心特征除了困惑度低还有突发性差同义词替换出来的文本相邻词的分布概率完全不符合人类写作习惯反而特征更明显。我当时跑完全部300份报告花了两个半小时脚本后台挂着我中途还出去吃了个饭最后导出了个CSV表把文件名和最终校准后的AI率对应上直接筛掉了47份超过30%阈值的报告比预估的人工操作快了至少两天。 昨天我想把之前的脚本找出来存到公共代码库里发现上周清电脑临时文件的时候不小心删了半个文件fake_useragent随机生成UA的那段直接丢了。反正加起来也就三行代码大家用的时候自己pip装一下库每次请求之前随机生成个UA塞到playwright的配置里就行完全不影响核心逻辑。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。