dsh-autonomy: Switch between Chat and Agent in DSH without leaving the session

前言

用 DeepSeek Harness(DSH)做开发,常遇到两种交替出现的需求:有时希望智能体自己查资料、改文件、跑命令,完整走一遍 agent 循环;有时只想要一段简洁回答,控制权留在自己手里。

改 agent preset 可以改变行为,但那是会话级的替换,会话进行到一半并不合适。dsh-autonomy 补的就是这个缺口:它改变的是当前会话的自主级别,而不替换会话的 model、preset、history、sandbox 或 permission policy。DSH 生态的思路是「一切皆插件」,这个能力也是以插件形式接入的。

下面介绍这个插件的安装、用法与边界。

这是什么

dsh-autonomy 是由 JinkaiLiu 维护的 DSH 插件,许可证为 MIT,package 当前版本为 0.1.2。一句话定位:不离开当前 DeepSeek Harness 会话,在 Chat 与 Agent 两种模式之间切换。

包内含一个 DSH host plugin 和一个浏览器 client bundle(web 平台,注入 @deepseek-ai/dsh-client-ui-conversation),通过 dsh plugin 命令一次性添加到指定 profile。

核心功能

常驻切换控件:在 Web composer 上方的专用行提供常驻的 Chat | Agent 控件,不覆盖文本输入区,也不占用 composer 工具行的空间。

状态跟随会话:模式选择绑定当前会话,重载、恢复后保持,并通过持久会话日志跟随 fork。

Chat 模式三层防护

  1. 限制智能体继承到的工具面;
  2. 移除最终模型请求中的全部工具 schema,包括保留的 Code Mode transport;
  3. 对未通告或来自记忆的工具调用做执行守卫。

Chat 模式还会附加一段简短系统指令,让模型直接以文本作答,需要执行时提示用户切换到 Agent。由于请求中不带工具 schema、执行门再拦一层,这个模式可以降低意外 token 消耗。

Agent 模式还原:切回后恢复原始 DSH 工具集与执行策略。

切换即时生效:每次有效切换(包括进行中的 turn 期间)都会即时写入 DSH 内置命令日志。这条记录既驱动 UI 状态,也即时改变策略门控,不用等下一次模型调用。

命令入口:提供 /autonomy chat/autonomy agent 两个命令。

安装与启用

运行环境要求 Node.js ^22.19.0>=24.0.0。版本兼容方面,已发布的 0.1.1 支持 DSH 0.1.0-rc.6+0.1.1-rc.1+ API 家族;当前开发线额外支持重新设计的 0.1.2 家族,并经 0.1.2-alpha.50.1.2-rc.1 验证。

先确认 DSH CLI 可用,不需要全局安装:

npx @deepseek-ai/dsh --version

从 npm 安装并启动:

npx @deepseek-ai/dsh plugin --profile web add dsh-autonomy
npx @deepseek-ai/dsh web

如果安装时 DSH Web 已在运行,需要用 Ctrl+C 停止后重启,现有进程不会热加载新装的插件。默认端口被占用时,可以停掉旧进程,或换个端口启动:

npx @deepseek-ai/dsh web --port 3081

从本地 checkout 安装时,先构建再以绝对路径添加:

pnpm install
pnpm run build
npx @deepseek-ai/dsh plugin --profile web add /absolute/path/to/dsh-autonomy
npx @deepseek-ai/dsh web

注意:从 GitHub 源安装,需要在对应 profile 里允许该包的 prepare 构建脚本后重试;npm 发布版或打包 tarball 自带构建产物,不需要安装期构建权限。

卸载时从同一 profile 移除,再重启 DSH Web:

npx @deepseek-ai/dsh plugin --profile web remove dsh-autonomy
npx @deepseek-ai/dsh web

插件不保留独立的数据库或配置目录。移除后,历史 /autonomy 记录仍留在会话日志中,但不再生效。

典型用法

两种切换方式:点击 composer 上方的 Chat 或 Agent 按钮;或者运行命令:

/autonomy chat
/autonomy agent

需要调整默认行为时,在 profile 的 cordis.patch.yml 中覆盖 id 为 autonomy 的配置项:

- id: autonomy
  config:
    defaultMode: agent
    chatGuidance: >-
      You are in Chat mode. Answer directly in text. Do not use tools or take actions.
      Ask the user to switch to Agent mode when the request requires execution.
    denyMessage: >-
      Chat mode does not allow tool execution. Switch to Agent mode to use tools.

defaultMode 默认为 agentchatGuidancedenyMessage 的默认措辞与上面示例等价。

想参与开发的话,仓库提供两个检查脚本:

pnpm run check
pnpm run pack:check

适用场景与注意

适合的人群:经常需要在同一个会话里,于「让智能体干活」和「只要一个回答」之间来回切换的开发者;尤其是希望压低意外 token 消耗、又不想重建会话上下文的情况。

几个边界需要提前知道:

  • 切到 Chat 只阻止尚未通过执行门的工具调用,不会取消已运行的工具体,也不会回滚之前的副作用。想让当前操作跑完,不需要任何动作;要取消当前 turn,使用现有的 Stop 控件。
  • Chat 模式不削弱、也不替代 DSH 的 sandbox 与 permission policies。Agent 模式恢复的是原始工具行为,工具能做什么仍由既有策略决定。
  • 插件本身不做网络请求、不收集遥测、不读取 provider 凭证、不读写工作区文件,模式变更仅通过 DSH 既有的会话命令日志记录。

两个常见问题的处理:

  • 装完看不到切换控件:重启 DSH Web 进程,确认插件已加入 web profile,然后刷新浏览器。
  • 提示 unknown command: /autonomy:Web client 加载了但 host bundle 没有加载,停掉所有旧的 DSH 进程,再以同一 profile 启动。

安全提醒:安装任何第三方 DSH 插件,都会以 DSH 进程的权限执行其代码。在包含敏感数据的环境里,安装前应先审查源码与包内容。dsh-autonomy 为 MIT 许可,源码公开可查。

小结

dsh-autonomy 把「会话的自主级别」变成了一个随手可切的开关:上下文不动、策略不换,需要答案时切 Chat 省下工具执行的开销,需要执行时切回 Agent 恢复完整能力。

项目地址:https://github.com/JinkaiLiu/dsh-autonomy ;社区目录页:https://www.skillhub.cn/plugins/JinkaiLiu/dsh-autonomy 。目录是独立维护的社区站点,与 DeepSeek、幻方没有官方从属关系。

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

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

Xiaoye