前言¶
在 DeepSeek Harness(DSH)里写提示词,常见问题是:语法和指代不清、步骤顺序写反、约束和目标拆散,模型会按字面理解,结果偏离本意。改完再发可以,但缺少一条「只改表述、不替你回答」的旁路;会话日志只追加、不能截断,改已发消息或换一条回答路径时,还要自己记分支。
下面介绍社区插件 dsh-input-optimizer(维护者 Xxsttb,分类:模型推理)。它在输入框模型选择器左侧增加四角星按钮,用当前对话模型(默认低推理强度)重写未发送草稿;并提供已发消息编辑、无记忆重新生成、右侧记忆树,以及在工具已改写工作区时禁用误导性编辑。代码与文档标注为在用户要求下由 AI 生成。
这是什么¶
dsh-input-optimizer 是 DeepSeek Harness 插件,包名 dsh-input-optimizer,当前版本 1.0.0(MIT)。Host 侧调用 ctx.llm.stream() 做草稿重写;Web 客户端注入会话 UI、右侧栏与设置页。它不生成回答、不添加事实,交还的是同一请求的更清晰表述。
生态上,DSH 强调「一切皆插件」;SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系。源码与说明见 GitHub 仓库。
核心功能¶
1、发送前重写草稿¶
布局示意:
[ ★ ] [ 模型选择器 ] [ 发送 ]
^
按钮在这里
按下四角星后,Host 把当前草稿送到当前对话选中的模型(默认 low 推理强度),重写结果写回输入框,发送前可过目。重写是一次旁路调用:不带 session id、不进对话日志、不触发监听 llm/stream 的 agent-loop。
重写优先级(README 中的五项目标):
| # | 目标 | 含义 |
|---|---|---|
| 1 | 保留意图 | 不添加回答、观点、举例或开场白 |
| 2 | 修正语言 | 语法、拼写、标点、指代、机翻腔;保留原语言与语域 |
| 3 | 修正执行顺序 | 步骤顺序、前置条件、约束与对象分离等问题 |
| 4 | 点明明显隐含前提 | 不发明新需求 |
| 5 | 收紧 | 删废话与重复 |
硬规则包括:代码、命令、路径、标识符、数字、URL、报错与引用逐字节保留;Markdown 结构与列表符号原样保留;输出仅重写正文,无 Rewritten: 等前缀。
行为要点:
- 重写进行中若你继续编辑,结果不会覆盖新输入,按钮会提示草稿已变。
- 整份草稿被替换,一次撤销可恢复。
- 空草稿在联系提供方前即被拒绝。
2、编辑已发送的用户消息¶
用户消息旁悬停出现铅笔。点击后不动输入框里的草稿,而是把输入框换成编辑区,原消息仍在对话中不变。
- 默认 Ctrl+Enter(macOS 为 Cmd+Enter)或点发送;单独 Enter 换行。
- Esc 或取消按钮放弃编辑。
- 发送后 Harness 分叉(fork):分叉点在该消息之前的事件,编辑后文本进入新分支;原消息与原回复留在原对话。会话列表会出现标题递增的新条目。
3、不继承记忆地重新提问¶
每条模型回复旁有圆形重启箭头。它在全新会话里只发送那一条用户消息,不带此前轮次;工作目录相同,但模型看不到更早上下文或当前这条回复改过的文件状态。原回答保留不动;新回答与编辑分支一样,纳入同一问题的版本记录。
4、记忆树¶
右侧栏 记忆树 标签页展示「每个问题及其收到的每个回答」,而非完整谱系图。
- 流式(默认):随当前阅读对话实时生长。
- 完整:连上版本记录里更早对话切出的分支。
节点显示完整提问文本;悬停可见问答摘要。多回答时标出来源(原始、改写问题、无记忆重新生成)及 ‹ N/M › 切换,与会话内箭头、内联块共用同一份本地选择状态。回答行可 ↗ 打开对应对话(先还原归档会话);分支回答右键可「删除这个分支」(仅从版本记录移除,不删 Harness 磁盘上的会话)。
5、阻止误导模型的编辑¶
若某轮回复用过会留下痕迹的工具(如 write、edit、shell),或消息 @ 过的文件指纹与插件首次记录时不一致,铅笔与重新生成会禁用并显示原因。仅读取类工具(如 read、grep、web_fetch 等 README 白名单)时允许编辑/重生成。纯聊天回复保持可编辑。对话第一条消息的铅笔为禁用态(无法分叉)。
环境要求¶
- DeepSeek Harness 0.2.0-rc.2 或更新(
package.json中dsh.engines.dsh)。 - 含 Web UI 与设置服务的 profile(desktop / web 等),设置页依赖
@deepseek-ai/dsh-settings与@deepseek-ai/dsh-config-editor。 - 至少一个可用 LLM 提供方。
安装与启用¶
插件以当前 DSH 进程权限运行;安装前应阅读源码与 MIT 许可证,确认可接受其行为。README 未提供 dsh plugin add github:… 形式;应使用本地路径或 tarball。
在仓库检出目录:
dsh plugin --profile <profile> add /absolute/path/to/dsh-input-optimizer
或打包后安装(profile 实际存储形态):
pnpm pack
dsh plugin --profile <profile> add ./dsh-input-optimizer-1.0.0.tgz
重新加载应用后,可验证 Host 半侧:
curl http://127.0.0.1:19387/plugins/input-optimizer/models
返回 {"ok":true,"providers":[…]} 表示 Host 已就绪;星形按钮在下次页面加载后出现。
卸载:
dsh plugin --profile <profile> remove dsh-input-optimizer
设置可能留在 profile 的 cordis.patch.yml 的 input-optimizer 条目下,需手动删除才能彻底清理。不要用 link: 安装再换 tarball(可能清空源目录);不要手工改 profile 的 package.json / node_modules,应始终用 dsh plugin add。
设置¶
打开 设置 → 输入优化器。配置写入 profile 的 cordis.patch.yml,重启后保留。
| 字段 | 默认值 | 用途 |
|---|---|---|
| 重写指令 | 内置提示词 | 每次重写的 system 提示;清空保存即恢复默认 |
| 跟随对话的模型 | 开 | 开:用当前对话模型;关:用下方固定提供方/模型 |
| 提供方 / 模型 | 空 | 关闭跟随时使用,或跟随不可用时的回退 |
| 推理强度 | low | none 表示不发送该字段 |
| 最大输出 Token | 4096 | 0 表示不设上限 |
| 超时 | 60000 ms | 单次重写墙钟上限 |
| 发送编辑用 | Ctrl+Enter | 可选 Ctrl+Shift+Enter、Alt+Enter 或仅按钮 |
典型用法¶
- 在 Composer 写好长提示,点模型选择器左侧 ★,等重写完成,通读输入框后再点发送。
- 发现某条已发用户消息表述有误:悬停该消息 → 铅笔 → 在编辑区修改 → Ctrl+Enter 发送,在新分支继续对话;用消息旁 ‹ N/M › 或记忆树对比版本。
- 某条模型回复想「从零上下文」重答:点该回复下重启箭头,Harness 会切到新会话;原回复仍在,可在同问题下用箭头切换阅读。
- 需要纵览「同一问题多个回答」:打开右侧 记忆树,在流式/完整模式间切换,用 ↗ 进入归档分支继续工作。
适用场景与注意¶
适合:经常写多步骤 agent 提示、需要发送前统一润色且不改变意图;需要在只读工具轮次后微调提问,或对比无记忆重答与编辑分叉。
注意:
- 重写不是摘要器或问答器;勿指望它补全未写明的需求。
- 编辑/重生成在文件或 shell 已改动工作区时被禁,是为避免新分支模型面对「已被改写却不知情」的目录。
@文件守卫在插件首次见到消息时记指纹,无法判断「发消息前文件是否已变」。- 插件与文档为 AI 辅助生成,生产使用前请自行审查。
结尾¶
dsh-input-optimizer 把「发送前澄清草稿」做成 Composer 旁路,并把编辑、无记忆重答与分支可视化收进同一套 UI 与本地版本记录,适合在 DSH 里长期迭代提示与对话路径的开发者。