✦ 一句话 → 好提示词 · Prompt Polish
dsh-go 输入框上方的「✦ 优化提示词」胶囊:草稿写完别急着发,点一下——当前会话的模型(或你指定的模型)把它重写成一条更清晰的提示词:目标、背景、要求、交付形式一次补齐。确认页先给你看全文,复制还是追加,你说了算。
不发送消息 · 不改对话内容 · 不额外联网(只走你已配置的模型)
1.7.0 能做什么
- 9 套场景预设:默认、写代码、代码审查、排障、写文档、写作润色、数据与 SQL、需求与产品、学习讲解。每套都能改内容、能设为默认、能一键恢复出厂;内置的名字和 id 不会被改坏。
- 长度三档:详细(2–3 倍、≤800 字)/ 中等(≤3 倍、≤600 字,与 1.3.0 逐字一致)/ 简易(≤草稿长度、≤200 字),档位同时决定提示词措辞与输出上限。
- 模型按来源分组:会话默认 / 官方模型 / 其他来源(中转、第三方、聚合平台、识别不出的都归这里),可以点选、可以手填 provider + model、也可以「重新读取模型」;不改这里就跟随当前会话的模型。
- 其他开关:胶囊总开关、保留专有名词、保留代码与路径、确认页显示改写说明、附加指令(≤500 字)。
- 所有设置写在插件目录的
.config.json(原子写、gitignore),什么都不配时行为和 1.3.0 一样。 - 确认页可「再来一版」:不满意就重跑,同一个草稿、同一套设置;重跑时页面显示「正在优化…」,旧结果不会被当成新结果。确认页现在四个按钮:复制优化稿 / 追加到输入框 / 再来一版 / 取消。
- 上下文可自由设置:读几条最近消息(1–32)、总共多少字(200–8000),默认 12 条 / 2000 字。
- 长会话不再丢目标:上下文策略默认「智能」,三层拼起来——背景(压缩摘要 ≤20%,任务清单/会话标题 ≤8%,两者共存)、相关片段 35%(完整 BM25:IDF + 长度归一化,检索全部历史、只排除已进最近窗口的消息,取前 3 段;命中错误码/专有名词的片段优先)、最近对话 40%(预算紧时保最新)。切到「只看最近消息」就是 1.3.0 的旧行为。
- 可选的二次筛选:打开「让模型再筛一次相关片段」后,会多一次很小的调用(maxTokens 60),让模型从 BM25 候选里挑最相关的;失败或返回不可解析时自动回到 BM25 结果。
- 1.5.3 的稳定性修复也在:模型列表 60 秒自动重试 +「重新读取模型」、大列表裁剪不越限、设置页按会话隔离、模型超时自动回落本地稿;视图里任何列表都保证非空(空列表会被 App 画成「暂无数据」,有回归测试盯着)。
仓库
dsh-go-prompt-polish· 插件包名local-prompt-polish(安装目录用这个名字)

目录
为什么需要它
写一句话让模型干活,结果不好,多半不是模型笨,是那句话没写清:目标含糊、背景缺失、输出形式没定。
把「帮我把话说清楚」做成一个常驻的小按钮,比每次自己想“我该怎么问”便宜得多。它读的是你正在写的这段草稿,加上最近几轮对话,所以知道你在做什么。
交互

点胶囊 → 起优化任务(3 秒内返回)→ 打开确认页
· 正在优化…
· 就绪:原文 + 优化稿全文 + 三个按钮
[复制优化稿](主) [追加到输入框] [再来一版] [取消]
| 按钮 | 效果 | 输入框 |
|---|---|---|
| 复制优化稿 | 只写剪贴板 | 不动;长按输入框 → 全选 → 粘贴 = 整体替换 |
| 追加到输入框 | insert |
App 的语义是合并,优化稿接在原文后面 |
| 再来一版 | 重跑同一个草稿 | 不动;期间确认页显示「正在优化…」 |
| 取消 | 仅提示 | 一个字都不动 |

