DeepSeek Harness 會話匯出、備份與遷移實操
一段真實錄影裡的防升級翻車路線:把安裝複製成帶獨立 HOME 和連接埠的隔離 lane,先驗收副本再動版本,對話按 lane 備份——壞外掛或升版本,都帶不走你的會話歷史。
最近更新: 2026-09-29

Harness 存你工作的方式,和瀏覽器存分頁一樣:每個會話、每條軌跡、每次核准,全都住在那套安裝的 HOME 目錄裡。所以擁有 dsh 最驚險的時刻不是寫錯提示詞,而是升級——外掛和執行環境不匹配時,dsh 自己會把這頁攻略的立論打進日誌:強行執行可能導致當機或資料遺失。下面這段錄影演示的就是防禦性布局:日常那套不動,先複製一條隔離 lane,讓副本自證能跑,然後再談換版本。
每張截圖都來自這段錄影,並深鏈回它的秒數;錄影沒有字幕,所有事實——卡片文案、日誌行、自檢欄位——都是逐幀從畫面上讀出來的。涉及會話儲存內部結構的地方,我們引用另一支署名來源。畫面裡的版本號(0.1.5 到 0.2.0 的 RC)是 2026 年 9 月的快照,lane 這套打法才是耐用的部分。會話歷史裡讀的那一面,見 會話回放與覆盤
速覽
- ▸別在唯一的一套上升級。dsh 日誌會明說:不匹配的外掛可能導致當機或資料遺失——錄影的對策是日常 lane 不動,要實驗就到副本上。
- ▸DSH 多版本啟動器(dsh-lanes)把安裝複製成獨立的安裝樹和 HOME:錄影把 global 複製成 global-copy——45,323 個檔案、1.6 GB、耗時 308 秒——獨占連接埠 3083,API key 自動繼承。
- ▸副本只繼承 key:會話與設定按 lane 各自獨立。用卡片上的「備份對話…」歸檔這條 lane 的聊天;把 lane 的安裝樹和 HOME 兩個目錄一起拷走,就是全套快照。
- ▸信任靠回執不靠感覺:讓副本做一次環境自檢(版本、DSH_HOME、它自己的 DSH_WEB_URL),讀那一輪的軌跡,然後就地升級——副本的路徑和 HOME 連結一條都不變。
逐步實操
把安裝複製成一條隔離 lane
- 1
動手之前,先讀懂複製回執
啟動器為每套安裝保留一張卡片,錄影裡一共四張:global(日常那套,連接埠 3080,標著「★主要版本」)、next 在 3081、stable 在 3082,還有用「複製…」做出的 global-copy 在 3083。即時日誌把整個操作打了回執:安裝樹 D:\dsh-lanes\clones\global-copy,HOME 在 D:\dsh-lanes\homes\global-copy,45,323 個檔案 / 1.6 GB 耗時 308 秒,繼承 DEEPSEEK_API_KEY,接著是你接下來要跑的三條命令。狀態列一行收尾:lane 共 4 條(執行 1),根目錄 D:\dsh-lanes。
$py dsh_lanes.py open global-copy --no-browser$py dsh_lanes.py verify global-copy$py dsh_lanes.py upgrade global-copy <版本>
複製回執:獨立的安裝樹、HOME 和連接埠——然後是你要跑的三條命令。看原片 1:10 - 2
讓副本自己證明複製成功
打開副本的 Web UI,讓它做一次環境自檢。報告給的是證據不是口頭保證:DSH 版本 0.1.7-rc.2(release candidate)、npm 全域安裝的 @deepseek-ai/dsh、它解析到的 dsh.cmd 路徑,以及它做過的檢查——dsh --version 的輸出、package.json 的 name/version、npm 相依樹。對這頁攻略最關鍵的是執行環境一節:DSH_HOME = D:\dsh-lanes\homes\global-copy、DSH_PROFILE = web、DSH_WEB_URL = http://127.0.0.1:3083——副本是在自己的 HOME、自己的連接埠上回答問題的,跟你日常那套無關。

副本自己開口:它的版本、它自己的 HOME、它自己的連接埠。看原片 3:30 - 3
打開軌跡,把「驗收」再驗收一遍
同一輪的軌跡檢視讓結論變得可查:一排工具步驟依序列出複製 HOME 裡的內容、讀 package.json、檢查行程命令列以確認到底是哪套安裝在跑、列舉 dsh-lanes 根目錄、查看正在執行的 lane 行程和它的啟動器。這個習慣——先要一份檢查,再讀它怎麼檢查的——正是「能信的備份」和「希望它行的備份」之間的差別。

