dsh-prompt-optimizer:在 Composer 里把草稿改写成结构化 Prompt

前言

在 DSH 里和 Agent 对话时,输入框里往往只有一句口语化的想法,例如「把登录表单做得更安全」。这类草稿缺少目标、约束和可验收标准,模型容易猜路径、扩范围。自己对照 AGENTS.md 或 README 手工扩写 prompt,又重复且难保持格式一致。

下面介绍的是社区插件 dsh-prompt-optimizer(npm 包名 dsh-smartprompt),由 shellpower96 维护,归类为「模型推理」。它在 Composer 下方增加 Smart Prompt 按钮:在草稿非空时可见,点击后按你在配置里声明的项目文档收集事实,调用当前会话的模型把草稿改写成结构化、可执行的 prompt,并直接回填输入框。输出默认按中文字数上限 400 字(可配置),集成面只有插件配置里的 config 字段。

这是什么

DSH Web 插件,Host 端注册命令 /optimize-prompt,Client 端在 conversation.composer.dock 注入按钮。它不修改系统 prompt,也不注册 Agent 工具;每次优化在会话日志里留下一对 command/run 与 command/done,界面只显示单行摘要(例如「✨ Smart Prompt · N chars · Fill composer」),不会把完整优化结果铺进对话流。

模型路由优先使用当前会话 Agent 的 provider/model,否则回退到进程默认模型;请求走 ctx.llm.stream(),因此 llm/stream 中间件仍然生效。README 注明已在 DSH 0.2.0-rc.2 上验证;package.json 要求 Node >= 20、dsh >= 0.2.0-rc.2,许可证 MIT。

核心功能

界面行为

  • 草稿为空:不渲染按钮。
  • 点击后:按钮显示 Optimizing…,成功则用结果替换草稿,按钮变为 ✓ Optimized。
  • 失败:按钮旁一行说明(超时 / 无模型 / 模型错误),草稿不变。

事实来源与改写原则

配置项 docs 指定工作区内、按顺序读取的文档(默认 AGENTS.md、README.md);缺失文件跳过,绝对路径与 .. 会被拒绝。另有字符预算 contextChars 限制「项目事实」块总长;可选 includeGoal: true 把当前会话 goal 纳入事实块。

元 prompt(src/prompt.js)要求输出具备:忠实(不扩缩范围,未定项写 TBD)、有据(模块/文件/命令仅能在事实块中出现,否则写 needs locating)、结构化(Goal、现状与落点、约束与惯例、任务拆分、验收标准,空节省略)、可执行(验收标准可验证)、简洁(每节最多 3 条 bullet、全文最多 10 条),且只输出正文、无代码围栏。超长时 finalizeOptimizedText() 在完整行/句/词边界截断并加 …。

配置项(节选)

插件不读环境变量,无效配置在激活时按字段名抛错。

字段 默认值 含义
enabled true 总开关
maxDraftChars 4000 超长草稿直接拒绝,不送模型
contextChars 8000 事实块总字符预算
maxOutputChars 400 优化结果上限(中文按字;英文上限约为 1.8 倍)
timeoutMs 120000 单次调用超时
docs ["AGENTS.md","README.md"] 事实文档列表
systemPromptLocale "auto" 元 prompt 语言:auto/zh/en;产出语言跟草稿

安装与启用

DSH 的插件目录即包管理器本身,无单独提审门户。当前 README 给出的 Git 安装方式如下(需本机 PATH 上有 pnpm,否则可能出现 spawn pnpm ENOENT):

plugin_manager(action="install_bundle", target="github:shellpower96/dsh-prompt-optimizer#v0.1.0")

本地开发可从绝对路径安装:

plugin_manager(action="install_bundle", target="/absolute/path/to/dsh-prompt-optimizer")

卸载:

plugin_manager(action="remove_bundle", target="dsh-prompt-optimizer")

另可选:把市场索引 https://raw.githubusercontent.com/shellpower96/dsh-prompt-optimizer/main/market/index.json 加入 DSH Discover 源;npm 全局包 dsh-smartprompt 在 README 中标注为名称已预留、发布待定。新 bundle 可能经 HMR 到达,若按钮未出现可刷新页面一次。

在 Cordis 配置中插入插件行,空配置即可启用:

- insert:
    - id: prompt-optimizer
      name: 'dsh-prompt-optimizer'
      config: {}

指向自有惯例文档的示例:

- insert:
    - id: prompt-optimizer
      name: 'dsh-prompt-optimizer'
      config:
        docs: ['AGENTS.md', 'README.md', 'docs/architecture.md']
        contextChars: 6000
        systemPromptLocale: auto

典型用法

  1. 安装 bundle 并在配置里 insert 上述 name: 'dsh-prompt-optimizer' 行。
  2. 在已有会话中打开 Composer(README 说明:全新对话首屏尚无按钮,需至少一条消息后出现 session 作用域的 dock)。
  3. 输入简短草稿,点击 Smart Prompt,等待回填后再发送或继续编辑。

仓库内测试:

node --test

适用场景与注意

适合:团队已在仓库根维护 AGENTS.md、README 等约定文档,希望把 Composer 里的即兴一句话快速变成带约束与验收标准的短 prompt,且长度受控(默认约 300 字目标、400 字硬顶)。

注意:

  • 插件以当前 DSH 进程权限 读工作区文件并调用模型;安装前请自行审阅 GitHub 源码 与 MIT 许可证。
  • 命令名固定为 optimize-prompt,同作用域不能重复注册。
  • 长度预算对模型是软约束,硬截断仅作兜底;需要更长输出可提高 maxOutputChars。
  • 社区目录页 skillhub.cn 插件条目 与 GitHub 仓库由维护者发布,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,目录站点为独立社区索引。

结尾

dsh-prompt-optimizer 把「项目文档里的惯例」和「Composer 里的草稿」接到一条命令上:点一次按钮,得到结构化、有据、可验收的短 prompt 并回填,减少手写扩写和幻觉路径。进一步了解可访问目录页 https://www.skillhub.cn/plugins/shellpower96/dsh-prompt-optimizer 与仓库 https://github.com/shellpower96/dsh-prompt-optimizer 。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye