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。
一点背景
做这个插件的原因很朴素:大多数"返工"不是能力问题,是视角问题。 你写的时候是作者,对方看的时候是审查者。这两个视角之间隔着一整套没被说出口的关切——他担心什么、他被谁问过、他上次因为什么挨批。
你没法在提交前问他。但你可以先替他把问题问一遍。
它不保证你这次不会被挑毛病。它保证你不会被一个没想过的问题打懵。
No comments yet. Be the first to write one.