- 预览:原文与优化稿全文(≤1900 字)
- 可编辑:不能,面板只有文本组件;要改就在输入框里改
- 光标:由 App 放在文末,插件无法设置选区
- 空草稿 / 少于 4 个字:只提示,不动输入框
为什么没有「一键替换」
dsh-go 原生插件的 effect 白名单只有 insert / copy / toast / command / open / link / refresh / patch,没有清空或替换草稿的能力;App 端把 insert 实现成合并进草稿(insertIntoComposer,注释写的是 Into the composer, at the caret)。
所以插件写进输入框只能是追加,删不掉用户已经输入的字。整体替换目前只能靠「复制 + 全选粘贴」这一步用户手势。
要一键替换,需要 App 端新增 replace effect —— 已作为建议提交给 dsh-Go:
ccch1mneyyy/dsh-Go#1148。等它落地,本插件会先探测能力再用。
改写质量:不是续写
草稿被定义为「被改写的对象」:不执行、不回答、不续写;不许以草稿原句开头;不许「原文/改写后」这类标签;优化方向只限“目标 / 背景 / 要求与约束 / 交付形式 / 去歧义”;≤ 草稿 3 倍且 ≤ 600 字。
输出后处理会切掉开头复述草稿的整段(按标点切句、去标点做前缀比对,命中 ≥8 字才算复述);整段复述 → 判失败,用更严格提示重试一次;仍失败 → 本地整理兜底(去“帮我/麻烦/能不能/please”这类填充、合并重复标点、三句以上分条)。
细节见 docs/architecture.md。
上下文与模型路由
- 上下文:同一会话最近 8 条 user/assistant 文本,每条截 320 字,总量 ≤ 1600 字。
- 路由:当前会话的模型 → 该会话日志里最后一次
request/header→ 部署默认模型。三级都拿不到,就走本地整理,不发网络请求。
设置

