前言¶
在 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 行为)¶
- 会话中途安装的 bundle 只在下一次重载时挂载;若
plugin_manager list_plugins看不到include:prompt-optimize而 Config 仍列出该包,需重启dsh web。 - 任何
plugin_manager包操作会清理包内node_modules,可能导致@deepseek-ai/schemastery等链接失效。操作后在本包目录重建符号链接即可(README 给出完整命令),无需重启。
从源码改 Host 半边时需构建:
npm run typecheck # tsc --noEmit
npm run build # tsc -> lib/index.js
典型用法¶
- 安装 bundle 并确保 entry 已激活(必要时重启
dsh web)。 - 在 设置 → 通用设置 → 提示词优化 按需设置占位符、替换模式、超时与固定路由(或留空以跟随当前会话模型)。
- 在会话输入框写好草稿(无附件、无引用 chip、非
/命令开头),点击 优化提示词,等待「优化中…」结束。 - 查看写回结果;不满意用编辑器撤销一次。若失败,看按钮旁提示与悬停详情,或打开调用日志 / Console 排查 provider 与路由。
适用场景与注意¶
适合经常在 DSH Web 里打磨 Agent 提示词、又希望沿用当前会话模型与鉴权、不想离开输入框的开发者。
插件以当前 dsh 进程权限运行,安装前应阅读 GitHub 仓库 源码与 MIT 许可证。社区目录 skillhub.cn 插件页 为独立站点信息,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-prompt-optimize 把「用模型改提示词」收进 Web 输入框一侧:同会话路由、原地回填、可撤销,配置与日志也留在 DSH 设置与 UI 里。进一步了解与安装见 目录页 与 GitHub。