← Back to home@BKmoon12

dsh-adversary

Pre-publish adversarial dry run for DSH deliverables - stress-test your file, copy, or script before you ship it.

Stars
0
Language
JavaScript
Created
Oct 26, 2026
Updated
Oct 26, 2026

Introduction

dsh-adversary · 假想敌

发出去之前,先让该挑刺的人挑一遍。

一个 DeepSeek Harness 插件。把准备发出的东西——交给领导的文件、给客户的方案、要发的朋友圈、短视频口播、公众号文案——贴进来,再指定几个「假想敌」:严厉领导、挑剔客户、爱抬杠的同行、路人网友、杠精、法务、财务、截图传播者……插件让 AI 站到这些人的位置上,逐条挑出他们真正会开火的地方,最后汇总成一张按优先级排好的异议总表。


先说清楚它不是什么

它是压力测试,不是预测。

它不知道你领导昨天开会被谁怼了,不知道平台此刻的推荐机制,不知道第一条热评会是谁写的。所以它从不承诺"你领导一定会这么说"。

它只保证一件事:如果对方从这个角度想,他会问什么,你会卡在哪。 提前把这几处想好,东西发出去就稳得多。

这个定位不是谦虚,是边界。任何声称能预测评论区的工具都在骗你——发布时机、初始流量、热评运气都在它视野之外。它只能告诉你:如果吵起来,最可能从哪条裂缝开始,火会往哪儿烧。


它能给你什么

不是"这份材料写得不错,建议加强逻辑性"这种废话。是这样的东西:

  • 第一反应——他扫完第一眼的真实判断,用他的口吻说出来
  • 会提出的异议——2~4 条,每条都钉在原文的具体词句上
  • 最可能被抓住的薄弱点——只一条,就是那个你最难答上来的问题
  • 一条修改建议——具体到改哪句、往哪改

多个角色一起上场时,还会给你:

  • 多角度异议总表——按 P0 / P1 / P2 排好,标注哪些是多个角色共同指向的(这种优先级最高)
  • 最可能被截图的一句话——原文里哪句最容易被单独截出来放大
  • 如果只能改三处——按投入产出排序的三条动作

安装

方式一:插件市场(推荐)

在 DSH 的插件管理器里搜索 dsh-adversary,或直接安装:

dsh plugin add dsh-adversary

方式二:从源码

git clone https://github.com/BKmoon12/dsh-adversary.git
cd dsh-adversary
dsh plugin add .

装好后重启会话即可。插件不联网、不读你的文件、不需要账号或密钥。


怎么用

装好之后不需要记命令。直接说人话:

帮我把这封邮件预演一下,假装你是我们那位只看预算的副总。

这条抖音文案要发了,让路人网友和杠精先骂一遍。

这份方案明天要给甲方,挑剔客户会挑什么?顺便让同行看看逻辑有没有漏洞。

插件会自动加载「假想敌」的完整流程:确认交付物 → 选角色 → 逐个扮演 → 汇总。

输入方式:第一版只支持把文本粘贴进去。要审的文件,把内容复制出来贴过来就行。

三个典型场景

交给领导的文件

选「严厉领导」+「把关人」。领导管结论和兜底,把关人管格式和口径——这两关过了,基本不会被退回来。

要发的朋友圈

选「路人网友」+「截图传播者」。前者判断有没有人愿意看完,后者判断哪句话会被单独截出来配上标题。

视频脚本 / 抖音

选「路人网友」+「杠精」+「截图传播者」。看前 3 秒留不留人、哪句话最招骂、哪句最容易被传播。


内置角色卡

12 张,覆盖最常见的审查视角:

角色id关注焦点异议风格
严厉领导strict-boss结论、风险与兜底、资源成本连环追问
挑剔客户picky-client是否解决我的问题、验收标准、边界与加钱委婉暗示
爱抬杠的同行contrarian-peer逻辑漏洞、方法论、证据强度认真反驳
路人网友passerby看不看得懂、关我什么事、前几秒抓不抓人短平快
杠精troll情绪冒犯、断章取义的切口、可截图的一句阴阳怪气
把关人gatekeeper格式规范、流程权限、口径一致性委婉暗示
财务与审批finance预算、投入产出、票据科目、责任归属直接开火
法务与合规legal承诺与绝对化表述、数据隐私、免责边界直接开火
截图传播者media传播性、标题化潜力、争议点短平快
竞争对手competitor可攻击的短板、差异化是否真存在阴阳怪气
平级同事colleague协作成本、责任划分、功劳归属委婉暗示
评审专家evaluator问题定义、方法与证据、创新点连环追问

