dsh-quote-reply:把选中段落做成「引用层」,随下一回合注入模型上下文

前言

在 DeepSeek Harness(DSH)里和模型多轮对话时,常见做法是复制助手回答里的一小段,贴进输入框再追问。引用和你要说的话混在同一块草稿里,事后很难分清哪句是原文、哪句是提问,也不方便统一管理多条引用。

社区插件 dsh-quote-reply(维护者 liuhaolong16)把「引用」做成输入框上方独立一层(与「目标」「队列」同区):选中内容进 「引用(N)」 浮窗,下一回合作为上下文送给模型,不进入你发送的消息正文;该回合结束后可在对话尾部展开 引用(N) 查看。下面介绍它的定位、能力与安装用法。插件归类为 客户端,在 SkillHub 目录页 可查到条目;源码与说明见 GitHub 仓库(README 标注包版本 v0.9.0,文内功能描述以 README 与 package.json 为准)。

这是什么

一句话:引用回复层——在助手消息上选中一段(或整条回答),点 「引用回复」,内容进入输入框上方的可编辑引用行;发送下一句话时,引用经宿主侧 pending 与 systemPrompt.context 注入模型(README 实测上下文中出现 ## 用户当前引用…),用完后清空 pending;界面上在该回合下显示可展开的 引用(N)。

与「把引用塞进输入框」不同:v0.2 起引用与正文分离,浮窗里可折叠、逐条删除、清空;仍保留 单条插入 / 全部插入输入框 作为临时逃生通道(插入后发送会带进正文,需自行权衡)。

核心功能

交互流程

  1. 在某条已完成的助手回答里 选中一段文字(未选中时点 引用回复 会 整条引用,并提示「未选中文字,已整条引用该回答」)。
  2. 在该回答动作行点 「引用回复」(与反馈、跳转等按钮同区;README 说明槽位 conversation.chat.assistant-actions,order = 30)。
  3. 输入框上方出现或更新 「引用(N)」 浮窗,条目为引用一、引用二……
  4. 在输入框写问题并发送:引用不进消息正文,随 下一回合 作为模型上下文;浮窗内可展开/删除/清空。

README 记录的端到端链路(2026-10-15):客户端 → POST/GET /quote-reply/quotes → 宿主 pending → systemPrompt.context → 模型。

客户端与宿主分工

  • 客户端半体(lib/client.js):浮窗槽位 conversation.input.dock(order = 30)、助手消息上的引用按钮;模块级 Map 按 sessionId 保存引用,供两槽位共享。
  • 宿主半体(lib/index.js):注册 HTTP 路由与健康检查;GET /quote-reply/health 返回 200 表示宿主半体已加载。修改宿主半体后 必须重启 DSH 宿主进程;仅刷新页面 不会 重新加载宿主半体(启用/禁用、卸载重装同理)。修改客户端半体后执行 plugin_manager set_bundle enabled=true target=dsh-quote-reply 并 刷新页面。

package.json 说明还包含 localStorage 落盘 与 宿主/客户端版本握手;具体字段以仓库内实现为准。

实现上需要注意的点(使用者与改代码者)

  • 「引用回复」 按钮需 onMouseDown 里 preventDefault(),否则按下会先塌陷选区,无法拿到选中段落。
  • 宿主 apply 设计为全程不抛错,避免打断 DSH 启动;改宿主半体前 README 要求先跑预检(见下文)。

明确不做的事(README 边界)

  • 不自动发送:是否发送、如何改草稿由你决定(README「下一阶段」提到「发送并引用」类专用按钮尚未实现)。
  • 不碰未选内容:引用块仅含选中段(过长会截断并标注原长)。
  • 若走「插入输入框」逃生路径且插入失败(草稿版本变化等),引用会保留并提供 复制保留的引用,不静默丢弃。

安装与启用

安装须走 DSH 官方插件入口;README 给出的示例为本地 bundle 链接(请换成你机器上的实际路径):

dsh plugin --profile desktop add link:E:\DeepSeek\skills\quote-reply\bundle

也可在仓库目录通过 plugin_manager 的 install_bundle 走同样官方路径。新装客户端类插件后需 重新加载页面 才生效。

许可与依赖:package.json 为 MIT,要求 Node >= 20。插件在 当前 DSH 进程权限 下运行;安装前请自行查看源码与许可证,社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系。

若你本地修改了插件并涉及宿主半体,README 要求重启前先执行预检,退出码 0 再重启:

node _preflight.cjs

改客户端前可跑:

node _check-client.cjs

典型用法

  1. 打开已有对话,找到要回应的助手消息。
  2. 拖选其中一段(或不做选区直接点 引用回复 以引用整条)。
  3. 确认输入框上方 引用(N) 中条目正确,在输入框写下追问并发送。
  4. 下一回合模型应能结合引用上下文回答;需要时在回合尾部展开 引用(N) 核对;用完可在浮窗中删除或清空。

仅当你 有意 让引用出现在将要发送的正文里时,再用浮窗里的 插入 / 全部插入输入框。

适用场景与注意

适合:针对长回答中的某一段做精确追问;需要多条引用并列、又不想污染输入框正文;希望引用以系统上下文形式进入模型而非用户可见消息块。

注意:

  • 宿主半体变更 只能重启 DSH 生效;客户端变更 刷新页面 即可。可用 lib/.host-status.json 与 GET /quote-reply/health 确认宿主侧是否加载。
  • README 列有「下一阶段」能力(如发送时自动带上引用、发送后折叠展示等),尚未实现,勿与当前行为混淆。
  • 仓库 README 中较早段落仍描述「引用以 > 块插入输入框」的用法,与当前 独立引用层 + 上下文注入 主路径并存于文档;以文首 一句话、package.json 的 description 及 生效规则 / 端到端实测 章节为准。

结尾

dsh-quote-reply 把「选中的助手原文」从输入框草稿里拆出来,做成可管理的引用层,并通过 DSH 的 systemPrompt.context 在下一回合交给模型,同时保持用户消息正文干净。需要试用或跟进 issue 可访问 GitHub:liuhaolong16/dsh-quote-reply,在 SkillHub 插件页 查看分类与简介。

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

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

小夜