前言¶
在 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 起引用与正文分离,浮窗里可折叠、逐条删除、清空;仍保留 单条插入 / 全部插入输入框 作为临时逃生通道(插入后发送会带进正文,需自行权衡)。
核心功能¶
交互流程¶
- 在某条已完成的助手回答里 选中一段文字(未选中时点 引用回复 会 整条引用,并提示「未选中文字,已整条引用该回答」)。
- 在该回答动作行点 「引用回复」(与反馈、跳转等按钮同区;README 说明槽位
conversation.chat.assistant-actions,order = 30)。 - 输入框上方出现或更新 「引用(N)」 浮窗,条目为引用一、引用二……
- 在输入框写问题并发送:引用不进消息正文,随 下一回合 作为模型上下文;浮窗内可展开/删除/清空。
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
典型用法¶
- 打开已有对话,找到要回应的助手消息。
- 拖选其中一段(或不做选区直接点 引用回复 以引用整条)。
- 确认输入框上方 引用(N) 中条目正确,在输入框写下追问并发送。
- 下一回合模型应能结合引用上下文回答;需要时在回合尾部展开 引用(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 插件页 查看分类与简介。