Back to home@Paloma966

dsh-socrates

苏格拉底诘问插件:实现意图模糊时先诘问后动手,高危命令执行前人类确认

Stars
0
Language
TypeScript
Created
Aug 17, 2026
Updated
Aug 17, 2026
GitHub repo

Introduction

dsh-socrates · 把苏格拉底的提问智慧装进 DSH

AI 时代真正的稀缺能力不是「得到答案」,而是把模糊欲望翻译成可证伪规格的提问能力。 苏格拉底助产术(承认无知 → 下定义 → 反例检验 → 暴露矛盾 → 收敛留痕)正是为此而生。 本插件把它落进 DSH 的 agent 循环:让 AI 不再顺从,让实现恰好是你真正想要的。

解决什么问题

症状病根dsh-socrates 的对策
AI 太顺从,你说什么它做什么模型天然倾向讨好与直接执行提示闸门:实现意图模糊时强制模型先诘问、后动手
做完了才发现不是想要的意图从未被翻译成可检验的标准socratic 技能:五步诘问流程 + 意图规格契约
一句「rm -rf」就被执行不可逆操作没有人类当场确认高危闸门:危险命令执行前以苏格拉底式问题请你拍板
计划没人质疑缺少只提问、不下结论的对抗者socratic 技能同会话审查模式(可选:苏格拉底预设做独立审查会话)

设计底线(缺一即退化成烦人表单):提问要便宜(一次一个问题)、要面向人(AI 不替人作答)、要有终止条件(意图可证伪即停;一句「直接做」即可绕过提示闸门)。

三层架构

形态落点干什么
方法论层skills/socratic/$DSH_HOME/skills/(用户级技能)诘问式需求/决策分析:五步流程、提问军火库、意图规格模板
执行层编译插件 dsh-socratesprofile 插件行(dsh plugin add两个闸门:agent/pre-step 提示闸门 + tools/pre-execute 高危闸门
人格层(可选,默认不装)presets/socrates/$DSH_HOME/.agent-presets/--with-preset「苏格拉底」预设:只提问、不下结论、独立对抗审查会话

插件本体 = 技能 + 闸门。人格层是可选资产:DSH 的 persona 行只能挂在预设组合里(scope-only),且子代理必须继承父会话预设、无法单独指定人格——所以「独立苏格拉底审查者」的唯一合法形态是预设。不需要独立审查会话时(审查走同会话技能即可),默认安装不会碰你的预设列表。

三层共享同一契约:意图规格文档specs/<name>.intent.md,模板见 skills/socratic/references/intent-spec-template.md)。技能负责生成、人格负责审问、闸门负责确保它不被跳过。

安装

# 1. 技能(立即生效,新会话可见);可选 --with-preset 装入「苏格拉底」预设
./install.sh            # 或 ./install.sh --link(开发时改仓库即生效)

# 2. 插件闸门(编译产物,需要 dsh CLI 与一次进程重启)
dsh plugin --profile <你的profile> add link:$(pwd)

# 3. 重启 dsh

安装后:

  • 新会话的模型可随时用 skill 工具加载 socratic(同会话诘问澄清与对抗审查);
  • (仅当用了 --with-preset)新建会话的预设选择器出现「苏格拉底」;
  • 所有会话中:
    • 你发「帮我实现一个订单系统」→ 模型会先复述意图,必要时用提问卡逐个问你,你给出验收标准后才动手;
    • 你发「帮我实现一个订单系统,验收标准:能下单、能取消」→ 直接放行;
    • 你发「帮我实现一个订单系统,直接做」→ 尊重授权,放行(风险由闸门已知风险告知);
    • 模型要执行 rm -rfgit push --forceDROP TABLEcurl|bash 等 → 审批弹窗向你提问「最坏结果能否接受?能否回滚?」,你批准才执行。

使用场景

场景 1:需求从模糊到可证伪

用户:帮我实现一个订单系统
闸门:注入诘问指令
模型:我理解你要做一个订单系统。先确认最关键的一点:
      「如果它不能做什么,你会觉得这不是你要的东西?」
用户:至少不能发货的订单不算完成
模型:明白。那验收标准写成「当用户提交订单后 1 秒内,库存扣减且订单可见」对吗?
      还有冲突要你拍板:你说越快越好,但又要支持秒杀——如果必须牺牲一个,先牺牲哪个?
