DSH Composer's Prompt Optimization Button: dsh-prompt-optimizer-button

前言

用 DSH(DeepSeek Harness)写提示词时,一个常见痛点是:草稿写完了,但不知道要不要改、怎么改,只能整段发出去让模型自己理解。手动重写、复制粘贴对比、让模型返回优化后的文本再贴回来,都打断在 composer 里的工作流。

下面介绍的插件 az-666316/dsh-prompt-optimizer-button 就是一个针对这个场景的小工具:在 composer 输入框上加一个「优化提示词」按钮,点一下,用当前选中的模型把草稿改写好,直接替换回输入框,不发送、不新增对话轮次。

这是什么

dsh-prompt-optimizer-button 是 DSH 的一个插件(dsh-plugin),由 AZ-666316 维护。它解决的问题很单一:在 composer 里对当前草稿做一次模型驱动的提示词改写,并提供改动理由的诊断面板。

它属于社区目录中的模型推理类插件,采用 MIT 许可证,当前版本 0.4.2,engines 要求 dsh >= 0.2.2-rc.1 < 0.3.0-0。来源:GitHub 仓库 AZ-666316/dsh-prompt-optimizer-button 的 README 与 package.json。

核心功能

插件在 composer 上做三件事:

  1. 在模型选择框与发送按钮之间(麦克风/发送按钮左侧)插入一个 sparkle 小图标按钮和一个场景徽标。
  2. 点击图标后,插件把当前草稿发给宿主侧的一段服务,用输入框里当前选的 provider/model(含 reasoning effort)跑一次普通模型调用,把改写后的提示词直接替换回输入框。
  3. 一次调用同时返回改写结果、场景判断和结构化诊断。诊断不进输入框,只显示在弹出面板里。

行为细节(均来自 README):

  • 不发送、不新增对话轮次。改写结果先写回输入框,用户看完、改完,再按 Enter。
  • 不另配密钥,沿用输入框当前选的 provider/model。
  • 草稿为空时按钮置灰;请求进行中图标呼吸闪烁、按钮不可再点;失败时图标变红并自动打开面板说明原因。
  • 场景徽标显示模型判断出的场景:自动 / 论文 / 派活 / 日常 / 英文。点徽标可打开面板,并在面板里手动钉住下一次要用的场景。

诊断面板的内容依次是:功能提示、场景选择 chips(自动/论文/派活/日常/英文,点一下即钉住)、诊断(任务类型、要支撑的决策)与三条自检(✓ 通过 / ! 未通过,各带一句理由)、失败原因(仅失败时)。面板用 position: fixed 挂在按钮上方(空间不足自动翻到下方),水平居中并夹在视口内;外部点击、Escape、关闭按钮都能收起;带 role="dialog"。视觉为深色半透明 + 背景模糊 + 圆角 14 + 投影,徽标是圆点 + 文字的胶囊。

工作原理

插件由宿主侧和浏览器侧两部分组成(依据 README 的「结构」一节):

  • 浏览器侧(client.js)注册 conversation.input.right 单元格,用 ReactDOM.createPortal 把徽标与按钮插到 composer trailing 行的 standardControls(模型选择器块)之后;诊断面板再 portal 到 document.body,用按钮矩形计算固定定位坐标。
  • 宿主侧(index.js)注册一条同源路由:
POST /prompt-optimizer/rewrite
请求 : { text, provider, model, reasoningEffort?, scenario? }
响应 : { ok: true, text, scenario, diagnosis }

其中 text 是改写后的提示词(唯一写回输入框的内容),scenario / diagnosis 只给面板用。桌面版页面 origin 是 dsh-app://app,主进程会把非本地资源的 fetch 转发到宿主 Web 服务器(带认证 cookie),所以相对路径的 fetch 在桌面与网页版都能用。

模型答案用行标记解析(SCENARIO: / DIAGNOSIS: / PROMPT:),长提示词正文不塞进 JSON 字符串,避免换行与引号导致解析失败;解析失败时回退为「整段当提示词」。

