[控场AI]
· 6 分钟阅读· 3,045 字

用稳定性评分决定模型生成文档该不该信

用稳定性评分决定模型生成文档该不该信

通过多次采样计算收敛性,将AI文档段落分为模型草稿、模型大纲或人类撰写。

文章指出,单次阅读AI生成的文档容易被流畅性误导,而多次采样同一提示可以揭示输出是否收敛。方法为每个段落收集3到5个样本,计算归一化token shingle的平均成对Jaccard相似度,并检测在部分样本中出现的主张型token(数字、时间、URL等)。根据相似度阈值(0.90和0.75)与分歧主张检测,将段落裁决为MODEL-DRAFT、MODEL-OUTLINE或HUMAN。分歧主张优先级高于相似度分数。提供的离线Python框架先用fixture验证评分路径,再通过单一函数契约接入实时采样。裁决直接转化为编辑任务:审查语气、人类撰写约束性语句或追查输入源。稳定性是时刻属性,输入变化时需重跑,该方法衡量输入是否已定而非模型质量。

单次阅读一篇AI生成的文档草稿,很容易被其流畅、具体的表述说服,但这份自信可能掩盖了模型在不同采样下输出不一致的事实。一种新方法提出:与其问“这篇草稿好不好”,不如问“它收敛吗”。通过多次采样同一段落提示,计算措辞相似度并检测事实性冲突,可以为每个文档段落分配一个明确的作者角色——模型草稿、模型大纲或人类撰写。

文档稳定性评分示意图

单样本判断的盲区

一段模型生成的文档读起来像是一个决定,因为它连贯、具体、完整。但用同样的提示再运行一次,你往往会得到不同的数字、不同的顺序、关于失败时发生什么的另一套说法。这种方差是关于输入的信息,而不是需要平均掉的噪声。一个在不同样本间改变形状的段落,通常意味着底层规格、配置或错误文本是模糊的或缺失的。

所以有用的问题不是“这篇草稿好吗?”,而是“这篇草稿收敛吗?”。收敛性测量成本低、难以伪造,并且对归属权有直接的可操作性。

核心规则:k个样本、两个信号、三种裁决

每个段落至少收集三个样本,如果负担得起就收集五个。计算归一化token shingle的平均成对相似度,然后单独检测在部分样本中出现但并非全部出现的主张型token(数字、大小、持续时间、URL)。相似度告诉你措辞是否已定;分歧主张检查告诉你事实是否已定。

平均相似度分歧主张裁决
任意有HUMAN——输入相互矛盾,文档无法稳定
≥ 0.90无MODEL-DRAFT / HUMAN-APPROVE——审查语气和正确性
0.75 – 0.89无MODEL-OUTLINE / HUMAN-NORMATIVE——模型提出结构,人类撰写约束性语句
< 0.75无HUMAN——输入材料可能模糊

分歧主张故意覆盖分数,因为一个自信地引用三个重试次数的段落,比一个什么都不引用的段落更糟糕。

Jaccard相似度与shingle:shingle是指将文本切分为连续的k个token(通常是词或字符)组成的片段,例如“模型输出不稳定”在k=2时会产生“模型输出”“输出不稳定”两个shingle。Jaccard相似度定义为两个集合交集大小除以并集大小,取值0到1。在本文方法中,先对每个样本的token序列做归一化(如小写、去标点),生成shingle集合,再计算所有样本两两之间的Jaccard相似度并取平均。该指标对措辞变化敏感,但对语序调整有一定容忍度,适合衡量“说法是否一致”。

分歧主张检测:主张型token指那些一旦出现就承载事实性承诺的片段,典型包括数字、时间单位(ms、s)、百分比、URL、版本号等。检测逻辑是:提取每个样本中的主张型token集合,若某个token在部分样本中出现但并非全部样本都出现,则标记为分歧主张。该方法故意不判断哪个主张正确,只判断主张是否稳定。一个段落即使措辞高度相似,只要出现分歧主张,就说明输入材料中存在未解决的冲突。

