前言¶
在 DeepSeek Harness(DSH)里继续讨论某一轮助手输出时,常见做法是选中文字,让客户端塞进 > 引用块,或把全文粘进输入框。模型往往只能看到一段来源不明的摘录,context 里还要付整段 token。若你想让模型明确知道「这是第几条历史消息」,并在需要时再拉取完整正文,官方选中引用和全文粘贴都不够用。dsh-quote-shot 走另一条路:输入框只携带一行消息 id 标记,模型通过 quote_read 按需读取全文。
这是什么¶
dsh-quote-shot 由维护者 Twelve212 发布,在 DSH 社区目录中归类为「记忆」。一句话定位:按 id 引用整条消息——composer 里只多一行引用标记(约 25 字符量级),不把几百字写进 prompt;模型需要时再调 quote_read 取全文。
与官方 dsh-message-quotes 可并存:引一句用官方 blockquote;引整条并回到该条消息的原始上下文,用本插件。
官方 dsh-message-quotes |
dsh-quote-shot | |
|---|---|---|
| 触发 | 须先选中文字 | 助手消息下方一键引用整条 |
| 内容 | 全文写进输入框 | 只传 id 标记行 |
| 模型是否知道出处 | 仅见一段文本 | 知道对应历史消息 |
| context 成本 | 全文 token | 标记行字符量 |
核心功能¶
引用交互¶
- 在助手消息下方点引号图标。
- 输入框出现 chip(显示「引用 · 被引用内容开头」);底层序列化仍为
[引用消息 <id>——请先调用 quote_read 读取全文,再回答]一类标记。 - 写上问题并发送。引用的是整条消息,不支持只引选中片段。
- 点 chip 右侧 × 可取消;点引用时未往会话写入内容,属真正撤回。
发送后,标记在气泡里渲染为卡片:可「展开」查看正文(最高约 220px 可滚动,通过 POST /quote-shot/message 拉取,不预取);点卡片主体可跳回原消息(依赖 data-chat-anchor-key 锚点,滚出虚拟化列表时提示「原消息不在当前视图」)。卡片只影响人眼阅读;模型侧仍须 quote_read 才能读正文,不省 token。
quote_read 工具¶
Host 侧注册工具,供模型按 message id 取全文:
quote_read(messageId) → { found, messageId, text }
session-reader.js 从会话日志(多帧 zstd)建索引并按 id 累加流式分片文本;sessionId 兼容 session-<uuid> 与裸 <uuid> 两种目录命名。README 给出的实测(约 4.7 MB、5683 条事件的会话):首次读约 197 ms,缓存命中二次读约 0 ms。
实现要点(使用者可略读)¶
- Host:
index.js(工具、路由、日志);session-reader.js(日志解析)。 - 客户端:
client.js(按钮、chip、卡片、DOM 提取、发送完成检测)。 - 日志:
~/.dsh/logs/quote-shot.log;前端失败分支会上报并在按钮旁反馈。
插件以当前 DSH 进程权限运行;安装前建议自行查看源码与 MIT 许可证。
安装与启用¶
要求:DSH >= 0.2.1-rc.1,Node >= 20。install.mjs 通过 DSH_HOME(默认 ~/.dsh)和 DSH_PROFILE(默认 desktop)定位 profile。
git clone https://github.com/Twelve212/dsh-quote-shot.git
cd dsh-quote-shot
node install.mjs # 链接进 profile 并写入 dsh.profile.bundles
装完后重启 DSH。回滚:
node install.mjs --uninstall
开发预检可运行 node verify.mjs;改 client.js 刷新页面即可,改 Host 侧文件需重启 DSH。
典型用法¶
下面步骤与 README 一致,可复现:
- 安装并重启 DSH。
- 在需要追问的助手回复下方点引号。
- 在 chip 旁输入例如:「你这里说的 X,和我现在问的 Y 是否矛盾?」并发送。
- 模型应先调用
quote_read读取被引用 id 的全文,再回答。
用户不必把长段回复手打或粘贴进框;id 引用避免转述失真。
适用场景与注意¶
适合:长回复上沿某条消息继续推理;需要模型意识到自己在读「哪一轮输出」;希望 composer 阶段少占 context,正文按需加载。
注意:
- 与官方选中引用功能注册点不同,可同时安装。
- DSH 0.2.2 起消息列表虚拟化后,从 DOM 读正文须避免
innerText ?? textContent误判(未渲染节点innerText为空字符串);插件侧已按长度回退textContent。 - 引用后一个字不打直接发送时,客户端可能检测不到「发送完成」(输入框一直为空)。
- 社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系;星标与版本以仓库为准(当前 package 版本为 0.2.1)。
结尾¶
dsh-quote-shot 把「引用」从搬运文字改成可定位的历史消息 id + 按需 quote_read,在 token 与语义出处之间做折中。目录页与源码:
- https://www.skillhub.cn/plugins/Twelve212/dsh-quote-shot
- https://github.com/Twelve212/dsh-quote-shot