dsh-input-optimizer:发送前重写草稿,并管理对话分支

前言

在 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 或仅按钮

典型用法

  1. 在 Composer 写好长提示,点模型选择器左侧 ★,等重写完成,通读输入框后再点发送。
  2. 发现某条已发用户消息表述有误:悬停该消息 → 铅笔 → 在编辑区修改 → Ctrl+Enter 发送,在新分支继续对话;用消息旁 ‹ N/M › 或记忆树对比版本。
  3. 某条模型回复想「从零上下文」重答:点该回复下重启箭头,Harness 会切到新会话;原回复仍在,可在同问题下用箭头切换阅读。
  4. 需要纵览「同一问题多个回答」:打开右侧 记忆树,在流式/完整模式间切换,用 ↗ 进入归档分支继续工作。

适用场景与注意

适合:经常写多步骤 agent 提示、需要发送前统一润色且不改变意图;需要在只读工具轮次后微调提问,或对比无记忆重答与编辑分叉。

注意:

  • 重写不是摘要器或问答器;勿指望它补全未写明的需求。
  • 编辑/重生成在文件或 shell 已改动工作区时被禁,是为避免新分支模型面对「已被改写却不知情」的目录。
  • @文件 守卫在插件首次见到消息时记指纹,无法判断「发消息前文件是否已变」。
  • 插件与文档为 AI 辅助生成,生产使用前请自行审查。

结尾

dsh-input-optimizer 把「发送前澄清草稿」做成 Composer 旁路,并把编辑、无记忆重答与分支可视化收进同一套 UI 与本地版本记录,适合在 DSH 里长期迭代提示与对话路径的开发者。

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

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

Xiaoye