holaOS stop-slop 技能实战:基于 phrases.md 的 AI 写作去痕编辑指南

原创2026-10-02 16:05:181,694 阅读
文章标签:AI 应用AI Agent人工智能本地部署大模型后端

holaOS stop-slop 技能实战:基于 phrases.md 的 AI 写作去痕编辑指南

holaOS 在运行时内嵌了 stop-slop 写作技能,用于在草稿、编辑与审稿阶段消除可预测的 AI 写作痕迹。本文以技能参考文档 references/phrases.md 为骨架,完整讲解应删除的九大类短语、配套的句式结构与节奏规则、前后对比改写示例,并结合 workspace-skills.ts 源码说明该技能在 holaOS 中如何被解析、校验与注入到 Agent 上下文中。读完本文,你将掌握一套可复用的"去 AI 味"编辑清单,以及 holaOS 嵌入式技能的实际运行机制。

stop-slop 技能与 phrases.md 的定位

stop-slop 是 holaOS 运行时 embedded-skills 目录下的内嵌技能之一,其入口文件 SKILL.md 声明了技能名称与触发条件:

name: stop-slop
description: Remove AI writing patterns from prose. Use when drafting, editing, or reviewing text to eliminate predictable AI tells.
metadata:
  trigger: Writing prose, editing drafts, reviewing content for AI patterns

技能的核心规则共 8 条:砍掉填充短语、打破公式化结构、使用主动语态、写具体不写空泛、把读者带进现场、变化节奏、信任读者、砍掉金句。其中第 1 条规则"砍掉填充短语(throat-clearing openers、emphasis crutches、所有副词)"直接指向 references/phrases.md——这是整个技能最细颗粒度的操作清单,按"删除什么、为什么删、怎么替换"三层结构组织,是本文展开的核心。

phrases.md 的完整价值在于:它不只是给出禁用词列表,还给出了每个类别的删改原则。例如对 throat-clearing openers 的判据是"任何 'here's what/this/that' 结构都是铺垫,砍掉它直接说观点";对 Vague Declaratives 的判据是"如果一句话只声明重要/深刻/结构性,却不指明具体事物,就砍掉它或替换为具体事物"。

九大类应删除表达全解析

1. Throat-Clearing Openers(清嗓式开场)

这些"宣布式"短语在真正的观点之前堆积噪音,应当直接删掉并陈述内容本身:

  • "Here's the thing:"
  • "Here's what [X]" / "Here's this [X]" / "Here's that [X]" / "Here's why [X]"
  • "The uncomfortable truth is"
  • "It turns out"
  • "The real [X] is"
  • "Let me be clear"
  • "The truth is,"
  • "I'll say it again:"
  • "I'm going to be honest"
  • "Can we talk about"
  • "Here's what I find interesting"
  • "Here's the problem though"

判据:任何 "here's what/this/that" 结构都是"清嗓子",直接砍掉并陈述观点。例如 "Here's the thing: the build failed" 应直接写成 "The build failed"。

2. Emphasis Crutches(强调拐杖)

这些短语不增加任何意义,直接删除:

  • "Full stop." / "Period."
  • "Let that sink in."
  • "This matters because"
  • "Make no mistake"
  • "Here's why that matters"

强调应该来自内容本身,而不是这些修辞拐杖。

3. Business Jargon(商业行话)

用平实语言替换,phrases.md 给出了完整的对照表:

Avoid(避免) Use instead(改用)
Navigate (challenges) Handle, address
Unpack (analysis) Explain, examine
Lean into Accept, embrace
Landscape (context) Situation, field
Game-changer Significant, important
Double down Commit, increase
Deep dive Analysis, examination
Take a step back Reconsider
Moving forward Next, from now
Circle back Return to, revisit
On the same page Aligned, agreed

原则是"用普通语言说话":行话的代价是稀释信息密度,替换词保持含义的同时恢复直接表达。

4. Adverbs(副词)

phrases.md 对副词的态度最为严格:杀掉所有副词。没有 -ly 词,没有软化词(softeners)、强化词(intensifiers)、含糊词(hedges)。点名列出的违规词包括:

  • "really"、"just"、"literally"、"genuinely"、"honestly"、"simply"、"actually"、"deeply"、"truly"、"fundamentally"、"inherently"、"inevitably"、"interestingly"、"importantly"、"crucially"

同时还要砍掉这些填充短语:

  • "At its core"
  • "In today's [X]"
  • "It's worth noting"
  • "At the end of the day"
  • "When it comes to"
  • "In a world where"
  • "The reality is"

原理:副词大多是空强调。一个动词如果足够准确,就不需要 "really" 来撑腰;一个事实如果足够具体,就不需要 "literally" 来发誓。配套的 structures.md 在 Word Patterns 一节再次点名了 "really"、"just"、"literally"、"genuinely"、"honestly"、"simply"、"actually" 等 -ly 词与空强调词。