真机截图(App 1.0.15)· 1.6.0 · 只裁掉了系统状态栏(预设 / 长度 / 模型页截图取自 1.5.2–1.5.3,功能未变;「其他」页与确认页为 1.6.0)
| 长度 | 模型 | 其他 |
|---|---|---|
![]() |
![]() |
![]() |
三条路都到同一个面板 polish-settings:
- 输入框上方的 + → 「优化设置」;
- 会话详情 → 插件 → 「提示词优化设置」;
- 停用状态下点胶囊:弹提示「「优化提示词」已在设置里停用 · 打开设置可重新启用」,同时直接打开设置页。
四块各管一件事,默认值合起来就等于 1.3.0 的行为:
| 块 | 管什么 | 写进配置的字段 | 默认 |
|---|---|---|---|
| 预设 | 9 套场景模板,给改写追加一段固定要求;内置预设可改内容、不能改名或删除 | presetId、presets[] |
只有默认(无附加要求) |
| 长度 | 详细 / 中等 / 简易三档,同时决定提示词里的篇幅要求和输出上限 | length |
medium(与 1.3.0 逐字一致) |
| 模型 | 固定一个本地已配置的模型(列表按「官方 / 其他来源」分组),只影响「优化提示词」这一次改写 | modelProvider、modelModel |
空 = 跟随当前会话的模型 |
| 其他 | 胶囊总开关、两个「保留」开关、改写说明、附加指令 | enabled、keepTerms、keepCode、showNotes、allowExtra、extra |
开关全开、showNotes 关、extra 空 |
9 套内置预设(括号里是适用场景,均可在设置页改内容):
| 预设 | 场景 | 预设 | 场景 |
|---|---|---|---|
| 默认 | 通用改写 | 写文档 | README、使用说明 |
| 写代码 | 新功能、改实现 | 写作润色 | 邮件、文案、汇报 |
| 代码审查 | PR、片段审查 | 数据与 SQL | 查询、指标口径 |
| 排障 | 报错、行为异常 | 需求与产品 | 用户故事、验收标准 |
| 学习讲解 | 概念、原理入门 |
点一行 → 改「预设指令」→ 保存,改动写进 .config.json(内置预设存成同 id 的覆盖条目);「恢复此预设默认」只还当前这一套,「其他 → 恢复默认设置」会连自定义预设一起清掉。模型页按来源分组:会话默认 / 官方模型 / 其他来源(中转、第三方、识别不出的都归这里,组内保持宿主顺序);可以点选,也可以手填 provider / model(只填一个不保存)。
保存结果显示在页头那行 callout:「已保存 · 21:12」,或者「写入配置失败,改动没有生效」/ 校验提示(名称不能为空、档位无效、内置预设不能改内容、这已经是默认预设、自定义预设最多 12 个、附加指令超过 500 字…);一次都没保存过时显示「还没有保存过,当前用的是默认值」。没有改动时不会凭空生成配置文件。
- 保存成功 = 当场写进
.config.json,下一次点胶囊就按新设置改写,不用重启引擎。 - 打开「确认页显示改写说明」后,确认页会多一块:来源 · 档位 · 预设 · 专有名词 · 代码与路径 · 字数变化。
- 三档的具体字数上限、每张表单的按钮与 action 名、v1 降级页长什么样:见 docs/settings.md。
- 「一键替换」的限制没有变化:设置只改提示词,不改 effect 白名单。
安装
# 1) 放进插件目录
mkdir -p "$DSH_HOME/dsh-go/plugins"
curl -L -o /tmp/p.tgz \
https://github.com/usi112/dsh-go-prompt-polish/releases/download/v1.7.0/local-prompt-polish-1.7.0.tgz
tar xzf /tmp/p.tgz -C "$DSH_HOME/dsh-go/plugins/"
# 2) 注册进当前 profile(手机本机引擎是 web)
dsh plugin --profile web add "$DSH_HOME/dsh-go/plugins/local-prompt-polish"
装完不用重启就有胶囊;lib/ 里的代码改过才要在 App「设置 → 引擎 → 重启引擎」。
卸载:dsh plugin --profile web remove local-prompt-polish。
需要 dsh ≥ 0.2.1-rc.2、App ≥ 1.0.11(原生插件协议 v1)。
兼容性
| 组合 | 结果 |
|---|---|
| dsh 0.2.2-rc.1 · App 1.0.15 · Android 16 | 已实测(胶囊 + 确认页 + 复制/追加/取消) |
| 生成回复进行中 | 胶囊会收起(App 行为),回复结束后可点 |
| 没有可用模型 | 立即返回本地整理稿,不弹等待 |
旧 App(caps.components 不含表单组件) |
设置页降级为 v1 摘要页:只显示当前值 + 「切换长度档」「开/关胶囊」两个按钮,配置照样能改 |
| 设置页(1.4.0) | 已在 App 1.0.15 真机走通:预设 / 长度 / 其他三个 tab、保存结果 callout、开关与恢复默认(见 docs/preview/settings-*.jpg);另有检查器 + 测试宿主覆盖 8 个视图、9 个 action、v1 降级、写失败不落盘 |
| 老版本 App(无 panels 能力) | 确认页不出现,插件会退化——建议升级 App |
自测
node --check lib/index.js && node --check lib/polish.js
node test/selftest.mjs # 210 项断言
插件检查器(需要本机装了 dsh-go 的 skill kit):
node "$DSH_HOME/skills/dsh-go-plugin/kit/bin/check.mjs" . --load
# → 胶囊 1 · 面板 2 · 加号工具 1;zh/en × chat.panel/session.tab/features 八个视图都能画
自测覆盖:空/过短草稿、只开确认页不改输入框、loading→ready、复制不写回、追加显式写回、取消零写回、无模型立即出本地稿、模型抛错仍有稿,以及用 bridge 自己的 effects.js 校验 open/insert/copy/toast 形状。
1.4.0 另加设置侧断言:配置缺文件=全默认、脏值逐项回落、同一 mtime 粒度内的同尺寸外部写入也能读到新值(缓存按原文比对)、预设增改删与「设为默认」、内置预设只读、长度三档(含 simple 的 500 字上限与 5 条上限)、systemPrompt 的第 8 条预设与第 9 条附加指令、showNotes 控制确认页的改写说明块、停用分支的两个效果、旧 App 的 v1 摘要页、恢复默认。
常见问题
点了没反应? 生成回复期间胶囊会收起;等这一轮结束再点。空草稿或少于 4 个字只会弹提示。
为什么粘贴后原文还在? 说明没有先「全选」。长按输入框 → 选「全选」→ 再粘贴,选区会被整体替换。
优化稿比原文长很多? 说明模型在扩写。本插件的系统提示禁止续写/复述;如果还遇到,把草稿和输出发 issue,我加样本。
会不会把我的对话发出去? 只发给你自己配置的模型(当前会话那个),不经过任何第三方服务;.log.jsonl 只记长度和状态,不记文本。
模型列表一直是空的或旧的? 1.5.3 起模型缓存只有 60 秒,空结果或读取失败会自动重试;模型页还有「重新读取模型」按钮。仍为空就检查宿主是否已经配置了模型服务。
模型页显示「暂无数据」? 1.5.1 修过状态行与空列表,1.5.3 又修掉「固定模型说明行」这个新增的空列表;现在视图里每个列表都保证非空,并有回归测试盯着。升级后在 App「设置 → 引擎 → 重启引擎」一次即可。
重启引擎后胶囊没了? 检查 dsh plugin --profile web list 里还有没有 local-prompt-polish,以及插件目录是否被删。
为什么改了设置没生效? 两个常见原因:一是改的是 lib/ 里的代码 —— 那要 App「设置 → 引擎 → 重启引擎」;二是确认页已经开着 —— 档位、预设、附加指令都要等下一次点胶囊才用上,重开确认页即可。配置文件本身每次点胶囊都会重读(读一遍文件原文和上次比对,相同就复用解析结果),手改 .config.json 不用重启。
配置存在哪、怎么备份或恢复默认? 插件目录下的 .config.json,和 .log.jsonl 同一个目录($DSH_HOME/dsh-go/plugins/local-prompt-polish/)。拷走这个文件就是备份,拷回来就是恢复;恢复默认在设置页「其他 → 恢复默认设置」,确认后整份写回默认值,自定义预设一起清掉。
停用后胶囊怎么回来? 设置页 → 其他 → 打开「启用「优化提示词」胶囊」→ 保存。停用状态下点胶囊,被提示的同时就会打开设置页,从那里也能直接开回来。
目录结构
local-prompt-polish/
├── package.json # dshGo 清单:胶囊 + 两个面板 + 加号工具
├── cordis.patch.yml # 注册进 profile
├── lib/
│ ├── index.js # 胶囊处理、确认页数据/动作、改写说明
│ ├── config.js # 配置读写:默认值、normalize、原文比对缓存、原子写、预设
│ ├── settings.js # 设置面板 polish-settings:v2 表单 / v1 降级、9 个 action
│ ├── polish.js # 路由解析、上下文抽取、模型改写、复述检测、长度档、本地兜底
│ └── log.js # .log.jsonl 追加写(只记长度与状态)
├── test/selftest.mjs # 210 项断言
├── docs/
│ ├── architecture.md # 原理与边界
│ ├── settings.md # 设置项清单与页面结构
│ └── preview/ # 真机截图:胶囊 / 设置页三 tab / 确认页;paste 仍是示意图
├── .config.json # 运行时生成,已 gitignore
├── .log.jsonl # 运行时生成,已 gitignore
└── market-entry.json # 插件市场条目
更新日志
见 CHANGELOG.md。



No comments yet. Be the first to write one.