前言¶
在 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 及更早无该能力时,本插件行为照常。
核心功能¶
引用流程¶
- 在任意一条已经生成完的 AI 回复里划选文字;
- 右键 → 添加到对话(仅有一个合法选区时才出现自定义项,其余情况放行浏览器原生菜单);
- 输入框出现类似
引用 · 第3轮 · 128字的胶囊,正文不被改动; - 鼠标悬停胶囊(输入框或已发送气泡)展开被引原文,可选中复制,移开收起;
- 正常输入并发送;发送后气泡里前缀折叠为同一胶囊,正文照常显示。
发送时展开给模型的块形如(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。