5. Meta-Commentary(元评论)

删除自我指涉的旁白。文章应该向前推进,而不是不断宣布自己的结构:

  • "Hint:"
  • "Plot twist:" / "Spoiler:"
  • "You already know this, but"
  • "But that's another post"
  • "X is a feature, not a bug"
  • "Dressed up as"
  • "The rest of this essay explains..."
  • "Let me walk you through..."
  • "In this section, we'll..."
  • "As we'll see..."
  • "I want to explore..."

这些短语的本质是"作者跳出来对读者说话",破坏沉浸感。

6. Performative Emphasis(表演式强调)

虚假的亲昵或制造出来的真诚:

  • "creeps in"
  • "I promise"
  • "They exist, I promise"

7. Telling Instead of Showing(告知而非展示)

宣布困难或重要性,却不展示证据:

  • "This is genuinely hard"
  • "This is what leadership actually looks like"
  • "This is what X actually looks like"
  • "actually matters"

8. Vague Declaratives(空泛断言)

声明重要性却不指明具体事物,全部砍掉:

  • "The reasons are structural"
  • "The implications are significant"
  • "This is the deepest problem"
  • "The stakes are high"
  • "The consequences are real"

判据:如果一句话说某事物重要/深刻/结构性,却没有展示具体事物,就砍掉它,或者用具体事物替换它。这与 SKILL.md 第 4 条规则"写具体"完全一致:不许用 "every"、"always"、"never" 之类的懒人极端词做模糊功。

配套句式与节奏规则(structures.md 要点)

phrases.md 负责"词"层面的清理,structures.md 负责"句"与"篇"层面的纠偏,两者配套使用:

  • Binary Contrasts(二元对比):如 "Not because X. But because Y."、"The answer isn't X. It's Y." 等,制造虚假戏剧感。改法:直接陈述 Y,删掉否定铺垫。
  • Negative Listing(否定式列举):"Not a X... Not a Y... A Z." 这种"修辞脱衣舞",直接陈述 Z。
  • Dramatic Fragmentation(戏剧性碎片句):"[Noun]. That's it. That's the [thing]." 是制造出来的深刻感,改用完整句子。
  • Rhetorical Setups(修辞设问):"What if [reframe]?"、"Think about it:" 等,直接说出观点,让读者自己下结论。
  • False Agency(虚假主体):让无生命物做人的动作("a complaint becomes a fix"、"the decision emerges"、"the data tells us")。改法:点出人,"The team fixed it that week" 胜过 "the complaint becomes a fix";若找不到具体的人,用 "you" 把读者放进座位。
  • Narrator-from-a-Distance(远距离叙述者):"Nobody designed this."、"People tend to..." 是悬空观察,改用 "You don't sit down one day and decide to..." 把读者带进现场。
  • Passive Voice(被动语态):"X was created"、"Mistakes were made" 隐藏了动作发出者,找到动作发出者并放到句首。
  • Sentence Starters(句首词):避免以 What/When/Where/Which/Who/Why/How 开头、避免段落以 "So" 开头、避免 "Look," 开头。"What makes this hard is..." 应改为 "The constraint is..." 或直接点出具体约束。
  • Rhythm Patterns(节奏模式):三连列表用两项或一项;每个段落都用短句收尾要改;禁用 em dash(用逗号或句号替代);不要堆叠短促的碎片句。
  • Word Patterns(词汇模式):懒人极端词(every、always、never、everyone、everybody、nobody)制造虚假权威,用具体数字与事实替代。

前后对比改写实战(examples.md 五组示例)

references/examples.md 提供了 5 组可直接对照的改写案例,是 phrases.md 各项规则的综合演练:

示例 1:清嗓开场 + 二元对比

  • 改前:"Here's the thing: building products is hard. Not because the technology is complex. Because people are complex. Let that sink in."
  • 改后:"Building products is hard. Technology is manageable. People aren't."
  • 改动:删除开场短语、二元对比结构和强调拐杖,全部换成直接陈述。

示例 2:填充 + 多余安抚

  • 改前:"It turns out that most teams struggle with alignment. The uncomfortable truth is that nobody wants to admit they're confused. And that's okay."
  • 改后:"Teams struggle with alignment. Nobody admits confusion."
  • 改动:砍掉含糊词 "most"、清嗓短语,删除"准许式"结尾。

示例 3:商业行话堆叠

  • 改前:"In today's fast-paced landscape, we need to lean into discomfort and navigate uncertainty with clarity. This matters because your competition isn't waiting."
  • 改后:"Move faster. Your competition is."
  • 改动:彻底消除行话,核心信息压缩到六个词。

示例 4:戏剧性碎片句

  • 改前:"Speed. Quality. Cost. You can only pick two. That's it. That's the tradeoff."
  • 改后:"Speed, quality, cost; pick two."
  • 改动:单句表达,去除表演式强调。

