# 第六章 对照实验:公有领域散文 vs 三个模型 > 实验日期:2026-10-18。代码、78 篇模型输出和逐篇分数都在 [`experiment/`](../experiment/)。人写的原文不放进仓库,可以用 `experiment/fetch_human.py` 从维基文库重新下载。 ## 一、问题 1. `aiflavor` 的六个信号,能不能区分人写的散文和模型写的散文? 2. 一段"去 AI 味"的提示词,能不能让模型写得更像人? 3. 如果工具区分不了,模型写的散文里,AI 味到底在哪里? ## 二、做法 **人写**:13 篇现代白话散文和小说片段,作者是鲁迅(7 篇)、朱自清(5 篇)、徐志摩(1 篇)。作者都已去世 50 年以上,作品在中国属于公有领域。来源是维基文库,转成简体后在段落处截到约 1500 字。篇目见 [`experiment/human_sources.json`](../experiment/human_sources.json)。 **模型写**:同样 13 个题目,三个模型(Claude Opus 5.5、Kimi K3、GPT-6 Astra,均通过 Amazon Bedrock 调用,2026 年 10 月),每个模型用两种提示词各写一篇,一共 78 篇: - **普通提示**:「请以《题目》为题写一篇中文散文,约 N 字。不要模仿已经存在的同名作品。」 - **去 AI 味提示**:在普通提示后面加 6 条要求:写一件具体的事(时间、地点、人名或物件、原话);句子长短要变化;不用"首先、其次、总之、值得注意的是、由此可见、具有重要意义、展望未来"等;不分点、不加粗、不堆砌排比;结尾不升华;可以有偏见和犹豫。完整提示见 [`experiment/generate.py`](../experiment/generate.py)。 **防止背诵**:检查每篇模型输出和同名原文的 8 字片段重合率,最高 **0.0%**。模型没有照搬原文。 **评分**:全部用 `aiflavor` 打分。**区分度**用 AUC 表示:随机拿一篇模型写的和一篇人写的,工具给模型那篇打分更高的概率。0.5 等于瞎猜,1.0 是完全分开,低于 0.5 说明方向反了。 ## 三、结果 ### 1. 总分 | 组 | 篇数 | AI 味指数(均值 / 中位数) | 句长变异系数 | 短句占比 | AUC(vs 人写) | |---|---|---|---|---|---| | 人写 | 13 | 13.6 / 12.9 | 0.60 | 11% | — | | 普通提示(合计) | 39 | 13.2 / 11.7 | 0.51 | 9% | **0.46** | | 去 AI 味提示(合计) | 39 | 5.4 / 4.4 | 0.62 | 19% | **0.09** | | Opus 普通 / 去 AI 味 | 13 / 13 | 11.7 / 5.4 | 0.54 / 0.62 | 8% / 16% | 0.39 / 0.09 | | Kimi 普通 / 去 AI 味 | 13 / 13 | 16.3 / 6.9 | 0.53 / 0.66 | 8% / 18% | 0.65 / 0.15 | | GPT 普通 / 去 AI 味 | 13 / 13 | 11.5 / 4.0 | 0.47 / 0.59 | 10% / 23% | 0.36 / 0.04 | **工具区分不了人写和模型写的散文。**普通提示的 AUC 是 0.46,比瞎猜还差一点。用了去 AI 味提示以后,模型的分数(5.4)反而远低于鲁迅和朱自清(13.6)。 ### 2. 每个信号 | 信号 | 人写 | 普通提示 | 去 AI 味提示 | AUC(普通 vs 人写) | |---|---|---|---|---| | 套话和套路句式 | 0.149 | 0.099 | 0.043 | 0.36 | | **句长太均匀** | 0.081 | 0.259 | 0.048 | **0.82** | | 模板化结构 | 0.025 | 0.000 | 0.004 | 0.39 | | 破折号 / 冒号 / emoji | 0.302 | 0.269 | 0.260 | 0.41 | | 重复 | 0.217 | 0.058 | 0.010 | 0.32 | | 空泛 | 0.120 | 0.126 | 0.021 | 0.52 | 只有**句长均匀度**有区分度(0.82):模型用普通提示写的散文,句子长短确实比人写的更平均。另外五个信号要么没区别,要么方向相反。人写的散文**套话更多、重复更多、破折号更多**。 ### 3. 命中最多的标记 | 标记 | 人写 13 篇 | 普通提示 39 篇 | 去 AI 味提示 39 篇 | |---|---|---|---| | 四字格连排 | 12 | 21 | 17 | | 成对破折号插入语 | 5 | 6 | 4 | | **不是……而是……** | **0** | **14** | **1** | "不是……而是……"是唯一明显的词汇级 AI 标记:Opus 普通提示的 13 篇里有 7 篇用了,GPT 4 篇,Kimi 3 篇;人写的 13 篇一次也没有。去 AI 味提示几乎把它消除了。这和英文研究里专家最常用的线索之一 "It's not X, it's Y"(第二章)是同一种句式。 "四字格连排"在人写和模型写的文字里差不多一样多,是噪音。"成对破折号"也一样。 ## 四、模型写的散文,AI 味在哪里 工具抓不到,不代表没有 AI 味。读同题文章,能看到几种词表抓不到的模式。 **1. 结尾升华成金句。**普通提示的结尾大多是一句对仗的人生感悟: > 毕竟,赶得上的车有很多班,陪得了的人,只有这一程。(Opus,《匆匆》) > > 这一回,换我站在原地——她的背影,也要有人目送。(Kimi,《背影》) 去 AI 味提示的结尾大多停在一个动作上,比如 GPT 的《匆匆》结尾"慢慢擦那条洗不净的掌纹"。 **2. 突然冒出的概括。**叙事中间插一句"道理": > 孩子是面对着父母长大的,这件事平常得让人从不去想。(Opus,《背影》) **3. 蒙太奇式结构。**"后来……上小学……上中学……"一段一段推进时间,每段一个"背影",像提纲。 **4. 去 AI 味提示带来的新 AI 味:清单式细节。**提示要求"时间、地点、人名或物件",模型就一项项摆上去: > 那是去年十一月的一个周六,下午三点多,合肥,银泰三楼。(Opus 去 AI 味版,《背影》) > > 那是我初二那年在学校门口的小摊上买的,两块五。 细节够具体了,但具体得很刻意:每篇都有精确的时间、价格和地名,密度比人写的高得多。**按清单去掉 AI 味,会长出另一种 AI 味。** 我们试过用"最后两句里有没有感悟词、大词和对仗"来自动识别第 1 种模式,区分度只有 0.58。而且人写的样本是截断的,最后两句不是真正的结尾,所以这个测试不公平,没有把它加进工具。 ## 五、结论 1. **词表和形式信号对文学性文字基本无效。**现代模型写散文时几乎不用"首先、总之、赋能"这类套话,这些标记主要出现在说明文、公文、营销文里(第三章的标记大多来自这些文体)。`aiflavor` 更适合检查这类实用文字。 2. **分数很容易被"教"下去。**去 AI 味提示正好针对这些信号,39 篇里有 36 篇分数下降,平均降 7.7 分。但分数低不等于没有 AI 味,见第四节。这再次说明:不能把这类分数当成判断标准,也不应该为了降分而写作。 3. **真正的 AI 味在更高的层次**:情感结构(结尾升华)、议论的插入方式、篇章节奏,以及刻意的具体。这些需要人来读,或者需要比正则复杂得多的方法。 4. **"不是……而是……"是最值得注意的一个句式**,中英文都一样。 5. **句长均匀度在这批散文里有效**,但第三章引用的一项大语料研究没有证实它。可能是文体不同,也可能是我们的人写样本太特殊(见下面的局限)。 ## 六、局限 - **人写样本小而且特殊**:13 篇,全部是 1920 年代前后的白话文,以鲁迅和朱自清为主。他们的语言(欧化句式、文白夹杂、大量破折号)和今天的人写文字差别很大。结论不能直接推广到现代写作。 - **人写样本被截断**:只取了前 1500 字左右,模型写的是完整文章。结尾相关的比较不公平。 - **只有一种文体**(散文 / 小说片段),只有一种语言(中文)。 - **没有人工盲测**。工具区分不了,不代表人也区分不了。第二章的研究表明,经常用 AI 写作的人可以很准确地识别。 ## 七、下一步 - 用**现代人写的文字**(获得授权的博客、专栏、公众号文章)重做实验,分文体:说明文、评论、散文。 - 做一次**人工盲测**:把人写和模型写的同题文章混在一起,请读者判断,并写下理由。 - 把第四节的几种高层模式(结尾升华、插入概括、清单式细节)整理成标注规范,先人工标注,再看能不能自动识别。 ## 复现 ```bash pip install opencc-python-reimplemented boto3 python experiment/fetch_human.py --out data/human_s # 下载人写原文 python experiment/generate.py --human data/human_s --out data/ai # 需要 Bedrock 权限 python experiment/analyze_experiment.py --human data/human_s --ai experiment/ai_outputs --out experiment/results ```