用户:先保证普通下单路径正确,秒杀以后再说
模型:好的,意图已可证伪。验收标准:……(写入 specs/orders.intent.md)开始实现。

场景 2:对抗式审查(同会话)

需要有人质疑你的方案时,让当前会话加载 socratic 技能并进入审查模式:

你:加载 socratic,然后审一下这个选型计划(粘贴计划)
模型(诘问模式):「计划声称 Redis 能扛 10 万 QPS——什么证据出现,你会相信这个数字是对的?」
你:压测报告
模型:「如果压测暴露内存不够,你准备牺牲什么来兜底?」
……

如果想要一个整段系统提示都是苏格拉底人格的独立审查会话(角色强度更高、且与主会话互不干扰),用 ./install.sh --with-preset 安装预设后,新建会话选「苏格拉底」即可。

场景 3:高危操作的最后一问

模型准备执行:rm -rf /var/cache/app
审批弹窗:【苏格拉底闸门】命令命中高危规则「递归删除」。
         1. 最坏的结果是什么?发生了你能接受、能回滚吗?
         2. 备份或恢复路径是否已经存在?

配置

插件行(dsh plugin add 自动加入 profile,可在 profile 的 cordis.patch.yml 中为该行补 config 覆盖):

字段默认说明
promptGatetrue提示闸门总开关
promptGatePatterns中英文实现动词正则判定「实现意图」的模式
criteriaMarkers验收/约束/边界等标记命中任一视为意图已澄清,跳过
bypassMarkers「直接做」等用户显式授权短语,跳过提示闸门
maxQuestions3注入指令允许模型向用户提问的最大数
destructiveGatetrue高危闸门总开关
destructiveToolNames["bash"]参与高危检测的工具名
destructiveRules10 条内置规则{ label, pattern } 列表,可增删

完整默认值见 src/config.ts

设计原则

  1. 便宜:提示闸门的误报代价是一行意图复述,漏报代价是返工一轮——宁误勿漏。高危闸门恰好相反:宁严勿松(用户点一下「批准」即可)。
  2. 面向人:所有问题的回答者必须是人。闸门从不替用户作答;注入指令明确禁止模型「猜测意图后直接实现」。
  3. 终止条件:提示闸门可被「直接做」绕过;高危闸门不可绕过(不可逆操作必须人类当场确认)——这是唯一的不对称,也是底线。
  4. 只做确定性的事:两个闸门都是确定性的模式匹配,零 LLM 调用、零延迟、永不抛进 agent 循环。启发式的「软判断」交给技能与 persona(模型侧)完成。

目录结构

dsh-socrates/
├── src/               # 闸门插件(TypeScript → lib/)
│   ├── index.ts       #   插件入口(name / Config / apply)
│   ├── config.ts      #   配置 schema + 出厂默认值
│   ├── prompt-gate.ts #   提示闸门(agent/pre-step)
│   ├── destructive-gate.ts # 高危闸门(tools/pre-execute)
│   ├── heuristics.ts  #   纯函数检测逻辑(可单测)
│   └── messages.ts    #   注入消息与决策理由模板
├── skills/socratic/   # 方法论技能 + 意图规格模板
├── presets/socrates/  # 可选:苏格拉底 persona 预设(--with-preset 安装)
├── tests/             # 单元测试(node --test)
├── smoke/             # cordis 事件模型冒烟测试
├── cordis.patch.yml   # profile 补丁:插入闸门插件行
└── install.sh         # 安装脚本(默认技能;--with-preset 加装预设)

开发:pnpm build && pnpm test && pnpm smoke(构建类型解析经仓库内 node_modules/@deepseek-ai 符号链接指向 DSH 安装农场;换机器需重指)。

局限与后续

  • 提示闸门只覆盖「全新实现意图」的启发式检测;对「改一行」类指令不介入(也不该介入)。
  • 高危闸门 v1 只查 bash 工具;write/edit 覆盖式写入未纳入(有版本控制可回退)。
  • 意图规格的「存在性」尚未成为硬闸门(例如:无 spec 禁止大改)——留待收集真实使用反馈后再决定松紧。
  • 苏格拉底预设(可选资产)用于独立审查会话,需 --with-preset 显式安装;默认安装不占用预设列表。

许可

MIT