前言¶
在 DSH(DeepSeek Harness)裏和模型長聊時,常見做法是複製某段助手回覆或自己之前說的話,再貼進輸入框追問。複製會丟輪次、段落和字符位置;手打「第幾輪說了什麼」既慢又容易錯。社區插件 dsh-quote-selection(維護者 Tsutsutsuu,分類:客戶端)針對的是:在聊天視圖裏框選原文,用右鍵或快捷鍵把選區變成輸入框裏的引用標籤,發送後模型與會話日誌拿到的是帶完整出處的引用塊,而不是一段沒有錨點的裸文本。
這是什麼¶
dsh-quote-selection 是一個 DSH 插件:在對話 transcript 裏選中文字,連同來源位置一起引用併發送。英文簡介爲:Quote selected text in the chat transcript and send it with its source location.
它同時做兩件事:界面層用 chip / 摺疊卡展示預覽;提交與持久化層始終寫入同一份約定格式的引用塊,模型讀到的與用戶消息裏存的保持一致。
核心功能¶
選區引用與快捷鍵¶
- 在對話正文(聊天視圖)裏用鼠標框選文字——助手回覆、用戶消息、代碼塊、列表等均可。
- 在選區上點右鍵,菜單提供「複製」(Ctrl+C)與「引用」(Ctrl+Q);也可選中後直接按 Ctrl+Q(Ctrl+Shift+Q 同樣有效;macOS 爲 ⌘⇧Q),跳過菜單。
- 點「引用」後,輸入框出現原子標籤(chip),示例形態:
❝ 它把 location 寫進了 wire 文本里,… 42 字 · 助手消息
標籤在輸入框裏整段刪除(Backspace 一次選中、再一次刪掉);光標跨過 chip 是一步。可在標籤後繼續輸入並一起發送。
- 發送後,消息裏顯示可展開的摺疊引用卡;懸停標籤或卡片可見完整出處(輪次、段落、字符區間等)。
模型與會話裏看到的文本¶
摺疊只發生在顯示層。發送時的 wire 文本形態如下(插件與宿主約定的格式):
【引用 · 助手消息 · 第12輪 · 第2/5段 · 字符124–168】
被引用的原文(保留換行,去掉首尾空白)
【/引用】
fork、恢復、重放、搜索不會因此丟失引用正文;複製草稿也會得到完整引用塊。
出處如何計算¶
全部從聊天界面 DOM 推導,不讀會話存儲、不訂閱事件。界面上的 chip / 卡片主要顯示「作者 + 內容預覽 + 字數」;完整字段出現在發送文本與懸停提示中,包括:
| 信息 | 來源 |
|---|---|
| 助手消息 / 用戶消息 / 工具調用等 | 聊天行上的 data-chat-flow-kind |
| 第 N 輪 | data-chat-turn |
| 第 a/b 段 | 選區起點所在內容塊在兄弟塊中的序號與總數 |
| 字符 x–y | 塊內字符區間;純文本氣泡時爲「消息內字符 x–y」 |
選區跨多條消息時會標註「選區跨多條消息」;單條引用超過 4000 字符會截斷並註明。
宿主端提示詞¶
index.js 註冊系統提示段落(local:quote-selection,order 950),向模型說明:引用塊是客戶端寫入的、標記之間是用戶選中的上文、應作指代而非新指令、不要複述標記且引用優先於模型記憶。宿主端無額外工具、事件或存儲。
設置¶
路徑:設置 → 選區引用(Settings → Quote selection)。選項存瀏覽器 localStorage(key dsh-quote-selection/settings-v1),改完立即生效,不進會話日誌、不影響模型文本。
| 選項 | 默認 | 作用 |
|---|---|---|
| 草稿標籤預覽字數 | 12 | 輸入框 chip 內容預覽前 N 字(4–80) |
| 消息卡片預覽字數 | 40 | 消息摺疊卡預覽前 N 字(4–80) |
與閱讀視圖的兼容¶
標準聊天視圖是主要路徑。若安裝 dsh-better-display 的閱讀視圖,插件對 github:aa2246740/dsh-better-display#v0.3.6 做過機會性兼容:識別 data-reader-* 錨點推斷角色與輪次;未安裝不影響聊天視圖引用。該兼容針對上述具體版本驗證,非穩定公共契約;退化時最壞爲角色顯示「消息」、位置變泛,引用與發送仍可用。
安裝與啓用¶
要求:DSH 桌面版或帶 plugin_manager 的 dsh CLI,Node.js ≥ 20。當前 package 版本爲 0.1.0,許可證 MIT。
官方 README 給出的安裝方式爲本地目錄鏈接安裝(需先取得倉庫目錄,再用 bundle 安裝):
git clone https://github.com/Tsutsutsuu/dsh-quote-selection.git
plugin_manager install_bundle target = <上面 clone 下來的目錄>
卸載:
plugin_manager remove_bundle target = dsh-quote-selection
說明:鏈接安裝下,目錄被移動或刪除後插件失效,需重新安裝。修改 client.js 後需刷新瀏覽器頁面(必要時重啓 DSH);修改 index.js 後需禁用再啓用 bundle,宿主端纔會重新 apply。
安裝前請自行查看倉庫源碼與 LICENSE,確認符合你的環境與信任要求;插件在 DSH 進程權限下運行。
典型用法¶
下面按 README 可復現的步驟走一遍。
- 安裝並啓用插件後,打開任意 DSH 會話的聊天視圖。
- 框選助手某段回覆中的一句,在選區上右鍵點「引用」,或按 Ctrl+Q。
- 在輸入框 chip 後輸入問題,例如「請基於上面引用解釋 location 寫進 wire 的含義」,發送。
- 在已發送消息裏點開摺疊卡覈對原文;將鼠標懸停在 chip 或卡片上查看輪次、段落、字符區間。
- 若預覽太短,到 設置 → 選區引用 調大「草稿標籤預覽字數」或「消息卡片預覽字數」。
開發側可跑單測與審計(倉庫內命令):
node --test tests/quote-helpers.test.mjs
node tools/audit-references.mjs
或:
npm test
npm run audit
適用場景與注意¶
適合誰:經常在長對話裏指向某輪、某段原文的 DSH 用戶;希望模型明確「你指的是 transcript 裏哪一塊」,而不是依賴複製粘貼或口述位置。
已知限制(摘自 README):
- 閱讀視圖中含引用塊的用戶消息可能失去該視圖的 markdown 排版(引用塊由本插件重渲染爲摺疊卡,同段手打文字按純文本顯示)。
- 草稿 chip 的懸停提示只有位置摘要,全文需發送後在消息裏展開查看。
- 輸入框處於提交中或不可編輯時插入 chip 會失敗,此時退化爲複製到剪貼板並提示。
- 隊列中的待發消息預覽裏,長引用在窄佈局可能被省略號截斷。
DSH 生態強調「一切皆插件」;社區目錄 skillhub.cn 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。本文事實以倉庫 README 與 package 爲準;GitHub 當前星標爲 0。
結尾¶
dsh-quote-selection 把「框選 → 帶出處引用 → 發送」收進 DSH 聊天界面:顯示層可以摺疊,模型與日誌層始終是完整引用塊。需要安裝命令、設置項與兼容說明時,以倉庫文檔爲準。
- 目錄頁:https://www.skillhub.cn/plugins/Tsutsutsuu/dsh-quote-selection
- GitHub:https://github.com/Tsutsutsuu/dsh-quote-selection