# 为什么 dsh-humanizer 是这样设计的 > 这份文档讲设计推理:每一个决定在定下来之前,我们还考虑过哪些别的做法,为什么它们不行。 > 想先看全貌的读 README,想看理论本体的读 docs/THEORY.md,这份文档夹在两者中间。 --- ## 起点:三个版本,三种对模型的理解 这个插件不是一次想清楚的,它被自己推翻过两次。三次推翻记录下来的,是我们对「模型该怎么帮人写作」这个问题的三次理解。 第一版把模型当成执行者。理论被拆成十步:接单卡、十维叙事审计、功能路径图、十五层语言分析、三轮改写、复核、交付。每一步一个工件,工件过程序门禁。设计动机很朴素,怕模型偷懒,用步骤逼它走完。 实际发生的事情跟预期相反。模型开始打卡。它认真填表,表格很满,文本却越来越像同一条流水线的产品。这里最值得琢磨的是:模型并没有违反规则,它恰好是规则执行得太好了。规则要求每一步都产出,它就每一步都产出;规则要求逐格填写,它就逐格填写。真正出事的地方在于,所有文本都因此共享了同一套执行动作。工序固定,工序的形状就固定,固定形状在大量文本上重复,就变成了可以学习的指纹。 第二版接受了这个教训的一半。它把十步压缩成四栏决策单:材料来源、注意力选择、判断代价、保护清单。模型动笔前填单,程序检查单子有没有空话、证据是不是真的。看起来只保留了理论最核心的部分,其实犯的是同一个错误,只是规模小了一号。思考本来应该留在思考层,把它搬到一张单子上,它就变成了工件。工件可以被检查,也可以被伪造;更重要的是,工件的四栏结构会渗进写作习惯。一段时间以后,模型写什么都像在填那四栏。 所以第三版连决策单也删了。没有降维,没有检查,也不产工件。模型动笔前完整读一遍理论,在思考里成为作者,然后把理论忘掉。 三个版本的差异,表面上是流程繁简,底下是对模型的不同理解:它是一个需要被步骤约束的执行者,还是一个可以被完整知识改变状态的人。我们最后选了后者。 --- ## 为什么规则这条路走不通 上面说的「规则执行得越好,指纹越清晰」,值得再往深推一步,因为它是整个设计的支点。 分类器做的事情,本质上是在一堆文本里找稳定且可区分的特征。什么叫好特征?出现得稳定,分布得集中,跟标签相关。现在想象一条规则被忠实执行,比如每章结尾必须留钩子。这条规则会在每一章制造同一个结构位置上的同一种动作。从分类器的角度看,这就是一个近乎完美的特征:稳定,集中,跟「经过这套工序处理的文本」强相关。 有人会说,那把规则做成随机的,每章抽签决定结尾。随机化能破坏单条特征的稳定性,但引入了一个更抽象的新特征:这些文本都经过同一套抽签机制。抽签的分布、可选动作的池子、每种动作出现的比例,仍然可以被学。真正安全的东西必须绑定在文本外部,比如这章的材料本身需要什么样的收法。材料是外生变量,每份材料不一样,它带来的规律才分散,才不像工序。 这就是「配额等于新指纹」的完整含义。它不是一句反对高频词的口号,它是关于稳定性和可学习性的一个判断:跨文本稳定的任何东西,都是分类器的候选特征,无论它是词、句式、结构,还是一套流程。 --- ## 为什么读全文,不读摘要 这条决定当时也有争论。全文四万字符,放进上下文有成本,为什么不请模型读一份三千字的精华? 因为理论的价值不在结论,在约束之间的牵制。 举十五层语言分析为例。如果只摘要成「从语素到篇章逐层检查」,模型拿到的是一个空壳,它还是会用自己原本的默认方式写作。真正的价值在细节里:把字句合法要满足哪些条件,被动句为什么改变责任归属,短句在什么情况下是假节奏而不是真停顿。这些细节互相咬合,缺一层,判断就会往默认值滑。 十维叙事也一样。十个标签没有用,有用的是每个维度后面跟着的「可能误判」和「什么时候不该改」。比如人物维度会提醒你,外貌出场并不总是错的,只在当前观察者确实有理由注意时才该写。没有这半句,模型就会把「不要外貌出场」做成一条新规则。 禁止与回退这一章最典型。它有一半篇幅在讲什么不是禁止:有功能的重复、体裁允许的概述、情境驱动的语域切换、保持原样。这些例外不是注释,是理论的另一半。摘要只留「十二类禁止」,模型学到的是十二条新规则;全文才传达出「规则本身就是敌人」。 示范文也是全文的一部分。三篇风格差得很远的短文,不是让模型抄,是让模型看见:背后有人这个目标,在不同体裁和声音里长得完全不同。没有例子的理论,很容易被读成又一套抽象要求。 --- ## 为什么程序只守内容 程序规则是固定规则。固定规则天然适合核对两件事:内容有没有损坏,以及把文本塑成规则能识别的形状。第二件事我们全删了。 句长不查,连词不统计,破折号不扫描,思考单不校验,分数和画像更是没有。程序只留 `humanize_guard`:数字、书名、术语、等级还在不在,文字有没有乱码,引号成对没有,段落数变化了多少。 这看起来像放弃质量控制,其实是在保护质量。每一道程序检查都是一只塑形的手。检查句长,模型就会为句长改文本;检查连词,模型就会为连词改文本。这些指标都不难满足,模型会优先满足它们,因为它们是量化的;而「这处重复有没有功能」不量化,反而会被忽略。程序查得越多,写作越像在对付程序。 判断一个排比在这里有没有功能,判断一处重复是口癖还是机械复述,判断一句短句是真停顿还是假节奏,这些事只有模型能做,而且只有处于作者状态的模型能做。程序替它做,产出的就是固定规则驱动的文本。 --- ## 为什么润色也要走内源标准 润色最容易滑回后处理,因为对象本来就是写好的文本。所以我们给润色模式立了第一条规矩:把原文当成一位认真作者的草稿,不预设它是 AI。 这个预设比看起来重要。一旦先认定「这是 AI 写的」,人就会拿着外源清单去找茬,看见什么改什么。清单是固定的,所有文本都会往清单的方向走,于是润色重新变成流水线。 反过来,先假定作者认真写过,模型的动作就变成反推:这个作者知道什么、在乎什么、声音是什么、哪里只是没写到位。只改断了、硬了、凉了、空了、说多了的地方,其余一字不动。一篇冷硬的文本,它最好的版本可能仍然冷硬,只是冷得更有道理;一篇啰嗦的文本,它最好的版本是删掉说多了的那几句。标准在文本自己身上,不在任何外部参照上。 改完还要读接缝,这是内源标准的自然延伸。改过的和没改过的句子放在一起,语调必须还是一家人。接缝不平,说明修改把自己的声音带进来了,得退回去。 --- ## 文笔和温度为什么可以谈保证 这几个词容易被当成不可说的玄学,其实各有各的条件。 模型缺文笔吗?不缺。预训练里有大量文学语感,缺的是动笔前没有确定「这篇是谁在说」。声音定了,句子的音乐就定了。没有声音的文字,堆多少词都像说明装置。所以文笔问题被我们提前到「成为作者」这一步解决。 碎句的病因是句界错了。句子该断在哪,只有三个依据:一次感知结束,一个动作完成,一口气说完。为了长短交替而切句,为了节奏变化而拆段,才会越改越碎。 温度要看写的人在乎什么。动笔前知道这个人的 stakes,写作时才知道该盯住哪件具体的东西。不知道,就只能写「温暖、感动、心酸」,越写越冷。 生硬的问题大多出在连接上。转折先靠材料和语气的邻接,连词只在逻辑会丢的时候才出现。能靠语序、语义和上下文恢复的关系,不必明说。 机械感则是方法露了形。方法全部留在思考层,成品里没有章号、栏目、清单、固定句式,机械感就没有附着点。 插件不检查这五样东西。它只负责把模型放进能让条件成立的状态里:读全,成为作者,一口气写,听一遍,停。 --- ## 同类工具的问题,以及我们的不同 同类工具大多在回答「这段文本哪里像 AI,我帮你改一下」。这个问法里藏着两个未经检查的假设。 第一个假设:文本已经写完,只能后处理。但很多 AI 味是在写作时形成的,是决定层的默认路径。写完之后再动,动的只能是表面,表面一动就留下重写距离。重写距离研究说明,检测器可以学习原文和机器重写之间的距离,也就是说「润过一遍」本身就可能是信号。 第二个假设:像 AI 是一些可以定位的局部特征。如果真是这样,换词、删词、改句式就够了。但故事视镜研究的结果指向相反:剔除了措辞、句法和韵律特征以后,叙事特征仍有大约九成三的区分度。特征在结构里,不在词表里。 我们回答的是另一个问题:动笔之前,一个具体作者该知道、该在乎、该付出代价的东西,想清楚了没有。这个问题把干预移到写作之前,把标准从外部清单移到作者自身。不是效果更好几个百分点的问题,是失败模式根本不同。 --- ## 这套设计能信到什么程度 先把话说保守一点。研究证据给的是方向和机制,不是中文网文场景下的现成结论。故事视镜研究用英语短故事,特征由模型抽取,统计上的人类偏高和 AI 偏高还有重叠。项目实战只有一部第一人称中医悬疑小说,数字不能外推。我们把这些边界写进了理论文档,不打算用它们撑出过大的承诺。 但有两个东西让这套设计比一般的经验总结可靠。 第一,它有学科根基。材料有来源对应语言学的示证性和认识情态,注意力有选择对应聚焦和前景背景选择,判断有代价对应图尔敏式的论证结构,声音稳定且随情境变化对应语域研究,重复有功能对应衔接与指称稳定。我们做的事情是收拢,不是发明。 第二,它能解释自己的失败。第一版写下了「配额等于新指纹」,后来第一版和第二版都败在这条上。一套理论能提前说明「照我这样做会失败」,说明它抓住的是结构,不是事后找的借口。 --- ## 收束 任何看得见的规则都会变成新指纹,这是前面全部论证的落点。唯一安全的执行方式,是让模型带着全部理论成为作者,然后让理论从成品里彻底消失。