dsh-prompt-optimize:在 DSH Web 输入框里一键优化提示词

前言

在 DSH Web UI 里写 Agent 提示词时,常见做法是整段复制到外部编辑器或另开会话,让模型帮忙改写后再贴回输入框。这样会打断当前会话上下文,也容易在来回粘贴时丢附件、引用 chip 或 /命令 前缀。下面介绍一个客户端原生插件:在发送按钮左侧增加「优化提示词」,用当前会话自己的模型路由原地改写草稿,并通过编辑器原有撤销路径一次还原。

这是什么

dsh-prompt-optimize(维护者 ClockworkParrot)是 DSH Web UI 的原生插件,分类为客户端。它在输入区工具行、发送按钮左侧挂载按钮(插槽 conversation.input.right),点击后由 Host 调用已配置的 LLM 路由,按内置 system prompt 规则优化当前草稿并写回输入框;不满意时一次撤销即可回到原文。

工具行示意:

输入区工具行:[引号 ▾] [思考强度 ▾] [优化提示词] [发送]
                                    ^ conversation.input.right

Bundle 通过 cordis.patch.yml 只做自包含的 insert,不改动 DSH 核心文件。

核心功能

输入区按钮

场景 行为
草稿为空 禁用,提示「草稿为空」
含附件、引用 chip,或以 /命令 开头 禁用
输入框正在提交 / 判定中 / 已被认领 禁用
请求进行中 旋转图标 +「优化中…」,不可重复触发
调用成功 原地替换或追加草稿,一次撤销还原
调用失败 草稿不变,按钮旁一行短错误

若优化请求进行中你继续改草稿,结果不会覆盖你的编辑,按钮提示「草稿在优化期间被改动,未回填」。

配置与设置页

Host 与 Client 共用同一份 Config schema,在 设置 → 通用设置 → 提示词优化(settings.general.item,id prompt-optimize)编辑六个字段,支持保存、恢复默认,以及从 ctx.remote.session.modelCatalog() 拉取的 Provider / 模型下拉(目录未就绪时可手填)。改完配置热替换,无需重启 dsh web。

字段 类型 默认值 含义
datePlaceholder string {{DSH}} 草稿中日期/时间位置替换成的占位文本
replaceMode 'replace' \| 'append' 'replace' 原地写回,或空一行后追加优化结果
timeoutMs number(1000…2147483647) 30000 单次模型调用端到端超时
provider string '' 固定 provider;留空则跟随会话模型
model string '' 固定模型 id;provider 未设时忽略
reasoningEffort string '' 固定路由下的推理强度;留空则跟随路由

provider 与 model 须成对填写才固定路由;半填会被设置页拒绝。插件不接收 base URL 与 API Key,鉴权走 ctx.llm 背后的 provider 适配器。

也可在 profile patch 里直接写 config,例如:

- id: prompt-optimize
  name: dsh-prompt-optimize
  config:
    datePlaceholder: '[[DATE]]'
    replaceMode: append
    timeoutMs: 20000
    provider: deepseek-account
    model: deepseek-flash

优化规则(system prompt)

模型只返回优化后的提示词正文(无前言、引号或代码围栏),并遵守六条约束:不添加情景假设;不写具体日期时间地点(用 datePlaceholder 替换);保留原语言;路径、标识符、命令、代码、数字、URL 等原样保留;只补充原稿隐含信息;只输出正文。

模型路由

Host 每次调用按顺序解析:显式配置的 provider + model → 会话 modelSelection → 会话 header 记录 → agentDefaultModel.currentSelection()。调用走 ctx.llm.prepareCall / PreparedLlmCall.stream,继承部署的重试与凭据策略。

错误与诊断

失败时按钮旁显示简短文案(如 NO_MODEL、TIMEOUT、PROVIDER 等);悬停可见 Host 返回的路由、HTTP 状态、错误码与耗时。错误行可展开调用日志面板(内存保留最近 20 条,可复制),浏览器 Console 也会输出 [prompt-optimize] 日志。

安装与启用

在 DSH Web GUI / Agent 里把本包目录作为 bundle 安装:

plugin_manager({ action: "install_bundle", target: "<本包的绝对路径>" })

首次安装以及新增 npm 依赖后的重装,需要重启 dsh web(Host 模块表在启动时固定)。纯客户端改动可由客户端重载器拾取;日常覆盖文件可先 set_plugin 禁用再启用,README 说明两种方式下纯客户端改动通常不必重启。

安装时注意的两点(DSH 行为)

  1. 会话中途安装的 bundle 只在下一次重载时挂载;若 plugin_manager list_plugins 看不到 include:prompt-optimize 而 Config 仍列出该包,需重启 dsh web。
  2. 任何 plugin_manager 包操作会清理包内 node_modules,可能导致 @deepseek-ai/schemastery 等链接失效。操作后在本包目录重建符号链接即可(README 给出完整命令),无需重启。

从源码改 Host 半边时需构建:

npm run typecheck   # tsc --noEmit
npm run build       # tsc -> lib/index.js

典型用法

  1. 安装 bundle 并确保 entry 已激活(必要时重启 dsh web)。
  2. 在 设置 → 通用设置 → 提示词优化 按需设置占位符、替换模式、超时与固定路由(或留空以跟随当前会话模型)。
  3. 在会话输入框写好草稿(无附件、无引用 chip、非 /命令 开头),点击 优化提示词,等待「优化中…」结束。
  4. 查看写回结果;不满意用编辑器撤销一次。若失败,看按钮旁提示与悬停详情,或打开调用日志 / Console 排查 provider 与路由。

适用场景与注意

适合经常在 DSH Web 里打磨 Agent 提示词、又希望沿用当前会话模型与鉴权、不想离开输入框的开发者。

插件以当前 dsh 进程权限运行,安装前应阅读 GitHub 仓库 源码与 MIT 许可证。社区目录 skillhub.cn 插件页 为独立站点信息,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-prompt-optimize 把「用模型改提示词」收进 Web 输入框一侧:同会话路由、原地回填、可撤销,配置与日志也留在 DSH 设置与 UI 里。进一步了解与安装见 目录页 与 GitHub。

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

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

小夜