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。

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

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

小夜