報告裡的每個結論,都能回溯到你打得開的一步工具呼叫。看原片 4:10 - 4
會話與設定按 lane 各自獨立
global 卡片上的說明寫得直白:新版本會自動複製它的 API key——只複製金鑰,會話與設定仍各自獨立。所以每條 lane 的設定對話框(一般、模型、內建外掛、Agent 預設)改的都是它自己的設定檔,隨時用畫面上的「打開配置文件」按鈕直達。底層結構上,我們在下方引用的另一支 dsh 會話事件日誌原始碼精講把帳本講清楚了:dsh HOME 下,每個會話對應一個只追加的 JSONL 檔案——這正是按 lane 拆 HOME 能讓歷史互不串門的原因。

繼承的只有 key,其餘各自獨立:每條 lane 改的是自己的設定檔。看原片 2:00
副本就地升級,原版一點不動
- 5
在副本自己的安裝樹裡升級版本
副本卡片上的「升級版本…」打開「換 DSH 版本:lane『global-copy』」:目前版本 0.1.7-rc.2,安裝樹 D:\dsh-lanes\clones\global-copy,以及最關鍵的一句承諾——在它自己的安裝樹裡就地升級,路徑不變,HOME 裡的連結一條都不用重接。從 npm registry 清單裡挑版本(0.2.0-rc.1 標著 next;0.1.7-rc.2 標著 latest 並註明「現在用的·本地已裝」),也可以手打版本號;「先看會改什麼」先預覽改動,再點「升級到這一版」落地。

升級發生在副本自己的安裝樹裡——原版路徑一步不動。看原片 3:15 - 6
日常保險:每張卡片的動作列 + 不粉飾的日誌
每張卡片都掛著維護帶:「備份對話…」歸檔這條 lane 的對話、「外掛市場…」開它的外掛市場、「升級版本…」、「複製…」再衍生一套,以及「刪除這套 DSH」——它要求手打 lane 名字做二次確認。即時日誌也不給升級掩飾:npm ERESOLVE 相依警告就當著你的面捲過去。這份誠實正是意義所在——你盯著風險發生的地方,是那條失敗了只損失副本的 lane,不是你的歷史。

每條 lane 的保險帶:「備份對話」歸檔聊天;升級過程原樣記在日誌裡。看原片 2:20
會話備份 FAQ
決定你的歷史能不能熬過下一次升級的幾個問題。
dsh 到底把會話存在哪裡?
在你目前那套安裝的 dsh HOME 目錄下。錄影把這個事實拍在明面上:日常那套回報 DSH_HOME = C:\Users\Administrator\.dsh,複製出來的 lane 回報 DSH_HOME = D:\dsh-lanes\homes\global-copy。我們在下方引用的另一支會話事件日誌原始碼精講進一步講了帳本結構:dsh HOME 下,每個會話一個只追加的 JSONL 檔案。實操結論:備份 HOME 就是備份會話——而每條 lane 的 HOME 天生分離。
複製會把我的對話帶上嗎?
不會,而且是故意的。卡片寫明新副本只自動繼承 API key,會話與設定仍各自獨立。要歸檔聊天,跑每條 lane 的「備份對話…」;要全套快照,把 lane 的兩個目錄一起拷走:clones 下的安裝樹加 homes 下的 HOME。把它們當一對看——clones 是程式,homes 是你的歷史。
啟動器是中文介面,這套打法還能照搬嗎?
能。錄影裡的工具是社群做的啟動器,背後是 dsh_lanes.py 腳本,畫面上出現的命令都是平白的關鍵詞:open、verify、upgrade、stop。這套模式在任何系統都成立:日常那套用預設連接埠(官方套件的 Web UI 預設就是 127.0.0.1:3080),給第二套安裝配獨立的 DSH_HOME 和連接埠,先升級第二套,自檢通過再轉正。
原版和副本同時跑,可以嗎?
可以——分連接埠就是為這個。錄影狀態列同時盯著四條 lane、其中一條在跑,日誌也寫明副本有自己的安裝樹和 HOME,可和原版同時開。同一段日誌裡還有一條提醒:釘在舊版 dsh 上的外掛,撞上新執行環境可能拒絕載入——而這正是你希望第一次遇見是在副本上的場景。
相關攻略
lane 架好之後,接著去哪。
來源影片
截圖全部來自第一支影片——一段沒有字幕的 B 站錄影,所有事實都逐幀從畫面讀取;第二支是以幻燈片為主的 dsh 會話事件日誌原始碼精講,只為會話儲存事實署名、未貢獻任何畫面。畫面中的版本號是 2026 年 9 月的快照。會話歷史裡讀的那一面,見 會話回放與覆盤
