降AI味
定位一句话:AI 味多半不出在某个词上,出在文字里没有具体的人、具体的事、具体的判断。 删套话只是第一步,还要换上作者自己的细节和立场,读者才会觉得是一个人在跟他说话。
何时用:一段中文读起来空、顺、平,像在哪儿都见过;用户说「AI味太重」「去AI腔」「改得像我写的」。本技能管写作质量。如果目的是让作业或投稿躲过学校、期刊、单位对 AI 使用的规定,不接,理由见最后一节。
先判断:问题在「腔」还是在「空」
动笔前先弄清四件事,答不上来就问用户,别猜:
- 文体和场合。 公文、论文、产品说明、公众号、朋友圈、求职信、讲话稿,各有各的规矩。体裁惯例不算 AI 味:通知末尾的「特此通知」、论文结论开头的「综上所述」、说明书里的并列条目,都该留着。
- 读者和用途。 谁读?读完要他做什么,批准、购买、转发,还是记住一件事?
- 作者的声音。 要一段作者自己写的旧文字或聊天记录,照着它的用词习惯和句子长短来改。
- 腔还是空。 先把套话全部划掉,看剩下什么。剩下的都是实话,是「腔」的问题,改写能解决;剩下没几句,是「空」的问题,缺的是素材,得先向作者要细节,改写救不了。
检查点:能用一句话说出「写给谁、读完要他做什么、作者平时怎么说话」,再往下走。
AI 腔识别清单(12 条,附改写前后)
判断标准只有两条:删掉它,意思少没少;换一个题目,它还成不成立。 意思没少、换题照样成立,就是套话。清单里的词不是禁词,全文用一次「总之」没问题,问题在密度和空转。示例里「后」的细节都假定来自作者本人,实际改写时没有素材就写【待补:……】,不许编。
- 空泛开头 第一句放到任何题目下都成立,如「在当今……的时代」「随着……的发展」。
- 前:在当今快节奏的社会中,时间管理变得越来越重要。
- 后:我每天下午三点以后基本做不成正事,消息一条接一条。
- 空泛总结句 段尾把上文换个说法再说一遍,删掉后段落什么也没少。
- 前:……由此可见,沟通在团队协作中发挥着重要作用。
- 后:整句删掉。上文讲清楚的事,不用再总结一遍。
- 「值得注意的是」「总而言之」类套话 过渡词后面的内容并不比别的句子更值得注意,后面也没有真正在「总」什么。
- 前:值得注意的是,该方案也存在一定的局限性。总而言之,我们要辩证地看待这个问题。
- 后:这个方案有个硬伤,样本不到 30 个时,每次跑出来的结果都不一样。
- 三段式排比 三个同结构短语连用,作者却只能为其中一个举出实例。
- 前:这次改版提升了效率,优化了体验,降低了成本。
- 后:这次改版最实在的变化是快,报销从提交到到账由五天缩到两天。体验和成本还没有数据,先不写。
- 过度对称 利弊各一句,每段都是「观点、解释、举例、小结」,读者看不出作者站哪边。
- 前:一方面,远程办公提高了灵活性;另一方面,远程办公也带来了沟通挑战。
- 后:远程办公对我们组利大于弊。真正麻烦的只有找人,以前转身就能问的事,现在要等回消息,有时一等半天。
- 形容词堆叠 「非常」「极其」「令人难忘」连着用,却没有一个让读者看得见的细节。
- 前:这是一次非常精彩、极其丰富、令人难忘的交流活动。
- 后:三天听了九场分享,我记得最清楚的是李老师当场拆了自己一个失败的实验。
- 万能结尾升华 最后一句贴到任何文章末尾都成立,如「让我们携手……」「相信……一定会越来越好」。
- 前:让我们携手并进,共同开创更加美好的明天!
- 后:下周三前我把新排班表发到群里,有冲突的直接找我改。
- 无来源的「研究表明」 「研究表明」「数据显示」「专家指出」后面没有谁、哪年、多少样本。
- 前:研究表明,超过七成的年轻人更喜欢线上购物。
- 后(有出处):〔机构〕〔年份〕对〔样本量〕名〔人群〕的问卷显示……,并附上链接。
- 后(没出处):我问了身边二十来个同学,网购比逛店多的占一大半。这只是我的观察,不是统计。
- 滥用破折号 一段里两个以上「——」,多数只是把逗号拉长了。
- 前:效率——这是我们一直追求的目标——也是我们最大的短板。
- 后:我们一直想提效率,也一直卡在这儿。
- 冒号标题 每段开头都是加粗短语加冒号,正文像提纲,句子之间没有连接。
- 前:降本增效: 通过流程优化,实现成本的有效降低。
- 后:去年换了报销系统,每单人工核对从 10 分钟降到 3 分钟。
- 「不是……而是……」与自问自答 先立一个没人提过的靶子再推倒,或者「为什么这么说?因为……」。
- 前:这不是一个技术问题,而是一个认知问题。为什么这么说?因为……
- 后:卡住我们的是没人拍板要不要换供应商。技术上,两周就能迁完。
- 大词叠保险话 「赋能」「抓手」「闭环」「全方位」再加上「在一定程度上」,读完不知道谁做了什么。
- 前:以数字化为抓手,全方位赋能门店运营,在一定程度上提升了服务质量。
- 后:门店把纸质签收单换成扫码签收,司机不用再跑回站点交单。
改写流程:六步
开始前先和用户定改写强度。轻:只删套话、拆冒号标题,结构和措辞基本不动,适合正式文件和已定稿的材料。中:再加上换细节、调句长,段落顺序不动,多数情况用这一档。重:按作者口吻重写,可以调结构,只在作者给了足够素材时做。
- 定读者和语气。 在书面正式(公文、论文)、书面平实(邮件、报告、说明)、口语亲近(公众号、朋友圈、发言)三档里选一档,全篇不换档。从作者的旧文字里记下三样:常用的词、偏长句还是短句、怎么称呼读者。
- 删套话。 按清单逐条标出来,先删「删掉意思不少」的:开头铺垫、过渡套话、段尾总结、结尾升华。删完通读一遍,意思没少就对了。
- 换具体细节。 每个抽象判断后面追问一句「比如呢」,答案要落到人、时间、数量、原话、场景之一。细节只能来自作者,用下面五个问题一次问完;实在没有,就写【待补:需要一个……的例子】。
- 让句长错落。 长句拆开,碎句合并,一段里有长有短,段落长度也别都一样。读出声来,换气别扭的地方就是要改的地方。
- 保留作者自己的判断。 把「有利有弊」「辩证看待」换成作者真实的立场,允许不对称,允许偏心,允许写「我不确定」。作者没表态的地方去问他,不替他站队。
- 回读对照。 跑一遍下面的脚本看前后数字,再把改动对照表交给作者核对事实。数字只作参考,最后以读出声顺不顺、像不像作者本人为准。
向作者要细节的五个问题:
1 这件事最近一次发生是什么时候?当时具体是什么情形?
2 能给一个数吗?多少人、多长时间、多少钱、比以前多了多少?
3 有没有谁说过的原话,或者一个你记得很清楚的场景?
4 如果只能选一边,你站哪边?为什么?
5 读者读完这段,你希望他做什么?
整段示例,属于「重」档。作者提供了自己的情况(三个月没读完书、通勤四十分钟、试过飞行模式),所以能改成第一人称的叙述。两段分别存成 draft.txt 和 revised.txt,可以拿来试脚本。
改写前(draft.txt):
在当今信息爆炸的时代,阅读习惯正在发生深刻的变化。随着短视频的普及,越来越多的人习惯了碎片化的信息获取方式。值得注意的是,这种变化既带来了机遇,也带来了挑战。
一方面,碎片化阅读让知识获取更加便捷、高效、灵活;另一方面,它也在一定程度上削弱了人们深度思考的能力。研究表明,长期碎片化阅读会导致注意力下降。
**核心观点:** 阅读不是一种消遣,而是一种能力。我们要以更开放的心态、更坚定的信念、更务实的行动,重建深度阅读的习惯。
总而言之,深度阅读至关重要。让我们携手并进,共同开创全民阅读的美好未来!
改写后(revised.txt):
我已经三个月没读完一本书了。每天通勤有四十分钟,全刷了短视频。
上周想重读一本以前很喜欢的小说,翻了二十页就去看手机,前后看了六次。我开始怀疑自己是不是读不进长东西了。
后来试了个笨办法:上地铁就把手机调成飞行模式,只带纸书。第一天读了八页,第四天读了三十多页。
能坚持多久我不知道。但这周,我读完了一本。
自检脚本:套话与句长分布
只用 python3 标准库。统计六类套话的命中次数和每千字密度、句长分布(平均、中位、变异系数、相邻两句长度接近的比例)、破折号、冒号小标题、顿号三连和排比候选。它量的是表面信号,不是 AI 检测器:人写的文字也可能命中很多,数字低也证明不了任何事。提示里的阈值(变异系数低于 0.35、破折号每千字超过 3 处、冒号小标题 3 行以上)是经验值,只供参考。词表按自己的领域增删,PATTERNS 里一类一行,写的是正则。
# 保存为 ai_tone_check.py;只用标准库。统计的是表面信号,不是「AI 检测器」
import re
import statistics
import sys
PATTERNS = {
"空泛开头": r"在当今[^,。]{0,8}|随着[^,。]{1,15}的(?:发展|普及|进步|到来)|在[^,。]{1,15}的(?:大)?背景下|众所周知",
"过渡套话": r"值得注意的是|需要指出的是|不难看出|由此可见|与此同时|事实上|首先|其次|此外",
"总结升华": r"总而言之|总的来说|综上所述|总之|让我们|携手|共同(?:开创|创造|书写|迎接)|未来可期|美好未来",
"无源引用": r"研究(?:表明|显示|发现)|数据(?:表明|显示)|专家(?:指出|认为)|有调查显示",
"空洞大词": r"赋能|抓手|闭环|打造|全方位|多维度|深度融合|至关重要|不可或缺|举足轻重",
"对举保险": r"不是[^。!?]{1,20}而是|不仅[^。!?]{1,20}(?:而且|更|还)|在一定程度上|某种意义上|一方面",
}
# 冒号小标题:加粗标签、列表项标签、行首 6 字以内的标签
HEAD = (r"(?m)^\s*(?:[-*+]\s+)?\*\*[^*\n]{1,12}(?:[::]\*\*|\*\*[::])"
r"|^\s*(?:[-*+]|\d+[.、])\s*[^\s::,。*]{1,8}[::]|^[^\s::,。*#]{1,6}[::]")
def main():
text = open(sys.argv[1], encoding="utf-8").read() if len(sys.argv) > 1 else sys.stdin.read()
size = len(re.sub(r"\s", "", text))
per_k = lambda n: n * 1000 / max(size, 1)
print(f"正文 {size} 字(不含空白)\n\n[套话] 次数 每千字 命中")
found = False
for name, pat in PATTERNS.items():
hits = re.findall(pat, text)
if hits:
detail = "、".join(f"{h}×{hits.count(h)}" for h in dict.fromkeys(hits))
print(f" {name} {len(hits):>4} {per_k(len(hits)):>6.1f} {detail[:50]}")
found = True
if not found:
print(" (无)")
sents = [s for s in (re.sub(r"\s", "", x) for x in re.split(r"[。!?!?;;…\n]+", text)) if len(s) >= 2]
lens = [len(s) for s in sents]
cv = 0.0
if len(lens) >= 2:
mean = statistics.mean(lens)
cv = statistics.pstdev(lens) / mean
near = sum(abs(a - b) <= 3 for a, b in zip(lens, lens[1:])) / (len(lens) - 1)
print(f"\n[句长] {len(lens)} 句 平均 {mean:.1f} 中位 {statistics.median(lens):.0f} "
f"最短 {min(lens)} 最长 {max(lens)} 变异系数 {cv:.2f} 相邻两句长度差≤3字 {near:.0%}")
for lo, hi in ((1, 10), (11, 20), (21, 30), (31, 45), (46, 999)):
n = sum(lo <= x <= hi for x in lens)
print(f" {lo:>2}-{hi if hi < 999 else '':<3}字 {'█' * n} {n}")
dash = text.count("——")
heads = len(re.findall(HEAD, text))
stacks = re.findall(r"(?:[^\s,。、;:!?]{1,4}、){2,}[^\s,。、;:!?]{1,4}", text)
print(f"\n[其他] 破折号 {dash} 处({per_k(dash):.1f}/千字) 冒号小标题 {heads} 行 "
f"加粗 {text.count('**') // 2} 处 顿号三连 {len(stacks)} 处 {' / '.join(stacks[:3])}".rstrip())
rows = []
for s in re.split(r"[。!?!?\n]+", text):
parts = [p.strip() for p in re.split(r"[,、;,;]", s) if p.strip()]
for a, b, c in zip(parts, parts[1:], parts[2:]):
if len(b) == len(c) >= 3 and any(x == y == z for x, y, z in zip(a[-len(b):], b, c)):
rows.append(f"{a},{b},{c}")
break
if rows:
print("\n[排比候选](三个并列小句,逐条人工判断)")
for r in rows[:5]:
print(" ·", r)
tips = []
if len(lens) >= 5 and cv < 0.35:
tips.append("句长偏整齐:拆一两个长句,把几个短句并成一句")
if per_k(dash) > 3:
tips.append("破折号偏多:多数可以换成逗号或句号")
if heads >= 3:
tips.append("冒号小标题多:想想哪些可以写成完整句子")
if tips:
print("\n[提示](经验阈值,只供参考)\n " + "\n ".join(tips))
if __name__ == "__main__":
main()
python3 ai_tone_check.py draft.txt
python3 ai_tone_check.py revised.txt
本机实测上面两段:改写前套话 14 处(空泛开头 2、过渡 1、总结升华 5、无源引用 1、大词 1、对举保险 4),10 句,变异系数 0.22,另有排比候选 1 条、顿号三连 1 处;改写后套话 0 处,8 句,变异系数 0.44。按行断开的诗歌、歌词、对话记录不适合看句长统计。
最常见的错误
- 拿编造的细节换掉空话。 这是最严重的错。「后」里的数字、人名、经历必须来自作者,没有就留【待补】。
- 只换同义词。 「总而言之」改成「总的来看」,「赋能」改成「助力」,换汤不换药。
- 为了像人故意加错别字、口头禅、表情和网络梗。 这不是降 AI 味,是降质量。
- 矫枉过正。 句子全砍成短句,成了另一种单调;或者把正式文体改成口水话。
- 删掉了体裁要求的格式语。 公文结构语、论文摘要的固定格式、合同条款的措辞,都不在本技能的删除范围。
- 改掉作者的立场。 把作者的「我倾向 A」改成改写者觉得对的 B,或者把作者的「我不确定」改得斩钉截铁。
- 把「AI 检测分数」当目标。 这类分数不是写作质量的标准,改写只对读者负责。
输出契约
- 改写稿全文,按事先定好的强度(轻、中、重)改,开头注明用的是哪一档。
- 改动对照表,三列:原句、改为、命中清单第几条;只列改动大的句子,最多 15 条。
- 【待补】清单,每条写清需要作者补什么,例如「第 2 段需要一个具体数字:改版前报销平均几天到账」。
- 前后数字(跑了脚本时附上):套话次数、变异系数,改写前后各一行。
- 不动的东西:事实、数据、引文、专有名词原样保留。发现疑似错误,单独列出来提醒,不自行改。
边界与不做什么
- 本技能面向写作质量。不用于规避学校、期刊或单位对 AI 使用的规定;机构要求披露 AI 使用时,应如实披露,改得再像人写的,也改变不了用过 AI 这件事。用户明说目的是让作业、论文或投稿躲过 AI 检测、瞒过老师或编辑时,不提供改写,说明原因即可。
- 不代写要求本人独立完成的作业、考试答案和申请文书,可以指出问题、示范一两句,整篇要作者自己完成。
- 不承诺、也不去测试任何「AI 检测」工具的结果;脚本数字只反映文风信号,证明不了文字是谁写的。
- 不编细节、数据、引文和经历,不改原文的事实主张;要改立场,先问作者。
- 学术诚信、署名、AI 使用披露的具体要求,以任课老师、导师、期刊编辑部或单位的书面规定为准,拿不准就去问他们。
