DeepSeek Harness 提示词增强插件

前言

在 DeepSeek Harness(DSH)里写智能体或会话时,经常需要把口语化的需求转成可执行的提示词。WorkBuddy 的「增强提示词」功能能做这件事,但它只在 WorkBuddy 环境内可用。下面介绍的 dsh-prompt-enhance 插件复用同样的增强规则,以独立方式在 DSH 中运行:在输入框添加「增强」按钮,并提供一个 enhance_prompt Host 工具。

插件定位

这个插件由维护者 sun04222 提供,属于「模型推理」分类。它只做一件事:把用户输入的原始提示词改写成更清晰、更具体的提示词,只返回改写结果本身。增强规则与 WorkBuddy 的「增强提示词」对齐,但指令文本由本项目自行撰写,不含任何第三方文本,可脱离 WorkBuddy 独立运行。

核心能力

两个入口

  • 输入框右侧的「✦ 增强」按钮:点击后把当前草稿发给插件增强,成功后整段替换草稿并记住原文;草稿被手动改动后自动回到「增强」状态。
  • Host 工具 enhance_prompt:接受参数 text(必填)和 model(可选),返回增强后的提示词。

共同管线

两者使用同一条管线处理请求:

  1. 空输入短路:text.trim() === '' 直接返回 empty_input,不发起模型调用。
  2. 解析模型路由:参数 model > 插件配置 provider/model > 当前默认模型(agentDefaultModel.currentSelection())。
  3. 单次、非 agent 式补全:一条 system 消息 + 一条 user 消息(用原文替换 {input}),不带工具、不带会话历史、不做多轮。
  4. 收集文本:累加流式 text-delta;finish.reason.kind === 'error' | 'aborted' 记为失败。
  5. 后处理:trim → 剥掉首尾一个包裹引号字符 → 若 trim 后为空则失败;否则原样返回。

整个过程不执行用户提示词里的任何请求,只产出「改写后的提示词」。

输入输出格式

输入(工具参数)

{
  "text":  "帮我写一个登录页面",   // 必填:用户原始提示词
  "model": "deepseek/deepseek-chat" // 可选:model-id 或 provider/model-id
}

text 不预设格式,中/英/混合语言、多行、含代码片段都可;空白输入返回 empty_input。

输出(固定信封)

// 成功
{ "success": true, "text": "请解释这段代码的主要功能..." }

// 失败
{ "success": false, "text": "", "code": "llm_error", "error": "Enhanced result is empty" }

code 可取值:empty_input、llm_unavailable、llm_error、unknown。

增强规则

增强遵循与 WorkBuddy 一致的规则,但措辞为本项目原创:

硬约束

  • 语言一致:输出必须与输入同语言;中文入 → 全中文,英文入 → 全英文,混合入 → 自然混合。
  • 只输出提示词:不加解释、前言、Markdown 围栏、标签或分析。
  • 不输出语言元信息:不写「用户输入是中文」这类说明。
  • 保留原意:保留原请求的意图、主题、约束和目标输出类型,不回答该请求。

增强要求

  • 做实质性增强:澄清任务、范围、约束、期望产出。
  • 原提示词已经清楚时,做轻度润色,而不是原样返回。
  • 完整且简洁,不得以未完成的列表、悬空连词或冒号结尾。
  • 不添加无关要求、无依据的事实或多余章节。

分析与改写原则

先评估:主目标、歧义与缺口、指令清晰度、缺失的上下文;再应用:写清具体指令、补必要上下文、设定显式参数与约束、规定输出结构、给相关示例、语气与复杂度匹配用途、删除冗余。保持原目标,只做现实可加的改进。

明确禁止

  • 不索要指南/教程(除非用户主动要)、不索要代码片段。
  • 不引入用户未提及的具体技术栈。
  • 不解释「怎么做(HOW)」,聚焦「做什么(WHAT)」。
  • 不回答提问,而是把它扩写得更具体。

长度

提示词要求「约 800 字符以内」。这是模型侧软约束,代码不做截断,也不因超长报错。

适用场景

适合以下场景:

  • 用户说「帮我优化/增强/润色这个提示词」「把这句话改成能直接发给模型的提示词」。
  • 把一句口语化需求(如「给我的狗做个网站」)扩成可执行的任务描述。
  • 将提示词交给另一个模型/另一个会话前,统一做一次清晰化。
  • 批量为已有提示词库做统一风格的改写(逐条调用)。

不适用场景:

  • 代替执行用户请求(本工具只改写提示词,不写代码、不解释代码)。
  • 事实检索、翻译、摘要、改写文章正文(会被语言一致 + 只输出提示词两条规则带偏)。
  • 需要多轮追问才能澄清的需求——本工具单轮、无对话状态。

安装与启用

从 GitHub 安装

dsh plugin --profile web add github:sun04222/dsh-prompt-enhance

安装后在设置 → 插件里能看到「提示词增强」;前端按钮需要刷新一次页面。

配置(cordis.patch.yml)

- insert:
    - id: dsh-prompt-enhance
      name: 'dsh-prompt-enhance'
      config:
        provider: ''      # 默认模型 provider;空则用当前默认模型
        model: ''         # 默认模型 id;空则用当前默认模型
        timeoutMs: 60000  # 单次补全墙钟上限(毫秒)

路由优先级:工具参数 model > 配置 provider+model > 当前默认模型。

本地开发

安装后无需重启即可用;再次修改代码后需把该 bundle 关一次再开,才会重新载入新模组。

node test/prompt.test.mjs                  # 纯函数单测(10 项,进程内运行)
node --check index.js; node --check prompt.js; node --check client.js

边界条件

  • 输入为空白 / 只有换行 → empty_input,不调用模型。
  • 模型返回空白或只有引号 → llm_error / Enhanced result is empty。
  • 模型返回被引号包裹 → 剥掉首尾各一个引号字符(" ' “ ” ‘ ’)。
  • 输入含 $&、$'、$` → 按字面量保留。
  • 超时 → 默认 60s(timeoutMs 可配),返回 llm_error。
  • 调用被取消 → 返回 llm_error。
  • 超长输入 → 不截断、不预校验;超出模型上下文时由 provider 报错 → llm_error。
  • 超长输出 → 不截断(800 字符仅是提示词要求)。
  • 并发 → 无共享状态,可并行调用。
  • 无可用模型 → llm_unavailable,不影响插件其余功能。

注意事项

  • 插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。
  • 插件依赖 DSH 的 llm 服务(有可用模型路由即可),不依赖 WorkBuddy 安装目录、其 sidecar、任何网络私有接口、任何 npm 依赖。
  • 指令文本为本项目原创,与 WorkBuddy 规则一致但措辞不同,因此模型的文风可能与原应用略有出入。

生态背景

DSH 理念是「一切皆插件」。社区目录(https://www.skillhub.cn)是独立站点,与 DeepSeek / 幻方无官方从属关系,此处介绍仅为社区项目。

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

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

小夜