在 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