前言¶
在 DSH(DeepSeek Harness) 里发消息前,输入框里常见的是一句念头——「帮我写个脚本批量重命名文件」「这个报错怎么修」。模型只能据此猜系统、规则和边界,猜错就要多轮澄清。有人会在外部先写长提示词再粘贴;也有人直接发送,把补全意图的成本留给对话轮次。
下面介绍社区插件 dsh-enhance-prompt(维护者 adcx222):在发送前插一步,用当前路由上的 LLM 做单轮改写,把草稿展开成约束更清楚的指令,写回输入框后再由你决定是否发送。插件归类为客户端,以 dsh.bundle 形态接入 DSH Desktop / dsh web。
这是什么¶
dsh-enhance-prompt 给 DSH 输入框工具栏增加一个 ✨ 按钮(28×28 纯图标,位于发送按钮左侧)。点击后读取当前草稿(含 composer 里的 @ 文件引用),调用宿主端接口做一次单轮、无工具的文本改写,再把结果写回输入框。
它只改写,不执行:不回答问题、不调用工具、不建会话、不写对话历史。改写走 DSH 原生的 ctx.llm.stream(),模型与 provider 默认跟随当前会话,也可在配置里写死。
兼容 DSH 版本:>=0.2.0-rc.2 <0.3.0(见仓库 package.json 的 engines.dsh)。
核心功能¶
改写边界¶
- 工具栏一键触发:通过 MutationObserver 定位 composer,在工具栏注入按钮;分栏或多会话时每个 composer 各挂一个。
- 单轮、无工具:
tools为空,由 API 保证不跑工具链。 - 不污染历史:增强过程不进对话记录。
- 跟随语言:中文进中文出,英文进英文出,系统提示词要求不附加语言标签。
- 写回路径:优先
inputActions.setDraft(Lexical);失败则编辑命令;再失败则复制到剪贴板,不直接改contenteditable。 - 请求期间防覆盖:若在等待结果时继续输入或加文件,增强结果只进剪贴板,不覆盖当前草稿。
- 用量可见:右键按钮可查看累计输入/输出 token、调用次数、失败次数(本地
stats.json)。 - 模型可配:
provider/model留空则跟会话;解析顺序为请求体 → 当前会话 → 配置;两者都解析不出时返回code: no_model。
提示词设计(窄任务)¶
改写用的系统提示词明确要求:只改写、不回答;不编造技术或事实;输出语言与输入一致;中文约 200–350 字、英文约 300–450 字;只输出改写后的提示词。目的是避免模型「顺手回答」而引入未提及的栈或事实。
安装与启用¶
插件以 DSH 进程权限运行,安装前建议阅读 GitHub 仓库 源码与 MIT 许可证。
插件市场¶
在 DSH 中打开 设置 → 插件市场,搜索 dsh-enhance-prompt,安装。
命令行(GitHub 源)¶
市场未收录或需要跟踪 main 时:
dsh plugin --profile web add github:adcx222/dsh-enhance-prompt
手动安装(Windows 路径示例)¶
README 给出的步骤概要如下:
- 将仓库放到
%APPDATA%\dsh-desktop\harness\plugins\dsh-enhance-prompt - 在
profiles/web/package.json的dependencies增加"dsh-enhance-prompt": "link:../../plugins/dsh-enhance-prompt" - 在同一文件的
dsh.profile.bundles数组增加"dsh-enhance-prompt" - 运行
harness\.desktop-bin\pnpm.cmd install - 重启 DSH
卸载时从 bundles 与 dependencies 移除、执行 pnpm install、重启并删除插件目录。
配置¶
在 cordis.patch.yml 的 config 下可覆盖默认值(片段来自 README):
- insert:
- id: enhance-prompt
name: 'dsh-enhance-prompt'
config:
provider: ''
model: ''
maxTokens: 8192
timeoutMs: 60000
maxInputChars: 5000
| 字段 | 默认 | 说明 |
|---|---|---|
provider |
空 | 留空则跟随当前会话的模型 provider |
model |
空 | 留空则跟随当前会话的模型名 |
maxTokens |
8192 |
单次改写输出上限(推理模型的思考也占额度) |
timeoutMs |
60000 |
请求超时(毫秒) |
maxInputChars |
5000 |
草稿超长则直接拒绝,不发起调用 |
典型用法¶
README 中的示例如下。输入约 13 字:
帮我写个脚本批量重命名文件
点击 ✨ 后,输出会展开为带确认项与边界的指令(README 示例约 203 字),例如要求先确认操作系统、路径、匹配规则、重命名规则、冲突处理,并默认先预览等。你可先审阅改写结果,不满意再手改,满意后再点发送。
工作原理(概要)¶
浏览器端 lib/client.js 注入按钮并读取草稿,向宿主 POST /enhance-prompt 提交 { text };宿主 lib/index.js 校验长度、解析 provider/model,调用 ctx.llm.stream(),拼装文本块并记账到 stats.json,返回 { success, text, tokens }。客户端再写回草稿。路由经 ctx.effect 随插件生命周期注册;GET 同路径可读累计统计。
仓库无单独构建步骤,lib/ 即为产物;修改后重启 DSH 或等待 HMR 重组。
适用场景与注意¶
适合:经常在 DSH 里用短句起手、又希望发送前把意图结构化的人;希望增强走本机已配置的模型路由、且不想把「润色」混进对话历史的人。
注意:
- DOM 注入:依赖 composer 结构(编辑器、发送按钮、file input)。上游 UI 改版可能导致按钮不出现(通常无报错)。
- 一次一段:只处理整段草稿,不处理选中片段。
- 统计本地:
stats.json在插件目录,不参与云端计量。 - 社区插件:目录页在 SkillHub,与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,安装第三方 bundle 前请自行评估权限与源码。
结尾¶
dsh-enhance-prompt 在发送前增加「单轮改写」一步:不替模型执行任务,只把输入框里的念头改成更清晰、带约束的提示词,并尽量通过官方 InputActions 安全写回。需要进一步了解特性、限制与开发布局,可看插件目录页与仓库 README。
- 目录页:https://www.skillhub.cn/plugins/adcx222/dsh-enhance-prompt
- GitHub:https://github.com/adcx222/dsh-enhance-prompt