离线测试框架:先证明工具,再信任模型

提供的Python脚本draft_stability.py没有任何网络代码,因此同一文件可以在CI、笔记本电脑和定时任务中运行。它通过Jaccard相似度计算shingle集合的重叠程度,并用正则表达式捕获数字、时间单位、百分比和URL等主张型token。

一个精心设计的fixture示例能证明整个评分路径。samples.json包含两个段落:install段落的三次采样措辞高度一致,获得MODEL-DRAFT / HUMAN-APPROVE裁决;retry-behavior段落的三次采样分别声称重试3次、5次和2次,退避时间从200ms到100ms到250ms不等,触发分歧主张检查,直接判为HUMAN。

运行python draft_stability.py --fixture samples.json --k 3 --out record.md,得到的输出中第二行就是整个方法的浓缩:模型可以流畅地写重试行为,但重试策略从未在模型能读到的地方被决定过。

Fixture模式:在软件测试中,fixture是一组预先构造的、可重复使用的测试数据与前置条件。本文的draft_stability.py通过--fixture参数加载本地JSON文件,文件中每个段落包含多个预生成的采样文本。这样,评分逻辑(相似度计算、主张检测、裁决映射)可以在不依赖任何模型端点的情况下被独立验证。Fixture模式的核心价值在于将“工具是否正确”与“模型是否可用”解耦:CI流水线可以始终运行fixture测试,确保评分路径没有回归;而实时采样测试则作为补充,在端点可达时执行。如果实时端点不可达,fixture测试仍应执行并正确报告失败,而不是静默跳过。

接入实时采样:一个函数契约

测试框架刻意对你的客户端一无所知。接入自己的客户端时,保持契约为一个函数:接收提示字符串,返回生成的文本。然后用列表推导式收集5个样本,写入live.json,再以--k 5运行。这样record.md会记录你实际使用的输入和采样次数。

将裁决转化为任务分配

MODEL-DRAFT意味着编辑审查语气,审查者检查命令;MODEL-OUTLINE意味着人类必须撰写每一个陈述限制、保证或默认值的句子;HUMAN意味着下一个任务根本不是写作——找到解决该问题的配置文件、事件记录或负责人,然后才回到提示。

稳定性是某个时刻的属性,不是永久标签。当配置、错误字符串或发布说明发生变化时,重新运行测试框架,并将下降的分数视为该段落的真相来源发生了漂移的信号。将record.md提交在页面旁边,让审查者看到哪些段落被测量过、哪些只是被写出来了。

稳定性作为时刻属性:收敛性测量的是“在当前输入条件下,模型多次采样是否指向同一答案”,因此它反映的是输入规格的确定性,而不是模型能力的固有属性。当底层配置、错误字符串、发布说明或任何被模型读到的上下文发生变化时,之前的高分可能迅速下降。将record.md与文档页面一起提交,相当于为每个段落附上一份“测量快照”,审查者可以据此区分“被测量过的段落”和“仅被写出来的段落”。下降的分数应被视为输入真相发生漂移的警报,而不是模型退化的证据。

局限与适用边界

相似度测量的是措辞,不是真相:五个样本可能一致同意一个错误的重试次数并得到漂亮的分数,这就是为什么存在分歧主张检查,以及为什么人类仍然要审查MODEL-DRAFT。确定性采样器会抬高每个分数,所以要用你实际交付时存在的变体来采样。非常短的段落会退化为单个shingle,变更日志和生成的示例本质上不稳定,法律或合同文本永远不应该由分数来分配。

这个工具不衡量模型质量,它衡量的是你的输入是否已定。对于需要多次生成同一提示的循环,免费模型访问可以降低采样成本,但测试框架的fixture模式应始终保留在CI中作为底线——当实时端点不可达时,检查必须仍能执行并正确失败。

#文档生成#稳定性评分#模型采样#AI文档#提示工程#Python工具#内容归属
分享:

相关推荐