传参时 id 和中文名都能用("strict-boss" 和 "严厉领导" 等价,"老板""甲方""黑粉"这类口语叫法也认得)。

建议一次选 1~3 个。 超过 3 个,意见会开始重复,注意力也会被摊薄。


自定义角色卡

内置卡不合适时,用一句话描述你要模拟的人,插件会现建一张:

帮我预演一下,假想敌是那种特别在意"这事儿会不会显得我们部门没干活"的中层。

也可以在调用时直接给字段:

{
  "customPersonas": [
    {
      "label": "只关心预算的副总",
      "role": "任何方案先问钱从哪出",
      "focus": ["预算", "投入产出", "谁签批"],
      "style": "直接开火",
      "voice": "这部分钱走哪个科目?预算里没有这一项。"
    }
  ]
}

label 必填,其余可省,省略的字段会自动补中性默认值。


配置(可选)

在 profile 的 cordis.patch.yml 里覆盖同名 id 即可,不改代码:

- id: dsh-adversary
  config:
    defaultPersonas: ['strict-boss', 'picky-client']   # 不指定角色时用哪几张
    maxPersonas: 3            # 单次最多几个角色(1–8),默认 3
    maxDeliverableChars: 20000  # 交付物超过这个长度会截断,默认 20000
    intensity: 'normal'       # gentle / normal / brutal,默认 normal
    showDisclaimer: true      # 结果末尾是否附"这是预演不是预测"的提示

intensity 控制说话有多不客气:gentle 给台阶,normal 像真会当面提,brutal 假设对方今天没耐心。


两个工具

插件向模型暴露两个工具,也可以手动调:

adversary_personas — 列出角色卡,帮你挑。可选 ids 只看其中几张。

adversary_review — 生成审查任务书。

参数必填说明
deliverable是交付物全文。原文照贴,不要先概括
personas否角色 id 或中文名数组,1–3 个
deliverableType否文件 / 文案 / 视频脚本 / 朋友圈 / 抖音 / 演讲 / 汇报 / 其他
intensity否gentle / normal / brutal
customPersonas否自定义角色卡

deliverableType 不是装饰。选「抖音」时它会提醒看前 3 秒和可截图的那一句;选「朋友圈」时它看的是社交摩擦;选「文件」时它盯结论、依据和兜底。类型选错,挑出来的毛病就会打偏。


几个实话

为什么不让它读我的文件? 第一版故意不做。粘贴虽然笨,但它保证了"你贴进来的就是你要发的"——读文件会引入选错文件、版本不对这类问题。这个功能在 V2。

为什么不模拟评论区吵起来? 那是 V2 的「评论区动态模拟」:从角色池拉 4~8 个受众,给不同立场和发言风格,让它们互相看见、回应、站队、歪楼,跑 2~3 轮后由主持人收敛成一张舆论风险热力图。V1 先把静态预演做扎实——它是后面一切的基础。

它准吗? 它不会"准",因为它不是在预测。它的价值在于:那些被它挑出来的问题,本来就存在。你没看见,是因为你太熟悉自己写的东西了。这跟准不准没关系,跟有没有人替你先看一遍有关系。


开发

dsh-adversary/
├─ lib/
│  ├─ index.js      插件入口(apply / 工具定义 / 技能注册)
│  ├─ personas.js   12 张内置角色卡(纯数据)
│  └─ review.js     任务书生成与渲染(纯函数)
├─ skills/
│  └─ adversary/
│     └─ SKILL.md   完整 SOP
├─ test/
│  └─ smoke.mjs     32 项冒烟测试
├─ cordis.patch.yml
└─ package.json

跑测试:

node test/smoke.mjs

纯 ESM、零运行时依赖,不 import 任何 Harness 包。

改角色卡:编辑 lib/personas.js,照现有结构加一条即可。字段含义写在文件头注释里。加完跑一遍测试,它会检查每张卡的字段完整性和取值合法性。

改流程或输出格式:skills/adversary/SKILL.md 是模型实际遵从的指令,改它比改代码更直接。


许可

MIT。见 LICENSE。


一点背景

做这个插件的原因很朴素:大多数"返工"不是能力问题,是视角问题。 你写的时候是作者,对方看的时候是审查者。这两个视角之间隔着一整套没被说出口的关切——他担心什么、他被谁问过、他上次因为什么挨批。

你没法在提交前问他。但你可以先替他把问题问一遍。

它不保证你这次不会被挑毛病。它保证你不会被一个没想过的问题打懵。