工程上有两点值得注意:

  • 宿主侧不 import 任何 @deepseek-ai/* 包(profile 里并没有 dsh-llm),只通过 ctx.get('llm') / ctx.inject(['webServer']) 拿运行时服务,避免插件拖慢或拖垮启动握手。
  • 不再依赖 prompt-optimizer 技能:优化规则写在 index.js 的 system prompt 里。仓库里仍保留了 skills/prompt-optimizer/ 目录作为对话用的技能(Codex 场景按 $prompt-optimizer 调用,DSH 场景按 /prompt-optimizer 调用),两者不冲突。

安装与启用

推荐的方式是本地通过 plugin_manager 的 install_bundle 以 link: 方式装到 profile(如 desktop)。手动安装等价于三步,按 README 原文:

1、在 profile 的 package.json(如 %USERPROFILE%\.dsh\profiles\desktop\package.json)的 dependencies 加:

"dsh-prompt-optimizer-button": "link:<本目录绝对路径>"

2、把 dsh-prompt-optimizer-button 加进 dsh.profile.bundles。

3、让 profile 重新组装(plugin_manager 的 set/install,或重启 DSH),页面刷新后生效。

插件自带的依赖项(package.json 的 dsh.client.inject)要求注入 @deepseek-ai/dsh-client-locale 与 @deepseek-ai/dsh-client-ui-conversation,这两个包由 DSH 自身提供,无需额外安装。运行中的 DSH(0.2.2 级别)自带 llm、webServer 服务即可,无需额外包。

卸载有两种方式:

# 方式一:在 plugin_manager 里禁用/移除 prompt-optimizer-button 行

# 方式二:命令行移除
dsh plugin --profile desktop remove dsh-prompt-optimizer-button

典型用法

1、正常打开一个会话,在 composer 输入框输入草稿,例如一句比较含糊的任务描述。

2、确认输入框里选的 provider/model 和 reasoning effort 是否符合预期——插件会原样用这套配置发起这次改写,不另配密钥。

3、点击 sparkle 图标。此时按钮进入「请求进行中」状态(图标呼吸闪烁、不可再点);模型返回后,改写后的提示词直接替换输入框草稿,场景徽标更新为模型判断出的场景(自动 / 论文 / 派活 / 日常 / 英文之一)。

4、点一下场景徽标(或失败时自动弹出的面板),查看诊断面板:场景选择 chips 可以手动钉住下一次要用的场景,正文里的任务类型、决策目标和三条自检给出改写理由。不需要诊断的话,直接关掉面板。

5、查看写回的提示词,不满意就手动改,满意再按 Enter 发送。插件默认不自动发送。

适用场景与注意

适合的用户:

  • 经常在 composer 里调整提示词、希望「改一版看看」而不是发一轮对话的用户。
  • 需要知道模型为什么这样改写的开发者:诊断面板把任务类型、决策目标和自检结果摆出来,比单纯看改写结果更容易判断质量。

注意事项:

  • 插件以当前 dsh 进程的权限运行,并通过同源路由调用宿主侧服务。安装前应检查源码(index.js、client.js、cordis.patch.yml)与 MIT 许可证,确认路由行为是否符合自己的预期。
  • 宿主路由不做额外鉴权,依赖 Web 服务器本身只在 loopback 暴露;若要对外暴露需自行加策略。
  • 单次请求上限:输入 20k 字符、输出 4000 tokens、超时 90 秒;输出被 max tokens 截断时直接报错(提示缩短草稿),不会把半截提示词写回草稿。
  • DSH 0.2.2 的 composer 内部 DOM 不是公开 API;升级后若 [data-composer-card] / standardControls 结构变化,按钮定位会失效(插件有「发送按钮前」的兜底定位)。
  • 按钮只在会话输入框出现,欢迎 hero 态没有该单元格。
  • 目前不自动发送。要「点完直接发送」,需改 client.js 的 onClick,在 setDraft 后调用 inputActions.submit()。

生态背景:DSH 的理念是「一切皆插件」,本插件来自社区目录与个人仓库,与 DeepSeek / 幻方无官方从属关系,不属于官方应用商店收录。

结尾

这个插件的价值在于把「改写提示词」这一步留在 composer 内部完成:一次普通模型调用、一个按钮、一个诊断面板,不改变现有会话流。如果你主要在 DSH 里写提示词,且刚好在 0.2.2 版本的支持范围内,值得装一个试试。

  • 目录页:https://www.skillhub.cn/plugins/AZ-666316/dsh-prompt-optimizer-button
  • GitHub:https://github.com/AZ-666316/dsh-prompt-optimizer-button
羽毛球分组比赛记分
小程序二维码

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

Xiaoye