Skip to content

使命

用仓库自己的话来说,DeepSeek Harnessdsh)是:

DeepSeek AI 开发的开源 agent harness(智能体框架)。

所谓 agent harness(智能体框架),是包裹 LLM 代理的运行时外壳:它管理会话、向模型喂入上下文与工具 schema、执行模型调用的工具、执行沙箱与审批策略,并持久化对话记录。dsh 是 DeepSeek AI 对这一外壳的 实现,而且它的结构保证了外壳内的一切都是可替换的插件——没有特权的核心。

这句一句话概括直接来自根 README.md

它采用一切皆插件的架构,并由 Cordis 驱动,其设计参见 论文 A Programming Paradigm for Spatiotemporal Composability

这句话里的两个思想承载了整个设计。其一,基底是一个插件框架:框架建立在 Cordis 之上——一个内嵌的 框架,插件在其中向共享上下文注册服务、类型化的事件与可逆的效果。其二,一切都是插件:模型适配器、 工具注册表、会话日志,乃至 agent 主循环,全都只是挂载在这个上下文上的插件。 哲学一章将展开这给你带来什么。

运行它:Web UI

主要界面是一个浏览器应用。通过 npm:

sh
npx @deepseek-ai/dsh web

这会启动 Web UI,默认位于 http://127.0.0.1:3080web--profile web 的硬编码别名,它启动 web profile——启动器知道如何堆叠的、一个命名的、用户可编辑的插件组合(参见启动流程与 CLI)。 这个 profile 是 @deepseek-ai/dsh-web-app 束叠加在共享 @deepseek-ai/dsh-base 束之上,因此浏览器端 本身也只是一组插件行。

在 Web UI 中,你选择工作区、在 Settings → Models 中配置模型,然后运行任务。agent 可以读取/编辑 工作区文件、运行命令、委派工作并维护计划,在权限策略要求的操作前请求审批(参见[用户指南docs/user/guide/index.md)。

Headless 模式

除了 Web UI,dsh 还附带一个headless(无头)一次性模式——一个没有服务器、没有 Host、没有浏览器的 运行器:

sh
dsh --profile headless "summarize this workspace"

@deepseek-ai/dsh-headless 束提供编码人格与工具模式,其 headless-runner 插件从注入的 headlessStartup 提供商读取任务,通过 ctx.agents 创建一个全新持久会话,把任务作为普通用户消息提交, 等待静默,打印最后一段非空 assistant 文本并退出(turn/end 正常结束 → 0,否则 1)。它不打开任何 监听端口。在 Web profile 中,同样的基础栈被使用,但叠加了浏览器行;headless 是在同一 dsh-base 之上的 真正不同端——参见 packages/bundle/headless/README.md

SDK 与 JSON-RPC

对于程序化用途,存在一个真实的客户端/服务端故事,而不仅仅是 CLI:

  • @deepseek-ai/dsh-sdk-client@deepseek-ai/dsh-sdk-jsonrpc-server@deepseek-ai/dsh-sdk-protocol 位于 packages/sdk/, 定义了一个建立在 JSON-RPC 协议之上、由外部进程驱动框架的 SDK
  • 仓库附带一个 Python SDKdeepseek-harness-sdk),其教程位于 docs/user/guide/python-sdk.md; 它通过 JSON-RPC 端驱动一个远程框架。
  • 一个现成的示例是 [jsonrpc-agentexamples/jsonrpc-agent/README.md,它通过 Python SDK 与 JSON-RPC 驱动一个无人值守的编码 agent。

因此,除交互式 GUI 之外,dsh 还将其 agent 能力暴露为供自动化使用的线上协议。

盒内自带的内容

三个已发布的启动器包让这些端具体化:

角色
@deepseek-ai/dsh-base共享核心每个 profile 的第一层束:适配器、工具、持久化、策略、设置、凭据、遥测
@deepseek-ai/dsh-web-app浏览器添加 webserver、API 网关、浏览器插件清单、客户端 HMR 重载链
@deepseek-ai/dsh-headless一次性添加 headless 运行器;无 Host、无 HTTP 服务器、无浏览器
@deepseek-ai/dsh(CLI)启动器dsh 二进制;通过叠加这些束层来启动一个 profile

这些包合在一起,正是让 npx @deepseek-ai/dsh web--profile headless 都能工作的原因:启动器用 某个特定端的束来组合同一个共享核心。

示例与社区

仓库在可运行的 examples/ 目录中包含:headless-agentjsonrpc-agentmcp-memoryweb-cordis(一个能检查并编辑自己实时插件树的自指 agent)、web-schedule,以及 acp-agent(一个 Agent Client Protocol 自动化服务器)。每个示例都拥有自己的配置与前置条件;参见示例与演示

README.md 记录了社区端:

  • 通过 GitHub Discussions 提交反馈或 bug 报告。
  • 为插件仓库打上 dsh-plugin GitHub 话题以便被发现。
  • 一个 DeepSeek Harness Discord 服务器(https://discord.gg/Ycq5dCaS4)。中文版 README.zh.md 额外介绍了企微群(WeCom)与微信公众号。

许可证与 Cordis 的关系

dsh 采用 MIT 许可证LICENSE);第三方许可证披露于 THIRD_PARTY_NOTICES.md。尽管名字里有 「AI」,但该框架在核心层面并非针对特定模型:它以插件形式注册模型适配器(ctx.llm),而 DeepSeek 适配器只是其中之一。它依赖 Cordis 的方式值得注意:它并不像普通依赖那样从 npm 拉取 Cordis,而是把框架 内嵌进 monorepo 的 vendor/ 下(重命名进 @deepseek-ai 作用域,例如 @deepseek-ai/cordis),从而 完全拥有并可以修补自己的框架层。参见内嵌(Vendor)库

延伸阅读

  • 「一切皆插件」哲学 —— 架构核心思想。
  • 快速上手 —— 今天就安装并运行 dsh
  • Monorepo 结构解剖 —— 一条 dsh 命令背后的 49 组、约 219 个包。
  • README.md —— 上游的一句话概括与运行说明。
  • docs/architecture.md —— 上游架构深入解析。
  • packages/bundle/web-app/README.md —— web 束的角色与局限。