dsh-citation:给引用补上 turn / range 出处的 DSH 客户端插件

前言

在 DeepSeek Harness(DSH)里追问模型时,常见做法是把上一轮回答里的一段话复制进输入框,或依赖宿主自带的「引用文本」。复制会丢上下文位置;官方从 0.2.2-alpha.2 起内置的引用能力,送给模型的是 Markdown > 引用块,模型只知道「用户引了一段话」,不知道这段话出自第几轮、字符区间是多少。

下面介绍社区插件 dsh-citation(维护者 yupaoa,GitHub 仓库 yupaoa/dsh-citation)。它在与官方相近的交互入口上,把发送给模型的内容扩展为带 turn、range、anchor、session 的引用块,便于模型按轮次与区间定位原文。

这是什么

dsh-citation 是 DSH 的客户端第三方插件:在已生成完毕的 AI 回复里划选一段文字,通过右键 添加到对话,在输入框插入不可编辑的引用胶囊;发送时胶囊展开为模型可读的引用块,气泡里再折叠回胶囊。插件未发布到 npm,以单文件 client.js 形式随仓库提供;当前 package 版本为 0.1.0,许可证 MIT。

环境要求(与 README 一致):

  • DSH >= 0.2.1-rc.3(依赖该版本的输入框引用胶囊与气泡 userText 规则)
  • Node.js ^22.19.0 || >=24.0.0(随宿主)

与官方内置引用的区别

DSH 0.2.2-alpha.2(2026-10-28)起内置 @deepseek-ai/dsh-message-quotes:选区旁 引用文本 按钮,发送后折叠预览。与本插件对比如下:

官方(0.2.2-alpha.2+) dsh-citation
送给模型的内容 普通 Markdown 引用块(>) <citation turn step range anchor session> + <quote>
出处(轮次、字符区间) 无 有
输入框形态 QuoteNode,文字可编辑 原子胶囊,不可编辑
入口 选区旁浮动按钮 右键 添加到对话

怎么选:只要把一段话引进来,用官方即可;需要模型知道「第几轮、哪几个字符」时用本插件。

共存:插件会探测宿主的 insertQuote 能力;若宿主已自带引用入口,不再注入右键菜单项,避免两个「引用」打架。因此在 0.2.2 之后安装本插件不会冲突,只是右键入口会安静下来;0.2.1 及更早无该能力时,本插件行为照常。

核心功能

引用流程

  1. 在任意一条已经生成完的 AI 回复里划选文字;
  2. 右键 → 添加到对话(仅有一个合法选区时才出现自定义项,其余情况放行浏览器原生菜单);
  3. 输入框出现类似 引用 · 第3轮 · 128字 的胶囊,正文不被改动;
  4. 鼠标悬停胶囊(输入框或已发送气泡)展开被引原文,可选中复制,移开收起;
  5. 正常输入并发送;发送后气泡里前缀折叠为同一胶囊,正文照常显示。

发送时展开给模型的块形如(README 示例):

我引用了以下 1 条回复内容:
<citation turn="3" step="0" range="128:412" anchor="a1b2c3d4" session="d4f1…">
<quote>被引用的那一段原文,逐字保留</quote>
</citation>

你的问题

边界与限制

  • 同一段重复引用会被提示;一条消息最多 5 段引用。
  • 跨两条回复的选区、流式生成中的回复、按钮 / 代码块工具条 / 思考块内选区、空白选区——不出 添加到对话。
  • 原文超过约 20000 字才会裁剪(头 75% + 尾 25%,并在块里说明省略字数)。
  • 支持 dsh-rewind 回退:检测到草稿中的引用块会重建为「胶囊 + 正文」。
  • 不注册模型工具或斜杠命令;不读写文件、不发起网络请求(插件自述的权限边界)。

安装与启用

要求 DSH >= 0.2.1-rc.3、Node ^22.19.0 || >=24.0.0。dsh plugin add 会把参数透传给 pnpm add。推荐从 GitHub 安装(client.js 已提交,无需构建):

dsh plugin add --profile desktop "github:yupaoa/dsh-citation"

若 shorthand 不被接受,可用:

dsh plugin add --profile desktop "git+https://github.com/yupaoa/dsh-citation.git"

本地开发或离线可用 link: 指向本机目录。将 --profile desktop 换成你的 profile 名;dsh plugin list --profile desktop 可查看已装插件。

装完必须完全退出并重启 DSH(安装 / 卸载 / 升级后只刷新页面不够;引用源、右键菜单、气泡规则在启动阶段注册)。

卸载:

dsh plugin remove --profile desktop dsh-citation

适用场景与注意

适合:你在 DSH 桌面端做长对话调试或写稿,需要模型明确知道「引文来自第 N 轮、字符区间 M–K」,而不是一段无出处的 Markdown 引用。

注意:

  • 插件以宿主进程同等权限运行(DSH 第三方插件无独立沙箱);安装前建议阅读仓库源码与 MIT 许可证,自行审计「权限与边界」一节所述能力。
  • 依赖宿主内部 DOM 契约(如 data-chat-turn、data-chat-anchor-key 等),非公开 API;大版本升级后可能 quietly 不再出菜单,不会破坏原生右键。
  • 若宿主编辑器不接受引用胶囊,会退化为插入位置标记行,模型按位置定位、无原文冗余。
  • 刷新页面后,草稿里恢复的胶囊可能因映射丢失而无法悬停看全文(仅宿主原生提示)。

开发与验证

仓库提供 npm test(node --test test/*.test.js,README 称 51 个用例,无依赖、无网络)。贡献前需保证测试全绿;Issue 与 PR 见 GitHub。

结尾

dsh-citation 在 DSH 对话 UI 里用右键 添加到对话 把回复片段变成不可编辑胶囊,发送时带上 turn / range 等出处,补全官方纯文本引用所缺的位置信息。插件目录页:skillhub.cn/plugins/yupaoa/dsh-citation;源码与完整说明:github.com/yupaoa/dsh-citation。

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

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

小夜