DeepSeek Harness 會話導出插件

前言

DeepSeek Harness (DSH) 的核心架構是插件化。在使用 Web 客戶端進行調試、演示或記錄會話時,開發者往往需要將對話記錄保存爲本地文件。官方的導出功能通常依賴特定的路由或後端處理,不夠輕量。本插件通過純前端注入的方式,在 dsh Web 會話的「更多」菜單中新增了「導出 Markdown」與「導出 PDF」選項,讓保存會話記錄的操作更加直觀和快捷。

插件介紹

  • 插件名稱:dsh-export-plugin
  • 維護者:guyusky
  • 功能定位:客戶端插件,用於在 dsh Web 界面中快速導出會話記錄。
  • 實現方式:純前端注入,不依賴額外的 npm 包,通過複用官方的 /api/session.export 接口獲取會話 ZIP 數據,並在前端解析和轉換。

安裝

安裝插件需要通過 npx 命令將本地目錄鏈接到 dsh 插件系統中。

  1. 確保本地有一個存放插件代碼的目錄,例如 D:\dsh-code\export-plugin。
  2. 在終端中執行以下命令:
npx @deepseek-ai/dsh plugin --profile web add D:\dsh-code\export-plugin

安裝後,需要重啓 dsh Web 服務才能使菜單注入生效。

核心功能

插件在會話列表的「更多」菜單中,於「歸檔會話」下方注入了兩個操作項:

  1. 導出 Markdown
    • 導出極簡的問答對格式(用戶輸入 + 該輪最後一條助手可見回覆)。
    • 保存爲 .md 文件。
    • 不包含思考過程、工具調用或系統提示詞。
  2. 導出 PDF
    • 導出乾淨的問答對(包含文字與圖片)。
    • 採用 A4 排版,利用瀏覽器原生打印功能生成 PDF。
    • 需在系統打印對話框中選擇「另存爲 PDF」。

技術實現與過濾規則

插件複用了官方 dsh-session-log-export 包的 /api/session.export 路由。該接口返回一個 ZIP 文件,包含 canonical JSONL 日誌和圖片資源。插件在前端完成以下工作:

  1. ZIP 解析:使用瀏覽器原生的 DecompressionStream 解壓 ZIP,解析出根目錄的 session*.jsonl 文件以及 media/ 目錄下的圖片。
  2. 事件過濾:插件只處理 user/message 和 assistant/message 事件。
    • 用戶輸入過濾:只保留 source.kind === 'user' 的消息。這解決了同一消息在 agent/inbox/spliced 和 user/message 中重複記錄的問題(通過 message id 去重)。
    • 系統內容過濾:自動過濾 runtime-context、time-context、skill-catalog、工作區指令等系統注入內容,避免它們混入用戶提問列表。
    • 助手回覆過濾:每輪對話只保留最後一條助手可見回覆,丟棄過渡文本、思考過程 (thinking)、工具調用 (tool_use) 及其結果。

使用方式

  1. 在 dsh Web 界面打開一個會話。
  2. 點擊會話行中的「更多」按鈕。
  3. 在彈出的菜單中選擇「導出 Markdown」或「導出 PDF」。
    • 選擇 Markdown 後,文件會直接下載到本地。
    • 選擇 PDF 後,瀏覽器會打開打印預覽窗口,用戶需手動點擊「另存爲 PDF」。

注意事項

  • PDF 保存:由於瀏覽器安全沙箱限制,PDF 導出無法直接通過代碼保存文件,必須手動在打印對話框中操作。
  • 內容範圍:導出的內容僅包含「用戶輸入」與「助手最終回覆」,不包含模型的思考鏈、中間草稿、工具調用詳情或系統提示詞。
  • 菜單結構變化:插件通過 MutationObserver 監聽 DOM 變化,但若官方升級菜單結構導致文本匹配失效,可能需要更新插件代碼並重啓服務。
  • Event 格式兼容性:插件主要針對 V4 事件格式。若 dsh 升級 event 格式導致未知的 event type 出現,Markdown 導出會將其原樣保留在代碼塊中,PDF 導出則會直接忽略。
  • 大文件性能:包含大量圖片或超過 50 輪的會話可能導致文件體積較大或打印過程變慢。

總結

該插件通過極簡的問答對導出方式,解決了 DeepSeek Harness Web 界面下會話記錄保存的需求。對於只需要記錄最終對話結果的開發者或演示場景,它提供了一個無需配置後端、零依賴的輕量級解決方案。

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

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

小夜