前言¶
DeepSeek Harness(DSH)的設計理念是「一切皆插件」。在開發或使用 DSH 進行多輪對話時,會話標題往往雜亂無章,缺乏統一的上下文標識。
嘗試使用外部腳本定期重命名會話是行不通的。DSH 的會話日誌在同一時刻只有一個寫入者(跨進程內核鎖),持有寫句柄的正是當前運行對話的進程。外部腳本會遭遇 SessionAlreadyOwnedError: 會話正被運行中的 Harness 獨佔。
因此,只有會話運行進程內的 ctx.sessionTitle 通道能夠安全地修改標題。本插件正是基於此原理,註冊一個 provider 而非腳本,實現在對話過程中動態重命名。
是什麼¶
cn-scuo-oo/dsh-session-auto-title 是一個 DSH 插件。它在每輪對話結束後通過一次輔助模型調用,將會話標題重寫爲固定格式 MMDD|類型|主題。
該插件掛載後即可使用,全部字段均有默認值。若需覆蓋默認值,可在 profile 的 loader 配置中指定。
行爲與約定¶
插件強制執行統一的命名規範,以確保會話標題的可讀性和一致性。
1. 格式
標題格式爲 MMDD|類型|主題,分隔符爲全角豎線 |(U+FF5C)。
2. 字段說明
* MMDD:上海時區日期,取自該會話首條人類消息的時間,不由模型臆造。
* 類型:必須從以下列表中選恰好一個:功能|設計|修復|優化|發佈|探索|文檔|研究。
* 主題:簡體中文,長度上限爲 20 個字符。不得包含工作區、項目、目錄或文件名,且不得重複類型詞。
3. 安全與校驗
* 注入防護:源消息以 JSON 數組框架化後送入,防止用戶正文破壞分隔符或僞造字段。
* 輸出校驗:模型輸出先歸一化再按約定重建。若輸出不合規,插件會拋錯並記錄 warn,絕不寫入半成品,標題保持原標題。
* 長度護欄:整串按 78 字節歸一化,保證前綴永遠不會被截斷。
安裝與啓用¶
安裝過程需要本地文件依賴和配置修改。
- 添加本地依賴
將插件目錄放入任意位置,作爲 profile 的本地依賴。需使用與 profile 相同的包管理器(pnpm 或 npm):
cd ~/.dsh/profiles/<profile>
pnpm add file:/absolute/path/to/dsh-session-auto-title
> 注意:`file:` 依賴會被**拷貝**進 `node_modules`(非軟鏈)。修改源代碼後需重新運行上述安裝命令。
- 配置 Bundle
在同一個 profile 的package.json中,將插件加入 bundles 列表:
{ "dsh": { "profile": { "bundles": ["...", "dsh-session-auto-title"] } } }
- 重啓
重啓 DSH 客戶端。插件自帶的cordis.patch.yml會自動禁用內置的session-title-llmprovider 並插入本 provider(ctx.sessionTitle只接受一個 provider 註冊)。
配置¶
插件提供若干可配置項,默認值已滿足大多數場景。需覆蓋時在 profile 的 loader 配置中給出:
| 字段 | 默認 | 作用 |
|---|---|---|
provider / model |
未設 | 顯式指定標題模型路由;兩字段必須同時給出,否則沿用該輪已記錄的請求路由 |
maxSourceMessages |
8 |
標題模型能看到的末尾人類消息條數 |
maxInputBytes |
8192 |
框架化輸入的字節上限,超限即放棄本次命名 |
maxOutputTokens |
96 |
輔助調用輸出上限 |
timeoutMs |
60000 |
單次輔助調用超時 |
maxTopicCharacters |
20 |
主題長度上限(按碼點計) |
unpinSessions |
[] |
需要交還自動命名的會話 id,釋放一次後自動移出 |
afterEveryTurn |
true |
是否每輪結束後重命名 |
設計要點與限制¶
1. 節奏驅動
插件採用 afterEveryTurn 模式,在 turn/end 時調用 sessionTitle.refresh()。這是爲了解決服務自帶節奏在長生命週期會話中“靜默停止更新”的問題:服務自身的 all-prompts 節奏依賴 request/header 落盤,而一個請求序列只記一條 header,新輪次無法觸發更新。插件從 turn 邊界驅動刷新。
2. 手動改名支持
用戶手動改名的標題其 source.kind === "user"。插件檢測到此狀態會直接跳過,保持“釘住”狀態。若需釋放一次釘子,可將會話 id 填入 unpinSessions,之後恢復常規自動命名。
3. 已知限制
* 額外調用:每個對話輪次多一次模型調用,增加少量 token 成本與幾十毫秒到數秒的延遲。
* 標題漂移:標題會隨對話推進而漂移,每輪都是重新生成,不是隻在首輪定稿。
* 兜底機制:會話首次命名前若模型調用失敗,標題保持平臺兜底值(通常是首條消息截斷),不會報錯。
依賴¶
作爲 DSH 插件運行,需要宿主提供以下包:
@deepseek-ai/schemastery、@deepseek-ai/dsh-llm、@deepseek-ai/dsh-session-title、@deepseek-ai/dsh-util-values。
結語¶
dsh-session-auto-title 通過內部 provider 的方式,解決了 DSH 會話重命名的權限與同步問題,提供了嚴格的結構化標題。對於追求會話管理規範的開發者,這是一個可以直接掛載使用的工具。