dsh-quote-shot:按消息 id 引用整条 DSH 对话,按需读全文

前言

在 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 标记行字符量

核心功能

引用交互

  1. 在助手消息下方点引号图标。
  2. 输入框出现 chip(显示「引用 · 被引用内容开头」);底层序列化仍为 [引用消息 <id>——请先调用 quote_read 读取全文,再回答] 一类标记。
  3. 写上问题并发送。引用的是整条消息,不支持只引选中片段。
  4. 点 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 一致,可复现:

  1. 安装并重启 DSH。
  2. 在需要追问的助手回复下方点引号。
  3. 在 chip 旁输入例如:「你这里说的 X,和我现在问的 Y 是否矛盾?」并发送。
  4. 模型应先调用 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
羽毛球分组比赛记分
小程序二维码

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

小夜