用途
Voice Extractor 是 newsjack.sh 的本地写作声音指纹引擎。它的目标不是让文案“听起来像人”,而是让以用户名义撰写的文案听起来像这个具体的用户。它被定位为机械、精确、对 AI 腔调保持警惕的规则匹配与指纹执行层,不负责编辑判断(那是 meanest-editor 的职责),而是可以被后者调用的指纹执行器。
核心机制:把“声音”视为一组可测量的习惯向量——句子有多长以及变化幅度、哪些功能词反复出现、标点如何分布、句子如何开头、语域偏口语还是偏名词化。提取时把这些测量为带容差带的数值,之后在每份草稿上重新计算同样的数值,一旦偏离容差带就触发规则。
主要能力
八种语言测量透镜
-
功能词签名(Burrows's Delta):把最高频功能词(the、of、and、to、I、that、but、just、actually 等)的频率标准化为 z 分数,其向量即作者与内容无关的指纹。规则 delta_drift(警告)在草稿的 z 向量平均绝对偏差超出容差带时触发。
-
句长变化(Burstiness):捕捉句长完整分布——均值、p10、p90、标准差,以及变异系数 length_cv = stdev / mean。规则 low_burstiness(警告)在草稿变异系数低于指纹约 50%,或没有任何句子落在 12-24 词区间之外时触发。
-
词汇多样性(MATTR):使用约 100 词滑动窗口的移动平均类符形符比,避免原始 TTR 随文本变长而下降的问题。规则 lexical_diversity_drop(警告)在草稿窗口 MATTR 低于指纹约 0.85 倍时触发。
-
标点习惯画像:按每千词统计逗号、破折号、省略号、感叹号、问号、括号、分号等标记的速率,作为带容差带的测量值。规则 em_dash_against_fingerprint(阻断)在指纹标记为 never 时对任何破折号触发。
-
句首词性画像(Roy Peter Clark):统计语料中每个句子的首词/词性——主谓开头、连词开头(But/And/So)、分词短语开头、或套话过渡词(However、Moreover、Furthermore)。规则 sentence-starts-with-however、furthermore-moreover-additionally 在指纹中不存在时阻断。
-
语域维度——参与型 vs 信息型(Biber Dimension-1):从参与型(缩略、第一/第二人称、私人动词 think/feel、模糊限制语、现在时)到信息型(名词、名词化、长词、密集定语形容词)的连续维度。规则 register_shift_to_informational(警告)在草稿整体向信息型偏移一个完整容差带时触发。
-
签名 n-gram(keyness):挖掘相对基线过度出现的 2-3 词组合,如“the shape of”“two things at once”。规则 signature_absence(警告)在 150 词以上草稿中签名 n-gram 少于两个时触发。
-
反向指纹——具名 AI 特征:包括纠正性对偶(“It's not X — it's Y”)、清嗓式时间短语(“In today's [adj] world”“now more than ever”“ever-evolving landscape”)、套话过渡开头、流行词密度(delve、leverage、robust、seamless、unlock)、上升三连句滥用、低句长变化、模糊限制语堆叠等,分别对应阻断或警告规则。
三种模式
- extract:摄入 5-20 份写作样本,生成 voice.yaml 指纹。
- check:对照激活指纹评估草稿,返回通过/失败及违规项。
- enforce:作为其他 newsjack 写作技能的内部约束,在返回前检查其输出。
使用方式
Extract 模式
-
询问范围:依次询问指纹用途(仅自己/公司或品牌声音/特定客户)、将用于哪些场景(提案与邮件/即时评论/社交帖子/通讯/以上全部)、提供 5-20 份样本。接受粘贴文本、文件路径或文件夹。每份样本记录来源、大致日期和受众。优先近期样本、简短原生写作、Slack 消息、推文、真实邮件和 LLM 之前的文案。少于 5 份样本会拒绝;总词数低于 800 会要求补充;用户坚持则以 confidence: low 提取。
-
语料分诊:提取前检查样本集。若超过 30% 看起来经过 AI 编辑(破折号饱和、纠正性对偶、清嗓式时间短语、流行词密度、无错字或片段),停止并要求更换样本或明确低置信度提取。若样本分裂为明显不同的正式度层级,询问捕捉哪个语域或提供独立配置。若用户要求为未参与的第三方提取指纹,拒绝。品牌/公司模式需区分公司已发布声音与发送者个人提案声音。
-
提取指纹:按透镜计算节奏、机制、句首习惯、习语集、禁用词、禁用结构、开头与结尾、主题与视角、样本清单等字段。所有字段来自观察到的行为而非品味。
-
与用户确认:保存前展示一页摘要,就破折号分类、开头与结尾、感觉不对的签名短语、用户确实使用的全局禁用词、混合语料的语域选择请求覆盖。破折号字段风险高,需明确确认。
-
保存并标记衰减:保存至 ~/.newsjack/voice/<profile_id>.yaml,active.yaml 指向激活配置。包含 created_at、last_extracted_at、sample_age_p50_days、sample_age_oldest_days。告知用户指纹将在 90 天时标记刷新。
Check 模式
输入草稿文本加激活指纹。在草稿上重新计算每个透镜,与存储的容差带比对,每条触发规则输出一个违规项。按顺序运行:硬阻断(残留占位符、禁用词、破折号、阻断级禁用结构、禁用开头/结尾);节奏/语域漂移(警告);词汇漂移(警告)。低置信度门控:若 confidence: low,保留所有硬阻断但将警告级规则降级为信息性。
Enforce 模式
其他 newsjack 技能起草文案时:从 ~/.newsjack/voice/active.yaml 加载激活指纹;通过 <voice_fingerprint> 块将指纹注入其指令;起草;对草稿运行检查;若检查失败且存在硬阻断,重新起草最多 2 次;若仍失败,返回带可见警告头的草稿。绝不静默放行失败草稿,也绝不永久阻断。用户是最终裁决者。
适用场景
- 以个人名义撰写的提案、邮件、即时评论、社交帖子、通讯等需要保持个人声音的文案。
- 公司或品牌声音的维护(需区分公司已发布声音与个人提案声音)。
- 作为其他写作技能的内部质量约束层。
限制
- 少于 5 份样本拒绝提取;总词数低于 800 要求补充。
- 不为未参与的第三方提取指纹。
- 明确声明不作为机器人检测规避工具。
- 尊重语域边界:Slack 私信、发布推文和财报套话不自动视为同一声音。
- 指纹会随时间漂移,90 天标记刷新。
- 原始样本文本不存入 voice.yaml。
- 具体收费、价格、平台支持等信息暂未提供。