在 DeepSeek Harness(DSH)中,頂層會話通常固定使用 DeepSeek 的循環驅動。如果想在同一個客戶端中,針對不同會話使用不同的 AI 引擎(例如 Claude Code),通常需要全局替換配置或重啓應用。dsh-engine-switch 插件通過代理模式,允許在運行時根據預設動態切換會話的驅動引擎。
這是什麼¶
dsh-engine-switch 是一個 DSH 工作流插件。它不提供具體的引擎實現,而是定義了引擎接入的規範。插件負責在會話創建、續聊和預設切換時,根據當前會話的預設決定使用哪個引擎驅動,默認退回 DeepSeek。它由 Yuki-takuya-kun 維護,開源協議爲 MIT。
核心功能¶
- 按預設選引擎:引擎的選擇由預設決定。優先級爲:預設內聲明 → 配置點名 → 預設名等於引擎名 → 默認 DeepSeek。
- 發消息前可切換:在會話發送第一條消息之前切換預設,會立即應用對應的引擎,無需重開會話或重啓應用。
- 預設自動裝好:引擎插件安裝後,其自帶的預設會被自動複製到 DSH 的預設目錄中,無需手動維護。
- 引擎和會話互不打擾:引擎不感知“預設”的概念,會話也不感知“被更換了引擎”,兩者邏輯獨立。
- 子代理始終用 DeepSeek:無論頂層會話使用何種引擎,子代理始終走 DeepSeek 的原有循環。
- 續聊自動還原:會話續聊時,會根據日誌記錄的預設自動找回對應的引擎。
安裝與啓用¶
1. 安裝插件¶
使用官方命令安裝:
dsh plugin --profile web add github:Yuki-takuya-kun/dsh-engine-switch
2. 啓用插件¶
編輯配置文件 ~/.dsh/profiles/web/cordis.patch.yml,添加以下內容:
- id: dsh-engine-switch
config:
enabled: true
保存後重啓 web 應用。
3. 配置引擎¶
要在預設中指定引擎,有兩種方式(優先級從高到低):
方式一:在預設中寫
編輯預設目錄下的 agent.cordis.yml:
# ~/.dsh/.agent-presets/<預設名>/agent.cordis.yml
- name: dsh-engine-switch
config:
engine: claude-code # 指定使用 claude-code 引擎
方式二:在配置中點名
在 cordis.patch.yml 的 config 中添加映射表:
config:
engineByPreset:
research: claude-code
如果以上配置均未指定,將使用默認引擎 deepseek。
4. 註冊引擎(供引擎插件開發者)¶
如果需要開發自己的引擎插件,需在插件代碼中調用 ctx.engineSwitch.register() 註冊引擎:
export const inject = ["engineSwitch"];
export function apply(ctx) {
ctx.engineSwitch.register({
id: "claude-code", // 引擎名,需與預設目錄名一致
name: "Claude Code",
description: "…",
presetDir: fileURLToPath(new URL("./presets/claude-code/", import.meta.url)),
makeAgent(loopCtx, id, options, session, engineConfig) {
return new ClaudeCodeAgent(loopCtx, id, options, session, engineConfig);
},
});
}
注意事項與限制¶
- 插件獨立性:本插件本身不帶任何引擎,也不帶任何預設。真正的引擎由下游插件註冊提供。
- 特殊引擎名:
deepseek是一個特殊名字,表示退回 DeepSeek 原來的循環。 - 依賴要求:需要滿足以下 Node.js 版本:
^22.19.0 || >=24.0.0。 - Peer Dependencies:安裝時需確保已安裝以下依賴:
@deepseek-ai/cordis@deepseek-ai/schemastery@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-presets@deepseek-ai/dsh-sessionjs-yaml
- 預設目錄結構:引擎註冊時指定的
presetDir目錄需包含agent.cordis.yml和preset.yml兩個文件。
總結¶
dsh-engine-switch 提供了一個基於預設的路由機制,讓 DSH 能夠在不修改核心邏輯的情況下,靈活支持多種 AI 循環引擎。它通過解耦引擎選擇與會話邏輯,實現了“子代理始終走 DeepSeek,頂層會話可按需切換”的目標。
- GitHub 倉庫: https://github.com/Yuki-takuya-kun/dsh-engine-switch
- 插件目錄: https://www.skillhub.cn/plugins/Yuki-takuya-kun/dsh-engine-switch