示例 5:修辞设问

  • 改前:"What if I told you that the best teams don't optimize for productivity? Here's what I mean: they optimize for learning. Think about it."
  • 改后:"The best teams optimize for learning, not productivity."
  • 改动:直接断言,无修辞脚手架。

交付前的快速检查与评分机制

SKILL.md 提供了交付散文前的快速检查清单,与 phrases.md 逐条呼应:

  • 有任何副词?杀掉。
  • 有被动语态?找到动作发出者,让它做主语。
  • 无生命物在做人话动词("the decision emerges")?点出那个人。
  • 句子以 Wh- 词开头?重构。
  • 有 "here's what/this/that" 清嗓?直接切入要点。
  • 有 "not X, it's Y" 对比?直接陈述 Y。
  • 连续三句长度相同?打断一句。
  • 段落以一句式收尾?改变收尾方式。
  • 有 em dash?删掉。
  • 有空泛断言("The implications are significant")?指明具体含义。
  • 有远距离叙述者("Nobody designed this")?把读者放进场景。
  • 有元连接语("The rest of this essay...")?删除,让文章自己流动。

评分机制按 5 个维度各打 1-10 分:Directness(陈述还是宣布)、Rhythm(有变化还是节拍器)、Trust(是否尊重读者智力)、Authenticity(听起来像人吗)、Density(有没有可删的)。总分低于 35/50 需要修改。

holaOS 中嵌入式技能如何被加载与注入

stop-slop 不是孤立文档,它在 holaOS 运行时有一套真实的加载链路。核心实现在 runtime/api-server/src/workspace-skills.ts:

  1. 目录解析:embeddedSkillsRoot() 优先读取环境变量 HOLABOSS_EMBEDDED_SKILLS_DIR 覆盖技能根目录;否则基于 HOLABOSS_RUNTIME_ROOT 依次探测 harnesses/src/embedded-skills 与 runtime/harnesses/src/embedded-skills 两个候选路径。
  2. 格式校验:listSkillsInRoot() 要求每个技能子目录必须存在 SKILL.md,且通过 hasValidSkillFormat() 校验——frontmatter 中的 name 必须与目录名一致(经 normalizeSkillId() 规范化:去空白、拒绝 /、\、空字节与 ./..),且必须有非空 description。stop-slop 的 SKILL.md 正是以此格式声明。
  3. 权限声明:frontmatter 可声明 holaboss_granted_tools、holaboss_granted_commands 等授权字段(或嵌套在 holaboss: 下的 granted_tools/granted_commands),用于限定技能可用工具。
  4. 引用块注入:quotedSkillBlock() 将技能正文包裹为 <skill name="..." location="..."> 引用块,并注明"References are relative to <source_dir>",使参考文档的相对链接在技能被引用时保持有效。invokeWorkspaceSkill() 通过 resolveWorkspaceSkillByLookupToken() 按 skill_id 或 skill_name(大小写不敏感)匹配,找不到时抛出包含可用技能列表的错误。
  5. 调用方式:指令以 /stop-slop 开头的行引用技能(见 parseQuotedSkillInstruction()),prepareInstructionWithQuotedWorkspaceSkills() 会把对应技能块展开进正文;/stop-slop 也可带参数,参数会追加到技能块之后。

测试层面,workspace-skills.test.ts 验证了嵌入式技能在 HOLABOSS_RUNTIME_ROOT 指向 bundle 根目录时的解析、workspace 技能对同 id 嵌入式技能的覆盖顺序(嵌入式技能默认权威、workspace 技能可覆盖)等行为;ts-runner.test.ts 则验证了 ts-runner CLI 在 workspace 技能复用同一 id 时保持嵌入式技能权威、以及 App Builder 专项嵌入式技能对 collapsed subagents 不加载等边界行为。此外 prune_packaged_tree.mjs 在打包裁剪时保留 embedded-skills/ 目录,确保发布产物中技能依然可用。

实战建议:把 phrases.md 变成你自己的编辑流程

  • 草稿阶段:写完后先全文扫描九大类短语——重点盯 throat-clearing openers 与所有 -ly 副词,这两类在 AI 生成文本中出现频率最高。
  • 结构阶段:对照 structures.md 检查二元对比、否定式列举、碎片句、远距离叙述者与被动语态,逐个把"无生命主体"换成"具体的人"。
  • 交付阶段:跑一遍 SKILL.md 的 12 项快速检查清单,再用 5 维度评分,低于 35/50 就返工。
  • 团队落地:参考 holaOS 的做法,将 stop-slop 技能目录(SKILL.md + references/)放入你的 Agent 技能目录,配好 HOLABOSS_EMBEDDED_SKILLS_DIR 环境变量,即可让团队所有 Agent 在写作时自动携带这套去 AI 味规则。

最终检验标准只有一条,正如 phrases.md 反复强调的:能删就删,能具体就具体,让内容自己站住,而不是让修辞替它站台。

登录后查看全文
holaOS