第0章 这场发布意味着什么

DeepSeek Harness 官方 GitHub 仓库 README(deepseek-ai/deepseek-harness);@deepseek-ai/dsh npm 包 README.zh.md;Cordis 论文《A Programming Paradigm for Spatiotemporal Composibility》

这一章回答「DSH 是什么、为什么要认真读它」——先看清它的定位、架构特征和设计哲学,再决定要不要往下读。

学完这一章你应该能做到

  • 说出 Harness 与 DeepSeek 模型产品的本质区别
  • 解释 Cordis 元框架的两大核心理论:时间可组合性与空间可组合性
  • 理解「空根 + 插件层叠」的架构选择意味着什么
无需前置知识。这里从零开始。

0.1 DSH 是什么:从 README 说起

打开 @deepseek-ai/dsh 的 README,第一句话就定了调:「dsh 是 DeepSeek Harness 中用于启动 profile 的命令;profile 由多个插件组合包 patch 层按顺序叠加而成,其上再应用用户自己的覆盖配置」。这不是一个 API,不是一组模型权重,而是一个插件编排框架——它定义的是「如何组合插件」,而不是「如何调用模型」。

这个定位很关键。DeepSeek 之前开源的都是模型(V3、R1、V4),这次开源的是如何使用模型的工具链本身。MIT 协议意味着你可以自由地用它、改它、拿它做自己的产品。仓库地址是 deepseek-ai/deepseek-harness

为什么需要这一章

后面的每一章都在拆 DSH 的机制。但如果你先不搞清「它到底是什么、为什么这么设计」,就会把一篇架构分析读成功能列表。先立坐标,再进细节。

ProfileProfile):DSH 的运行单元。一个 profile 目录包含 package.json(插件依赖)和 cordis.patch.yml(用户的配置覆盖层)。dsh web 就是 --profile web 的别名,启动 Web 界面;dsh --profile headless "任务" 则运行一个无头会话,打印结果后退出。

BundleBundle):一组插件的预组合包。dsh.profile.bundles 列表定义了叠加顺序——先从 dsh 安装目录解析内置 Bundle(dsh-basedsh-web-appdsh-headless),再从 profile 自身的 node_modules 解析外部插件。配置树以空根为起点,依次叠加每个 Bundle 的 patch 层。

0.2 为什么默认「空」:Cordis 的设计哲学

如果你第一次启动 dsh web,看到的界面可能远不如预期「丰富」——没有侧边栏文件树、没有一键部署、没有现成插件市场。这不是偷工减料,而是 Cordis 架构的直接后果。

空根原则

DSH 的配置树以空根为起点。这意味着所有功能——模型适配器、工具集、持久化、沙箱、设置——都由 dsh-base Bundle 的 patch 层插入,而不是内置在核心里。README 原文:「每个 Bundle 的 patch 按 dsh.profile.bundles 顺序叠加,然后是 profile 自身的 cordis.patch.yml,再到 home 级的 $DSH_HOME/cordis.patch.yml,最后是 --patch 覆盖层」。没有什么是不能被替换的。

这种设计直接来源于 Cordis 论文的核心思想。论文提出了两个正交维度:时间可组合性(移除组件时能完全回退其副作用)和空间可组合性(能声明并响应式管理组件间依赖)。DSH 的「空根 + 插件层叠」就是这两个维度在工程上的外化:每个插件都是一个 Cordis Fiber(组件实例),可以被加载、卸载和热替换,且卸载时所有副作用(事件注册、服务绑定、状态变更)都会被有序回退。

代价当然也很真实:上手门槛高。你需要理解 YAML 配置、插件依赖、Profile 层叠、Bundle 解析。但这不是「缺陷」——这是把可组合性放在首位时的必然代价。操作系统也有进程粒度的时间可组合性,但代价是每次重启丢弃所有进程本地状态;Cordis 把这个粒度细化到进程内的组件级别,代价则是用户需要自行组合。

0.3 为什么这份精读值得做

目前能找到的 DSH 资料,多数停留在「它开源了、一切皆插件、有四种模式」的复述层。这个页面要做的是把这些概括性表述拆开:插件系统长什么样(Cordis 核心库 + 加载器 + HMR)、配置怎么合并(Profile 层叠机制)、Agent 循环如何运转(dsh-agent-loop 驱动器)、会话日志为什么只能追加(事件溯源架构)、四种模式到底差在哪。这些机制层面的东西,才是你判断「DSH 值不值得用」的素材。

这份精读的素材来源全部是官方原始文档:npm 包内 90+ 个子包的 README、Cordis 学术论文、以及通过 --dump-config--dump-default-config 导出的实际配置树。不依赖任何第三方媒体报道,确保技术判断基于一手材料。

解读标注

页面里的技术描述基于官方文档和源码。凡是有推断或延伸分析的地方,都会明确标注。官方文档说什么、源码证明了什么、我推断什么,三条线分开写,你自己判断信哪条。

一句话记住:DSH 是一个基于 Cordis 元框架构建的开源 Agent 编排工具,它的核心设计是「空根 + 插件层叠」——所有功能由 Bundle 组合包提供,没有什么是不能被替换的。理解它,要从 Cordis 论文的「时空可组合性」理论开始。
L1 · 直接应用 发布语境

用你自己的话说,DSH 的「空根原则」是什么意思?为什么它和「一切皆插件」是同一个设计决策的两面?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果把 dsh-base Bundle 的内容硬编码进 Cordis 核心逻辑,空根原则会被破坏吗?哪些能力会因此丧失?
L2 · 变形迁移 时空可组合性

Cordis 论文提出了时间可组合性和空间可组合性两个正交维度。请分别解释这两个维度的含义,并举一个 DSH 中的具体例子说明它们如何同时体现在插件机制里。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果 Cordis 只实现了时间可组合性而没有空间可组合性,DSH 的插件系统会缺什么能力?
L3 · 构造反例 插件代价

「空根 + 插件层叠」意味着所有功能都由 Bundle 组合包提供,没有开箱即用的默认行为。请构造一个反例场景:在什么条件下,这种设计不仅是「哲学选择」而是真正的工程缺陷?也就是说出一个具体使用场景,让「默认不由核心提供任何功能」变成明显错误的决定。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果把「日志记录」也做成可选插件而非核心行为,你的反例会怎么变?
我能复述 DSH 空根原则的含义,解释它为什么是「一切皆插件」的基础
我能区分 Cordis 的时间可组合性与空间可组合性,各举一个 DSH 中的例子
我能说出「空根 + 插件层叠」设计的代价,以及它在什么场景下可能成为缺陷

答辩:如果我是审稿人

你说「空根原则让所有功能可替换」是优点。但一个 Agent 框架,如果连最基本的对话循环都要靠 Bundle 插入才能运转,用户第一次安装完面对的是零功能的空壳——这比「开箱即用」的产品差在哪里?实用上有什么补偿?

参考防守(先自己组织语言再看)

防守要点:第一,DSH 的目标用户是开发者而非终端用户——开发者要的是「我可以组装和替换」而不是「开箱即用」;第二,dsh-base Bundle 提供了所有基础能力(CLI、Agent 注册表、LLM 适配器接口等),实际安装后并非零功能,而是由 Profile 预装了合理的默认组合;第三,空根的关键价值不在于「初始什么都没有」,而在于「没有什么是不可移除的」——这是热插拔和 HMR 的前提。但也要承认:对于只想快速体验 Agent 的非开发者用户,空根带来的初始配置成本是真实门槛。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

DSH 是 DeepSeek 开源的 Agent 编排工具(MIT 协议),基于 Cordis 元框架构建。它的核心设计是「空根 + 插件层叠」——所有功能由 Bundle 组合包通过 patch 层插入,没有什么是不能被替换的。这个设计直接来源于 Cordis 论文的时空可组合性理论:时间维度保证插件移除时副作用完全回退,空间维度保证插件间依赖被声明式管理。理解 DSH,要从这套组合机制开始——这正是后面几章要拆的。

第1章 插件哲学

@deepseek-ai/dsh npm 包 README.zh.md(Profile 与 Plugin 机制);@deepseek-ai/cordis README(Cordis 核心库);Cordis 论文(插件即 Service 实现)

「一切皆插件」不是宣传语,而是一条具体的架构决策:模型也只是众多插件之一。这一章把这句话拆成可操作的判断标准。

学完这一章你应该能做到

  • 列出 DSH 中「插件化」覆盖的至少六类组件
  • 解释「模型是插件」与传统 Agent 框架的本质区别
  • 判断一个设计决策是否符合「一切皆插件」原则
建议先读第 0 章,了解发布语境。

1.1 「插件」这个词被用滥了,但这里不是比喻

很多产品说自己「支持插件」,实际是「我们做了个主程序,再留几个扩展点」。DSH 不是这种。它把「模型」「工具」「技能」「会话」「沙箱」「存储」「循环」「调度」「UI」全部定义为插件——没有一个是内置的「主程序」,全部可以替换、重排、删除。

这带来一个反直觉的推论:连「Agent 循环」本身(模型思考→调用工具→看结果→再思考)都是插件。官方文档里「循环」出现在插件清单里,意味着你甚至可以把「思考→行动」这个循环替换成别的结构。比如 PTC 模式,就是把「多次工具调用」压缩成「一次程序化调用」——这就是换了一个「循环插件」。

插件Plugin):在 DSH 语境里,指任何可以被独立加载、配置、替换、移除的模块化组件。插件由依赖(deps)、配置(config)、服务(service)三要素定义,运行在 Cordis 容器内。

为什么「模型是插件」这么重要

传统 Agent 框架(比如早期的 LangChain、或内置了模型的平台)把模型当作「引擎」,其余工具都是给引擎加油的附件。DSH 反过来了:模型只是「大脑插件」之一。这意味着你可以把 DeepSeek-V4 换成 Claude、GPT、本地 Llama,或者干脆同时挂多个模型做路由,而整个框架结构不用改。

1.2 三要素:依赖、配置、服务

在 Cordis 的世界里,一个插件不是一坨「实现功能的代码」,而是由三部分定义的结构:

依赖(deps):这个插件需要哪些其他插件先就位。比如「文件工具」插件依赖「沙箱」插件,因为文件读写发生在沙箱里。依赖声明让 Cordis 能自动解析加载顺序。

配置(config):这个插件的可调参数。每个插件声明自己的配置 schema,默认值、类型、校验规则都在这里。多个配置通过「层叠」合并(第 3 章细讲)。

服务(service):插件对外提供的接口。比如「shell 工具」插件提供 `exec()` 方法,「会话」插件提供 `push()`、`fork()` 方法。别的插件通过服务调用它,而不是直接 import 代码——这是「依赖倒置」的核心:上层不依赖下层实现,只依赖接口。

插件 = 依赖声明 + 配置模式 + 服务接口
(1)
要素作用例子
deps声明需要哪些前置插件web UI 依赖 session 插件
config可调参数与默认值model 插件配置 apiKey、model 名
service对外提供的接口能力exec()、push()、fork()

这三要素的组合逻辑,让「插件」天然具备可替换性——你只需要找一个实现了同样服务接口的插件,就能无缝替换。

1.3 「一切皆插件」的边界在哪

真的「一切」吗?按源码和官方文档,核心的 Cordis 运行时本身不是插件(它是容器)。「一切皆插件」描述的是 Agent 能力层:模型、工具、技能、会话、沙箱、存储、循环、调度、UI。这九类之外的「框架本身」,比如 Cordis 内核、DSH 的 CLI 入口,是固定的地基。

所以准确的说法是:DSH 里「凡是能换的,都用插件实现;框架只保留最小的胶水」。这与 Unix 哲学「做一件事并做好」一脉相承——但比 Unix 更激进:连「你」这个 Agent 的主循环都可以换。

打个比方:厨房不是餐厅

把 Agent 想象成一家餐厅。传统框架是「中央厨房」:菜单固定、后厨固定、你只能点套餐。DSH 是「厨师开放集市」——摊位(插件)随便租,菜谱(循环)随便改,连「什么是菜」都由你定。这个比方哪里不灵:集市里的「摊位」通常独立经营,而 DSH 的插件之间需要紧密配合(依赖、服务调用),不能像两个独立摊位那样完全不交流。

一句话记住:「一切皆插件」= 模型、工具、技能、会话、沙箱、存储、循环、调度、UI 都是可替换的插件;只有 Cordis 容器和 CLI 胶水是固定底座。
L1 · 直接应用插件清单

按官方「一切皆插件」的说法,DSH 中哪些组件被定义为插件?至少列出五个类别。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果官方说「存储」不是插件而是底座,会不会自相矛盾?
L2 · 变形迁移模型即插件

「模型是插件」给用户带来一个以前没有的灵活性。请举例:换模型时,系统提示词、工具列表、会话格式都不需要改,这是为什么?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。3分及以上为通过。
变式:如果某个工具只兼容特定模型(如某厂商专有工具),「模型无关」还成立吗?
L4 · 多概念综合判断设计符合原则

给你一个假设的设计:DSH 在核心里硬编码了「支持 /help 命令」的功能,不走插件。请用「一切皆插件」原则判断这个设计合不合理,并给出理由。如果合理,说明什么条件下合理;如果不合理,说明怎么改。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果「命令行参数解析」也做成插件,会有什么新的麻烦?
我能列出「一切皆插件」覆盖的组件类别清单
我能解释插件三要素(依赖/配置/服务)各自的角色
我能用「一切皆插件」原则评估一个具体设计决策

答辩:如果我是审稿人

你强调「插件三要素」给了可替换性。但「一切皆插件」会不会导致性能损失?每个插件都要走 Cordis 的事件循环和服务调用,这和直接函数调用比,开销在哪?

参考防守

防守要点:第一,DSH 的「性能」瓶颈在模型推理,不在插件调度——一次 LLM 调用可能是几百毫秒到几秒,插件调度是微秒级,可以忽略;第二,Cordis 有「运行时集成」机制,同一进程内的插件通过运行时对象直接调用,不序列化;第三,如果要极致性能,可以砍掉不必要的插件组合,只保留最小集——这正是「极简模式」存在的意义。但也要承认:如果插件数量爆炸(几百个),启动时的依赖解析和事件广播确实有可感知开销,这是「组合性」的代价。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

DSH 的「一切皆插件」不是口号而是架构决策:模型、工具、技能、会话、沙箱、存储、循环、调度、UI 全部插件化,只有 Cordis 容器和 CLI 胶水是固定底座。插件由依赖、配置、服务三要素定义,通过服务接口而非直接代码调用实现可替换性。理解这一点,才能理解后面所有机制(配置层叠、模式、日志)为什么这么设计。

第2章 Cordis 元框架

Cordis 论文《A Programming Paradigm for Spatiotemporal Composibility》(时空可组合性、Revertible Effects、Reactive Coeffects);@deepseek-ai/cordis README(核心库、Fiber 生命周期、HMR)

Cordis 是 DSH 的插件容器,也是「一切皆插件」能成立的根本原因。它 2019 年在 Koishi 里萌芽,2022 年独立开源。这一章讲它为什么能承载 Agent。

学完这一章你应该能做到

  • 解释 Cordis 论文中的时间可组合性与空间可组合性两个正交维度
  • 解释 Revertible Effects(可逆效应)和 Reactive Coeffects(响应式协效应)的建模方式
  • 列举 Cordis 核心库的五个关键特性及其在 DSH 中的体现
建议先读第 1 章「插件哲学」。

2.1 Cordis 是什么:从论文定义出发

Cordis 是 DSH 的插件运行时和容器。根据 Cordis 学术论文《A Programming Paradigm for Spatiotemporal Composibility》,它的核心贡献是提出了两个正交的可组合性维度:时间可组合性(Temporal Composibility)和空间可组合性(Spatial Composibility)。论文指出,传统框架在移除组件时无法完全回退其副作用,导致「一旦安装就难以移除」的问题;而 Cordis 通过将 effect 建模为携带显式逆函数的抽象,在运行时跟踪并通过逆函数精确回退,实现了组件移除时的完全清理。

论文还提出了 VSCode 作为反面案例:VSCode 拥有 87/100 的扩展含可执行代码,但缺乏热卸载机制——移除扩展必须重启编辑器;同时 extensionDependencies 机制几乎无人使用(7/100),说明传统的静态依赖声明在没有运行时响应式管理时形同虚设。Cordis 正是针对这两个问题提出了理论解决方案。

元框架Meta Framework):不直接提供业务功能,而是提供「如何组织功能」的框架。Cordis 不帮你写对话、不帮你调模型,它只负责:谁先加载、谁依赖谁、配置怎么合并、事件怎么广播。论文将这种抽象形式化为统一上下文 Γ∞ = μΓ. Γ × (Γ → Γ) × Σ,其中 effect 和 coeffect 被统一为单一类型。

为什么「元框架」适合 Agent

Agent 的本质是「编排」:把模型、工具、记忆、沙箱按特定顺序组合。传统应用框架为「页面」服务,Cordis 为「组件组合」服务。Agent 需要的恰恰是后者——你不是在写一个固定 UI,你是在搭一个可以不断加零件的系统。元框架把「搭零件」本身工程化了。

2.2 论文核心理论:Revertible Effects 与 Reactive Coeffects

Revertible Effects(可逆效应):论文将 effect 建模为 Γ → Γ × (Γ → Γ),即每个 effect 不仅产生状态变更,还携带一个显式逆函数 Γ → Γ。运行时跟踪所有已执行的 effect,当组件被卸载时,按逆序应用逆函数,精确回退该组件产生的所有副作用。这就是时间可组合性的实现机制——移除组件时,它注册的事件监听器、服务绑定、状态变更全部被回退,系统状态等价于这个组件从未被加载过。

Reactive Coeffects(响应式协效应):论文将依赖建模为规约(specification)而非静态引用。当 context 发生变更时,变更被分类为 activating(激活新依赖)、deactivating(取消旧依赖)或 neutral(无影响),运行时根据分类决定是否需要重新解析依赖关系。这就是空间可组合性——插件的依赖不是硬编码的 import,而是声明式的规约,当环境变化时自动响应。

在 Cordis 核心库(@deepseek-ai/cordis README)中,这两个理论概念被实现为具体的 API:ctx.effect() 用于注册带逆函数的 effect,ctx.set() 用于声明响应式状态,Fiber 生命周期管理组件的创建与销毁。这些 API 构成了 DSH 插件系统的编程接口。

Cordis = Revertible Effects(时间) + Reactive Coeffects(空间) + 统一上下文 Γ∞
(2)
与官方文档的对应

论文中的 effect 对应 Cordis README 中的 ctx.effect() API;coeffect 对应 ctx.set() 和服务声明机制。统一上下文 Γ∞ 对应 README 描述的 Fiber 生命周期与插件注册表。但论文侧重理论证明(五个元理论性质:保持、时间可组合性、空间可组合性、进展、汇合),README 侧重工程接口——两侧是同一套设计的不同抽象层次。

2.3 DSH 与 Cordis 的版本关系

打开 DSH 本地安装包(`npm` 全局装 `@deepseek-ai/dsh`)的 package.json,依赖里明确写着 cordis 4.0.1。而 Cordis 4 是大版本,带更完善的 schema 校验、类型系统和异步生命周期。DSH 直接把 Cordis 4 作为运行时依赖,等于站在了成熟版本上。

这意味着两件事:第一,DSH 的插件格式就是 Cordis 插件格式,意味着你理论上可以复用 Cordis 生态里已有的插件(如果接口兼容);第二,Cordis README 明确列出核心 API:ctx.effect()(注册可逆 effect)、ctx.set()(声明响应式状态)、Fiber 生命周期(管理组件创建与销毁)、事件总线(广播与监听)、服务声明与获取。DSH 的 Agent 层能力(Agent 注册表、LLM 适配器、循环驱动器等)全部建立在这些 API 之上。

存疑点

DSH 的「技能」(skill)概念在 dsh-skill README 中被定义为「技能提供者注册表 + 分层作用域 + 调用策略」,与 Cordis 插件格式有关联但不是同一概念。技能更可能是「配置化的插件元数据」——技能提供者注册在 Cordis 服务中,但调用时的分层作用域(model/user invocable)是 DSH 独有的语义层。这个推断基于 README 描述,待源码确认。

2.4 为什么复用比自研聪明

DeepSeek 完全可以给 Harness 自己写一个插件系统。但复用 Cordis 有四个实打实的好处:

  • 成熟度:论文证明的五个元理论性质(保持、时间可组合性、空间可组合性、进展、汇合)为正确性提供了理论基础,HMR 的事务性保证已在生产中验证。
  • 抽象层次:Cordis 抽象的是「插件组合」这一层,与业务领域无关。无论是聊天机器人还是 Agent 编排,核心需求都是组件的加载、依赖管理、配置合并和事件广播。
  • 聚焦:团队可以把精力放在「Agent 语义」(循环、工具、轨迹)而非「插件机制」。
  • 理论保证:论文的汇合性质(Confluence)意味着「动态历史不留痕迹」——无论插件以什么顺序加载和卸载,最终系统状态一致。这对 Agent 的可重复性至关重要。

打个比方:内燃机 vs 专用电机

自造插件系统像专为电动车设计的电机——极致适配但生态孤岛。复用 Cordis 像通用内燃机——成熟、适配一切、有海量零件商(社区插件)。这个比方哪里不灵:内燃机会被电机淘汰,但 Cordis 的「组合思想」短期内看不到被淘汰的迹象,因为组合性在 Agent 时代反而更吃香。

一句话记住:Cordis 是一个基于时空可组合性理论的元框架,核心贡献是 Revertible Effects(可逆效应,保证移除组件时完全回退副作用)和 Reactive Coeffects(响应式协效应,声明式管理依赖)。DSH 站在 Cordis 4.x 上做 Agent 层,等于「复用有理论保证的车架,自研发动机舱」。
L1 · 直接应用Cordis 核心理论

Cordis 论文提出了哪两个正交的可组合性维度?分别解决什么问题?DSH 用的是 Cordis 的哪个大版本?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果 Cordis 只实现了时间可组合性,VSCode 的哪个问题仍然无法解决?
L2 · 变形迁移Revertible Effects

用大白话解释 Revertible Effects(可逆效应):为什么它能把 effect 建模为 Γ → Γ × (Γ → Γ)?逆函数在组件卸载时起什么作用?举一个 DSH 插件的具体例子。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果一个 effect 没有提供逆函数,时间可组合性会被破坏吗?系统会怎么表现?
L3 · 构造反例理论 vs 工程

Cordis 论文证明了五个元理论性质(保持、时间可组合性、空间可组合性、进展、汇合)。请构造一个反例:在什么场景下,即便有这些理论保证,复用 Cordis 做 Agent 容器仍然是错误决策?给出理由。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果 Cordis 的许可证变成非宽松协议(非 MIT),这个决策会被推翻吗?
我能解释 Cordis 论文中的时间可组合性与空间可组合性
我能解释 Revertible Effects 和 Reactive Coeffects 的建模方式
我能判断「复用 Cordis」在什么场景下是错误决策

答辩:如果我是审稿人

你说 Cordis 有理论保证。但论文证明的是数学性质(汇合、进展),Agent 编排需要的是「在真实 LLM 调用不稳定的场景下可靠运行」。数学保证和工程可靠性真的是同一件事吗?

参考防守

防守要点:第一,数学保证是工程可靠性的必要条件而非充分条件——汇合性保证「无论加载顺序如何,最终状态一致」,这排除了“顺序依赖 bug”这一类问题;第二,论文的进展性质保证系统能正常推进,不会因插件交互而锁死;第三,Cordis 的 HMR 机制采用事务性重载(三阶段:模块分类→过期条目检测→事务性重载),保证系统永不进入半重载状态,这是论文理论在工程上的直接对应。但确实要承认:LLM 调用的超时、幻觉、格式错误等问题不在 Cordis 的理论覆盖范围内,这些需要 DSH 的 Agent 层(如 dsh-llm 的错误分类机制)来解决。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

Cordis 是 DSH 的插件运行时,核心贡献是论文提出的时空可组合性理论:Revertible Effects(可逆效应)保证移除组件时完全回退副作用,Reactive Coeffects(响应式协效应)保证依赖声明式管理并响应变更。五个元理论性质(保持、时间可组合性、空间可组合性、进展、汇合)为正确性提供理论基础。复用 Cordis 而不是自造,让 DeepSeek 能把精力放在 Agent 语义层,但也意味着 Agent 的运行时可靠性部分依赖于 Cordis 的理论假设是否在真实场景中成立。

第3章 配置层叠与 Profile

@deepseek-ai/dsh README.zh.md(Profile 层叠机制、Bundle 解析);@deepseek-ai/dsh-base README(dsh-base 包作为首个 Bundle 层)

DSH 的「配置」不是一个大 JSON,而是五层叠起来的。这一章讲清楚每一层是谁、优先级怎么定,以及 `--dump-config` 到底在查什么。

学完这一章你应该能做到

  • 按优先级顺序说出配置层叠的五个来源
  • 解释 profile 是什么、`--profile web/headless/tui` 怎么用
  • 理解 `--dump-config` 的作用和输出形态
建议先读第 1、2 章(插件哲学 + Cordis)。

3.1 五层配置:后写的赢了

官方文档里 DSH 的配置层叠结构是这样的(从底层到顶层):

  1. 空根(Empty Root):什么都没有,纯粹是起跑线。
  2. dsh.profile.bundles 各插件包的 patch:每个插件包自带一份「补丁」(patch),声明它往配置里加什么。这是插件声明式配置的一部分。
  3. profile 自身的 cordis.patch.yml:当前选中的 profile(如 web/headless/tui)自带的配置文件。
  4. $DSH_HOME/cordis.patch.yml:你放在 home 目录下的用户级配置。
  5. 命令行 --patch 覆盖层:临时传参,优先级最高,只对本次运行生效。

合并规则一句话:后写的覆盖先写的。插件包说「模型默认是 deepseek-chat」,你的 $DSH_HOME 说「不,用 my-ollama」,最后生效的是你的。

ProfileProfile):一组配置的命名集合。DSH 内置了 web、headless、tui 三个 profile,分别对应网页版、无界面后台、终端界面三种运行形态。profile 相当于「预设的插件组合方案」。

为什么要五层而不是一层

一层配置意味着每次改都动全局,容易互相踩踏。分层把「谁负责哪部分」分开:插件包管自己的默认值,profile 管运行形态,用户管个人偏好,命令行管临时实验。每一层都有明确的「负责人」,改的时候不用翻全局 JSON。

3.2 Profile 到底是什么

你可以把 profile 理解为「一个已配好的插件组合的快捷方式」。`dsh --profile web` 表示:以 web 形态启动——加载 web 界面插件、会话插件、模型插件、工具插件,组合成一个「跑在网页里的 Agent」。`--profile headless` 表示:只要核心逻辑,不要界面——适合服务端调用、批处理、测试。

内置三个 profile 的区别,主要在「UI 插件的取舍」上,底层的模型、工具、会话都一样(除非 profile 明确改)。这就是为什么官方说「profile 可以自由定义」——你把 web profile 的文件复制一份,改几个插件组合,就成了自己的 profile。

另外注意:`dsh web` 是 `dsh --profile web` 的别名,官方 CLI 里专门做了这个快捷方式。这说明 web 形态是官方最想推的第一个体验入口。

3.3 --dump-config 与 --patch:查配置、改配置的钥匙

--dump-config:把「当前 profile 合并出来的最终配置树」打印出来。注意是「合并后」的,不是某一层。它帮你回答「我现在这套配置到底生效了什么」——排查插件冲突、默认值覆盖、语法错误都靠它。

--patch <文件>:把一份 YAML/JSON 作为最高优先级的覆盖层临时合并。适合「今天跑一个实验,不想动 home 配置」的场景。

这两个命令配合 `dsh plugin --profile <name> <pnpm args>`(在 profile 环境里装插件)基本就能完成日常的「查配置、改配置、装插件」闭环。

一个常见坑

`--dump-config` 输出的「合并树」是按优先级逐层覆盖后的结果,但你看到的某个值不一定是「最终生效值」——因为插件在运行时还可以再改自己的配置(运行时动态配置)。如果你改完配置发现没生效,先看是不是被运行时改了,别光盯文件。(这是我的理解,官方未明确说清楚这一点。)

3.4 实验室:五层叠一座塔

实验室 3-1:五层配置合并模拟可运行

每一层都可以「有没有值」两种情况。拖开关观察「模型名」和「温度」最终被哪一层决定。

有值(deepseek-chat)
有值(v4-pro)
点击「运行」查看最终生效值
说明:本实验室是「配置层叠」的简化模拟,模拟五层中「后写覆盖先写」的逻辑。能证明:最终值只来自「最上层有值的那一层」。不能证明:真实 DSH 的配置 schema 校验、插件运行时改配置等复杂行为。真实的层叠逻辑见官方文档。
一句话记住:配置五层——空根 → 插件包 patch → profile 自身 → $DSH_HOME → --patch 命令行,后写覆盖先写;`--dump-config` 看合并结果,`--patch` 做临时覆盖。
L1 · 直接应用五层配置

按优先级从低到高写出 DSH 配置的五个来源。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果我想「只在本命令生效」地改配置,应该用哪一层?
L2 · 变形迁移Profile 语义

`dsh web` 和 `dsh --profile web` 是什么关系?这个别名设计暗示了什么产品倾向?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果官方把 web 当作默认 profile,会有什么风险?
L4 · 多概念综合合并优先级综合

现在有:插件包设置 temperature=0.3,profile 没设,$DSH_HOME 设置 temperature=0.8,命令行 --patch 设置 temperature=0.5。请问最终生效值是多少?如果插件包「硬编码」了 temperature 且不允许覆盖,情况会变成什么样?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果插件包在运行时把 temperature 又改回 0.3(运行时修改),最终用户设的还有效吗?这暴露了什么设计问题?
我能说出五层配置的优先级顺序
我能解释 --dump-config 与 --patch 的用途区别
我能用实验室模拟配置合并的结果

答辩:如果我是审稿人

五层配置结构清晰,但代价是心智负担。普通用户记不住哪层优先。你凭什么认为「分层」比「一个文件」更好?

参考防守

防守要点:第一,普通用户根本不用主动接触所有层——默认只用 $DSH_HOME 或 --patch 即可,其它层由工具链维护;第二,分层让「谁改了什么」可追溯,配置文件可以被版本管理;第三,Cordis 的层叠机制与插件声明式配置天然契合,插件自带配置才能做到「装了就配好」。但承认:文档引导不够时,用户确实容易「改错层」,这是 v0.1 的代价,需要在社区文档中补齐。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

DSH 配置是五层叠加:空根 → 插件包 patch → profile 自身 → $DSH_HOME → --patch 命令。后写覆盖先写。Profile 是「已配好的插件组合方案」,内置 web/headless/tui 三个。`--dump-config` 查看合并树,`--patch` 做临时覆盖。这五层机制是「一切皆插件」在配置维度的落地——每个插件声明自己的配置,用户用优先级控制最终效果。

第4章 四种运行模式

@deepseek-ai/dsh README.md(Entry modes: --profile, headless, web, plugin);@deepseek-ai/dsh-base README(平台相关插件配置)

同一个 dsh,四种模式就是四种性格。这一章讲清楚每种模式是什么、解决什么问题、适合谁。

学完这一章你应该能做到

  • 列出四种模式并各用一句话说明用途
  • 解释 PTC 模式「程序化工具调用」到底改了循环的哪一步
  • 判断一个任务应该用哪种模式
建议先读第 1 章(插件哲学)理解「循环也是插件」。

4.1 一张表看懂四种模式

模式核心思想适合场景
标准模式完整工具组合,Agent 自己决定用什么日常对话式 Agent、多步任务
PTC 模式模型生成「一段程序」,一次调用完成多轮工具需要顺序执行多步操作的批处理
极简模式只给 shell + 一个文件编辑工具基准测试、性能对比、最小可用
创造模式可检查运行时、在内存里试验 Cordis 插件、组合新模式插件开发、Agent 调试、原型验证

这四种模式不是四个「产品版本」,而是四个「插件组合方案」——对应第 3 章说的 profile 概念。每种模式本质上是「换了一套工具插件 + 循环插件」。

4.2 标准模式:最像普通 Agent 的形态

标准模式把完整工具集都交给模型:shell、文件读写、网络、代码执行、信息检索……模型在一个循环里反复「思考→选工具→执行→看结果」。这是目前主流 Agent(Claude Code、Codex 等)的形态。

优点:灵活,能处理不可预知的任务。缺点:每一轮都要等模型推理,多步任务延迟高、token 消耗大、还可能跑偏。

4.3 PTC 模式:把「想一步做一步」换成「写一段程序」

PTC(Programmatic Tool Calls,程序化工具调用)是 DSH 的一个亮点。普通循环里,模型每一步「说一句话、调一个工具、等结果」;PTC 模式让模型「生成一段代码」,这段代码可以连续调用多个工具、处理中间结果、做条件分支——相当于把「对话式调度」变成「程序化调度」。

打个比方:标准模式像你一步步指挥同事(每个步骤都要等回复);PTC 模式像你把整个任务的执行步骤写成一张清单交给同事(中间不用一直请示)。

为什么 PTC 能省时间和 token

因为「工具调用之间的决策」不再需要模型推理。比如「读文件→解析→写摘要→存盘」四步,标准模式要四次推理(每步之间模型要决定下一步做什么),PTC 模式只推理一次(生成那四步的代码),后面三步是程序执行,不走模型。省的就是这三次推理的延迟和 token。

但 PTC 的代价是:模型生成的「程序」如果写错了(比如工具参数拼错),没有中间的人工校验机会,可能一条路错到底。所以 PTC 适合「任务步骤明确、可预测」的场景;对「探索性、需要中途看结果调整」的任务,标准模式更稳。

4.4 极简模式:给基准测试准备的「裸奔」

极简模式只给两个工具:一个 shell、一个文件编辑。为什么官方要提供这种「少到可怜」的模式?答案:基准测试的公平性。

Agent 评测里,「工具越多 = 能力越强」往往是噪音——一个 Agent 用 30 个工具完成任务,另一个只用 2 个,比的是工具库不是推理能力。极简模式把工具压到最小,逼模型用推理+基础工具完成复杂任务,才能量出「模型本身的 Agent 能力」。

这就是官方说的「用于基准测试」。如果有一天你看到论文用 DSH 做 Agent 评测,大概率跑的是极简模式。

4.5 创造模式:给插件开发者准备的「手术室」

创造模式(Creative Mode)面向插件开发者:你可以直接检查正在运行的 Cordis 运行时,在内存里试验插件、动态组合新的模式,甚至把新组合固化成新的 profile。它本质是一个「活的调试器 + 插件实验室」。

这意味着「创造模式」是四种模式里唯一一个「改自己」的模式——它用 Agent 的能力来改 Agent 的构成。这在传统框架里几乎不可想象:IDE 不能改自己的运行时,但 Agent 可以(在沙箱里)。

存疑点

「在内存中试验插件」的具体机制(是否全热更新、是否支持持久化到 profile)官方描述得比较含糊。这是我的理解:创造模式提供对 Cordis 运行时的编程接口,让模型或开发者可以像「REPL」一样操作插件图,但能否自动保存改动为正式 profile,尚未证实。

4.6 实验室:PTC vs 标准模式的成本对比

实验室 4-1:标准 vs PTC 的调用成本可运行

模拟一个 5 步任务。标准模式每步 1 次推理,PTC 模式 1 次推理 + 程序执行(省 4 次)。拖「步数」看总延迟差异。

5
800
80
点击「运行」查看对比
说明:标准模式耗时 = 步数 × 单步推理耗时;PTC = 1 次推理 + 步数 × 程序执行每步耗时。本实验室是简化模型:没算 token 数、没算工具本身的执行时间差异,也没考虑 PTC 程序写错重试的额外成本。目的只是直观感受「省掉中间推理」的数量级差异。
一句话记住:四种模式=四种插件组合方案。标准(自主循环)、PTC(程序化批处理)、极简(裸工具做基准)、创造(改 Agent 本身的实验室)。
L1 · 直接应用四种模式

四种模式各解决什么问题?各自适合什么场景?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果官方新增「只给一个数据库工具的极简模式」,还能叫「极简」吗?
L2 · 变形迁移PTC 原理

PTC 模式和标准模式在「循环」层面有什么本质区别?为什么 PTC 能省延迟和 token,代价是什么?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果任务有分支(根据中间结果决定下一步),PTC 还适用吗?
L3 · 构造反例极简模式的意义

极简模式只有 shell + 文件编辑。请论证:这个模式测出来的成绩,为什么比「工具全开的成绩」更能反映模型本身的 Agent 能力?或者,构造一个反例:什么情况下「工具少」反而让测试结果失真?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果评测任务本身依赖 GUI(需要点击按钮),极简模式(无 GUI 工具)会让所有模型一起挂,这个测试还算公平吗?
我能列出四种模式及适用场景
我能解释 PTC 模式省时间省 token 的原理
我能用成本模型估算标准 vs PTC 的延迟差

答辩:如果我是审稿人

PTC 听起来很美,但它要求模型「一次生成整段正确程序」。如果模型生成的程序有 bug,是不是比标准模式的「逐步纠错」更差?官方有没有给 PTC 的失败率数据?

参考防守

防守要点:第一,PTC 模式通常配合「程序执行 → 报错 → 反馈给模型 → 模型修改程序」的闭环,不是「生成完就丢」;第二,对于确定性任务,PTC 一次成功率随模型能力提升而提高,错误成本是可接受的(重跑程序比重新推理便宜);第三,官方确实没有公开 PTC 失败率的对比数据,这是存疑点。承认这个验证缺失,是理性的。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

四种模式本质是四种插件组合:标准(自主循环)、PTC(程序化批量调用,省推理)、极简(基准测试用)、创造(运行时插件实验室)。理解「模式=配置组合」后,你就不会再被「模式」这个词迷惑——它只是 profile 换了一套工具和循环。

第5章 Agent 循环:Cordis 如何驱动模型

@deepseek-ai/dsh-agent README(Agent 接口、AgentRegistry、事件词汇);@deepseek-ai/dsh-agent-loop README(AgentLoop 驱动器、轮次/步骤生命周期、Inbox 机制)

Agent 的核心是「循环」:模型思考 → 调工具 → 看结果 → 再思考。这一章把它拆开,看 Cordis 是怎么驱动这个循环的。

学完这一章你应该能做到

  • 画出 Agent 循环的四个阶段
  • 解释系统提示词、工具列表、上下文如何进入模型
  • 理解「循环也是插件」的实际含义
建议先读第 1 章(插件哲学)和第 4 章(模式)。

5.1 循环的四个阶段

任何一个 Agent 都在跑同一个基本循环,区别只在「谁控制它、怎么控制」:

  1. 组装上下文:把系统提示词、历史消息、工具定义、记忆注入到给模型的请求里。
  2. 模型推理:模型生成文本或工具调用请求。
  3. 执行工具:如果模型要求调用工具,执行并把结果写回。
  4. 循环判断:结果是「完成」还是「继续」?继续就回到第 1 步。
为什么这个循环值得单开一章

因为 DSH 的野心不只是「做一个能跑循环的工具」,而是「把循环本身暴露给你改」。你改第 3 步(工具执行)就是换工具插件;改第 4 步(循环判断)就是换「循环插件」——PTC 模式就是换了第 4 步,把「看结果再决定」换成「按程序继续跑」。

5.2 上下文组装:模型「看到」了什么

每次请求,模型看到的不是「你的问题」,而是系统组装好的一整套上下文。DSH 里这套东西的构成大致是:

  • 系统提示词:由「技能」「人格设定」等插件提供,定义 Agent 的行为边界。
  • 历史消息:之前的对话和工具结果,可能被压缩(compaction 插件)或裁剪。
  • 工具列表:当前 profile 加载了哪些工具,它们的 JSON schema 描述。
  • 记忆:长期记忆检索出来的相关片段。
  • 事件流:子 Agent 的调度记录、最近的操作事件。

这里的「记忆」和「上下文注入」都出现在官方日志设计里(第 7 章会展开),说明 DSH 把「模型看到什么」当成一件可审计、可复现的事,而不是黑箱。

5.3 「循环插件」长什么样

根据 dsh-agent-loop README,DSH 的 Agent 循环由 AgentLoop 驱动器实现。这是整个框架中唯一的具体循环驱动器,负责 Turn(轮次)和 Step(步骤)的生命周期管理。每个 Turn 包含完整的「模型推理→工具调用→结果处理」循环,Step 则是 Turn 内部的细粒度执行单元。README 还描述了 Inbox(收件箱)机制——工具调用请求被放入 Inbox,驱动器按照一定策略(如并行/串行分类)取出执行。

这也解释了为什么「模式」是 profile 级的配置:换模式=换循环插件+换工具集合。PTC 模式本质上是改变了 Step 的执行策略,把多步工具调用从「逐个推理」变成「程序化批量执行」。

基于 README 的解读

dsh-agent-loop README 明确定义了 Turn/Step 生命周期和 Inbox 机制,但具体的并行策略参数(哪些工具可以并行、最多几个并行)未在 README 中完整体现。上述描述基于 README 的接口定义和事件词汇(agent-loop/* 事件系列),运行时细节待源码确认。

5.4 图解:Agent 循环交互图

图解 5-1:Agent 循环四阶段(点击查看说明)交互
组装上下文 提示词+历史+工具 模型推理 思考/调用决定 执行工具 shell/文件/网络 循环判断 完成? 继续?

实线:主循环(上下文→模型→工具→判断)。虚线回到「组装上下文」=继续;红色虚线到顶部=完成/退出。点击四个方块看详情。

一句话记住:Agent 循环四阶段(组装上下文→模型推理→执行工具→循环判断)在 DSH 里每一环都是插件;换循环插件=换模式。
L1 · 直接应用循环阶段

Agent 循环有四个阶段,按顺序写出来,并说明每阶段「模型看到/产生」什么。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果某个 Agent 没有「循环判断」阶段,它会表现成什么样?
L2 · 变形迁移循环即插件

「循环也是插件」是什么意思?用 PTC 模式举例说明「换循环插件」如何改变 Agent 行为。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果「循环判断」被设计成「永远返回继续」,会发生什么?
L4 · 多概念综合上下文注入

上下文注入是 Agent 循环的第一步。请综合分析:如果给模型注入的「工具列表」里有一个带毒的工具描述(描述说它能删除文件但实际是虚假的),会发生什么?结合「一切皆插件」讨论:这暴露了插件体系的什么风险?怎么缓解?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果「记忆注入」的内容是假的(记忆污染),对 Agent 的危害有多大?与工具描述伪造相比哪个更危险?
我能画出 Agent 循环四阶段
我能解释上下文注入的构成
我能分析插件描述被伪造的安全隐患

答辩:如果我是审稿人

你说「循环也是插件」,那如果某个循环插件有 bug,是不是整个 Agent 就坏了?插件化的循环是不是比硬编码循环更不可靠?

参考防守

防守要点:第一,任何软件都会有 bug,插件化不会让 bug 变多,只是把 bug 的位置从「框架」挪到「插件」,而插件可以单独替换、回滚、隔离;第二,Cordis 有生命周期管理和依赖解析,一个插件的崩溃可以被捕获,不会必然拖垮整个运行时;第三,作为对比,硬编码循环出 bug 只能等框架升级,插件化循环出 bug 可以立刻换插件。但必须承认:插件生态的质量参差不齐,官方需要「官方维护的核心插件集」来兜底。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

Agent 循环四阶段——组装上下文、模型推理、执行工具、循环判断——在 DSH 里都是插件化的。模型看到的上下文(系统提示词、历史、工具、记忆、事件)被显式组装,循环协议可以被替换(标准/PTC 就是换了循环插件)。理解循环的可替换性,是理解 DSH 与其它 Agent 框架本质区别的关键一步。

第6章 工具即插件

@deepseek-ai/dsh npm 包 node_modules/@deepseek-ai/dsh-tool-* 系列 README(dsh-tool-bash, dsh-tool-fs, dsh-tool-web, dsh-tool-skill 等);@deepseek-ai/dsh-skill README(技能注册表);@deepseek-ai/dsh-sandbox README(沙箱服务)

工具是 Agent 的「手」。DSH 把每个工具都做成了插件,且用「沙箱」约束工具的越权风险。这一章看工具插件如何组织、如何与模型交互。

学完这一章你应该能做到

  • 列出 DSH 工具插件的主要类别
  • 解释工具描述(schema)如何被模型「看到」
  • 理解沙箱在工具体系中的安全作用
建议先读第 1 章(插件哲学)和第 5 章(循环)。

6.1 工具插件的全景

打开 DSH 的 package.json,你能看到一长串 `@deepseek-ai/dsh-tool-*` 的子包:dsh-tool-shell、dsh-tool-file(文件)、dsh-tool-web(网页)、dsh-tool-code(代码执行)……目前已经 20 多个。每个工具一个 npm 包,每个包都是一个 Cordis 插件。这就是「工具即插件」在包结构上的体现。

工具插件的职责:定义工具的 schema(参数怎么传)、实现工具的 execute(真正干活)、声明需要的依赖(比如 file 工具依赖沙箱)。模型不直接调用工具实现,而是「看到 schema → 生成 JSON 调用 → Cordis 路由到对应工具插件 → 执行 → 结果写回」。这一整条链路上,模型和实现是完全解耦的。

工具 SchemaTool Schema):描述工具「怎么调用」的结构化定义——工具名、参数名、参数类型、必填性、描述。模型靠它知道「这个工具能干嘛、参数怎么填」。schema 写得越清楚,模型越会用对。

为什么每个工具单独一个包

两个原因。第一,按需加载:用户不用装所有工具,只用自己 profile 里声明的;第二,独立版本:某个工具升级不影响其它工具。代价是依赖树变长——你 npm 装 dsh 时会看到几十个依赖包,这正是「微包 + monorepo」的生态风格。

6.2 沙箱:工具的安全边界

「沙箱」也是 DSH 的插件(官方清单里有)。它控制工具能在什么环境里执行:文件读写限定在某个目录、网络访问受限、命令执行被白名单过滤。这非常重要,因为 Agent 的本质是「模型拿到你电脑的执行权」——没有沙箱,一个 prompt injection(提示词注入)就可能让模型把文件删了。

沙箱插件与工具插件的关系是「依赖」:工具插件声明依赖沙箱服务,Cordis 保证沙箱先启动,工具才能在沙箱里执行。这就是第 2 章「依赖倒置」的实际应用——工具不直接操作文件系统,而是调用沙箱服务接口。

存疑点

官方对沙箱的「隔离强度」描述不多——它到底是操作系统级隔离(容器/VM)还是进程内模拟(chroot 式)?这决定了安全上限。我的推断:v0.1 阶段很可能是「进程级限制 + 目录白名单」为主的轻量隔离,真正的系统级隔离依赖后续插件。这属于安全敏感点,建议关注官方后续说明。(这是我的理解)

6.3 图解:工具调用链路

图解 6-1:一次工具调用的完整链路交互
模型 生成 JSON 调用 工具 Schema 参数校验 执行沙箱 受限环境 结果写回 进会话日志

模型生成调用 → schema 校验 → 沙箱执行 → 结果写回 → 结果再进模型(虚线)。点击方块看详情。

一句话记住:工具=插件(一个工具一个包),通过 Schema 暴露给模型、在沙箱里执行、结果写回循环。安全边界由沙箱插件提供,依赖关系由 Cordis 管理。
L1 · 直接应用工具即插件

为什么 DSH 把每个工具做成独立的 npm 包/插件?两个主要理由是什么?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果一个工具被频繁调用,独立成包会不会有性能问题?
L2 · 变形迁移工具 Schema

工具 Schema 为什么能决定模型调用的成功率?如果 schema 描述写得含糊(比如参数说明缺了单位),会发生什么?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果工具 Schema 描述了「可删除任意文件」,但沙箱只允许删除临时目录,会发生什么?这暴露了谁的责任边界?
L3 · 构造反例沙箱安全

构造一个场景:沙箱配置正确(文件只读目录 A),但 Agent 仍然可以拿到 A 之外的数据。请指出可能泄漏的路径(至少两条),并说明插件体系如何堵。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果沙箱是「按目录隔离」,但工具本身支持「读任意路径参数」且没校验,谁会背锅?
我能说出工具独立成包的两个理由
我能解释 Schema 与模型调用成功率的关系
我能分析沙箱的泄漏路径与边界

答辩:如果我是审稿人

工具独立成包,依赖树大了,安装慢。而且工具间如果有共享逻辑(比如都要做 JSON 解析),是不是重复代码?你怎么解释 monorepo 的价值?

参考防守

防守要点:第一,安装慢是可控的——npm 有缓存、有 tree-shaking(虽然有限),真正运行只加载 profile 引用的包;第二,共享逻辑放公共包(如 dsh-core)复用,不是每个工具复制;第三,monorepo 的价值在于「接口一起演进」——工具 A 升级 Schema,依赖它的工具 B 在同一仓库同步更新,不会出现版本漂移。用户侧真正痛的是「首次 npm 装 dsh 要下 530 个包」,这可以接受,因为装一次管很久。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

工具在 DSH 里是独立插件,通过 Schema 暴露给模型,在沙箱内执行。工具与模型解耦、工具与实现解耦(通过服务接口)、工具与执行环境隔离(通过沙箱),这三层解耦就是「工具即插件」的安全与灵活来源。

第7章 会话与轨迹日志

@deepseek-ai/dsh-session README(事件溯源会话日志、Surface 投影、SessionStore、Chunk-rows 编解码、请求头重建)

DSH 把「模型看到的一切」都写进一份只能追加的日志。为什么是追加?这份日志能干嘛?这一章拆解这条「不会说谎的轨迹」。

学完这一章你应该能做到

  • 解释 append-only 日志的真实含义
  • 列出会话日志记录的内容类别
  • 说明 Trajectory 视图、恢复、分叉、检索、回放为什么共享同一事件流
建议先读第 5 章(Agent 循环)理解事件从哪来。

7.1 append-only:一条不会说谎的轨迹

传统 Agent 平台保存的是「对话历史」——一般就是一串 user/assistant 消息。DSH 的会话日志(session log)不只记录对话,它记录「模型在整个会话期间看到的一切」:系统提示词、思维链、工具调用与结果、子 Agent 的调度、上下文注入的事件。更重要的是,它是 append-only(仅追加)——只能往里写,不能改、不能删。

为什么是 append-only?因为可审计性。一旦允许改,就没有人能信任日志。一个 LLM 在「改完一段历史后」说「我刚才没说过 X」,你信还是不信?append-only 直接消除了这种争议空间——日志就是事实,谁也别想改。

Append-onlyAppend-only):日志的写入模式。只能追加新条目,不能改老条目、不能删条目。区块链的核心结构、git 的不可变 commit 历史、会计的账本,都是 append-only 思想的实例。

为什么 append-only 在 Agent 场景特别重要

因为 Agent 有「幻觉」。模型可能会「声称」它刚才做过 A,而你记忆里它其实做过 B。如果没有 append-only,平台可以、模型也可能间接修改日志,最后没人能澄清。append-only 的意思就是「你说过的、做过的、看到过的,我都记着,改不了」——这是 LLM 时代的基础信任机制。

7.2 这份日志里有什么

根据 dsh-session README,会话日志记录以下内容(第 5 章讲过这些是「上下文」的来源,这里更细):

  • 系统提示词(按时间变化的部分)
  • 模型的思维链(CoT,包括未展示给用户的推理步骤)
  • 工具调用:工具名、参数、执行结果、执行时长
  • 子 Agent 调度:谁创建了谁、传了什么、回收了什么
  • 上下文注入:哪条记忆被注入了哪一段、被检索出来的依据
  • 压缩(compaction)动作:哪一段被裁了、裁之前是什么

这些都被打上时间戳,按时间顺序追加。所以叫轨迹(trajectory)——你能看到 Agent 从开始到现在的每一步动态。

7.3 Trajectory 视图:按来源看日志

Trajectory(轨迹)视图是基于 dsh-session README 中 Surface 投影机制的一种视图:把事件流按「来源」(source)分类展示。你想看「模型说了什么」就过滤模型来源;想看「工具执行了什么」就过滤工具来源;想看「子 Agent 干了什么」就过滤调度来源。同一个事件流,换 Surface 投影视角就有不同解读。

这正是日志多维化的体现:它不是单一叙事,而是「同一时间线的多视角投影」。

打个比方:航班黑匣子

会话日志像飞机黑匣子——所有传感器数据按时间追加,事后可以按「引擎」「飞控」「通讯」过滤分析。这个比方哪里不灵:黑匣子保存是为了事后追责,DSH 日志的更主要用途是「事中分叉」——你能从某个时间点分出一个新会话,让它走不同分支。

7.4 恢复、分叉、检索、回放:四个动作,一个事件流

根据 dsh-session README,会话日志的 append-only 性质源于其事件溯源(Event Sourcing)架构。README 将会话定义为一个只追加的事件序列,并在其上定义了 Surface(投影)机制——不同的视图(如 Trajectory 视图、消息列表视图)是对同一事件流的不同投影。SessionStore 负责持久化这些事件,而 Chunk-rows 编解码机制用于高效存储和传输事件数据。

在这个架构上,四个核心操作各对应事件流的一种「读法」:

  • 恢复(resume):会话崩了重启,从事件流重放到中断点。SessionStore 保证事件已持久化,重启后可重建状态。
  • 分叉(fork):从事件流的某个时间点,复制一份继续往下,分出新的分支会话。原会话的事件流不变。
  • 检索(search):从历史事件流里按关键词或语义找到某个事件。Surface 投影机制让检索可以在特定视图上进行。
  • 回放(replay):把事件流按时间重新处理一遍,重建 Agent 的执行路径。README 的「请求头重建」机制保证了回放时模型请求的可复现性。

这四个操作不需要四种数据结构——它们都是对 append-only 事件流的不同「读法」。Surface 投影机制保证了不同视图的数据一致性,因为它们都是从同一事件流实时计算出来的。这是 Cordis「分叉(fork)」特性在 DSH 会话层面的具体实现。

7.5 实验室:append-only 分叉模拟

实验室 7-1:append-only 日志分叉可视化可运行

主会话有 6 个事件。在事件 3 处分叉,看两条线如何各自发展。

点击「在第 3 个事件分叉」查看
说明:本实验室是 append-only 日志分叉的简化可视化,演示「分叉后两条线独立追加、原线不可变」这件事。能证明:分叉不影响原日志。不能证明:实际 DSH 日志的存储格式、索引结构、检索效率。
一句话记住:会话日志是 append-only 的事件流,记录模型看到和做过的一切。恢复、分叉、检索、回放都是它的不同读法——分叉不改原日志,这是 Agent 可审计性和可演化性的地基。
L1 · 直接应用append-only

什么是 append-only 日志?为什么 DSH 选这种模式来存会话?至少给出两个理由。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果允许「软删」(标记为已删但保留物理记录),还符合 append-only 原则吗?
L2 · 变形迁移分叉语义

分叉(fork)和恢复(resume)都用同一事件流,但它们做的事不一样。说明两者的本质区别。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果分叉出的新会话又再次分叉,原会话的日志空间会膨胀吗?怎么治理?
L4 · 多概念综合幻觉与审计

LLM 有幻觉。假设一个用户投诉:Agent 声称它「5 分钟前做过 X」,但用户印象里 Agent 做的是 Y。结合 append-only 日志的四个动作(恢复/分叉/检索/回放),设计一套排查流程,帮助客服判断真相。说明:日志里的什么内容能证实/否定 Agent 的说法。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果日志显示「模型说做过 X」,但工具执行结果显示「工具实际做了 Y」(模型推理错误),算谁的错?
我能解释 append-only 的含义和它对可审计性的贡献
我能列出会话日志记录的内容类别
我能区分恢复与分叉的本质差别

答辩:如果我是审稿人

append-only 听起来好,但日志会无限增长。一个用了一年的 Agent,日志可能几十 GB。这不就是把「内存炸」的问题换成「磁盘炸」?

参考防守

防守要点:第一,append-only 不等于「不能归档」——旧日志可以压缩或转冷存储,只要保证「记录内的追加部分」逻辑完整;第二,compaction 插件就是干这个的,它可以处理「哪些可以安全归档、哪些必须热留」;第三,检索可以走索引,全量遍历只在回放时需要,频率不高;第四,相比「记录可能丢失或被改」,磁盘成本是可接受的代价。但承认:长期治理策略(保留多少、谁付费)官方没说透,这是存疑点。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

DSH 的会话日志是 append-only 的事件流,覆盖系统提示词、思维链、工具调用、子 Agent 调度、上下文注入、压缩动作。Trajectory 视图按来源过滤。恢复、分叉、检索、回放共享同一事件流——本质上都是读同一份不可变日志的不同方式。这是 LLM 时代可审计性的基础设施。

第8章 与 Claude Code 的对比

基于 @deepseek-ai/dsh 各子包 README 的架构分析;@deepseek-ai/dsh-llm README(Provider-Neutral LLM 抽象层);Cordis 论文(动态可组合性理论基础)

Claude Code 是当前最成熟的「模型+工具」Agent 产品。把 DSH 放在它旁边,能看清两者的路线差异——一个可组合,一个一体化。

学完这一章你应该能做到

  • 列出 DSH 与 Claude Code 在「模型绑定」上的差异
  • 从架构层面解释「可组合 vs 一体化」的路线分歧
  • 判断自己的场景应该选谁
建议先读第 1 章和第 5 章。

8.1 模型绑定:本质分歧

Claude Code 绑定 Claude 模型。它本质是 Anthropic 为了「让 Claude 更好用」做的工具,模型是中心,工具是配套。DSH 反过来:模型只是众多插件之一,理论上 Claude、GPT、本地 Llama 都能挂。这叫 model-agnostic(模型无关)

这不只是技术差异,更是商业差异。Claude Code 的目标是「让 Claude 卖得更多」——工具越好,用户越依赖 Claude 模型,Anthropic 越赚钱。DSH 把模型解耦,等于把「模型议价权」还给用户:模型 A 涨价了,你换模型 B,整套工具链不用变。

为什么这是关键差异

因为模型价格和能力在快速变化。绑定单一模型的产品,用户的能力上限和成本都被锁定。模型无关的产品,用户可以「用脚投票」。根据 dsh-llm README 的 Provider-Neutral 设计,适配器注册表机制让新模型的接入成本仅限于实现一个适配器插件,而不需要改动框架核心——这就是架构层面「模型无关」的工程基础。

8.2 可组合 vs 一体化:架构路线对比

从架构层面看,Claude Code 是「一体化」产品——所有层(模型、工具、UI、会话存储)由 Anthropic 统一设计、打包、发布,用户拿到的是经过端到端调试的完整方案。DSH 是「可组合」框架——每层都是独立插件,由不同子包提供,用户或安装时自动组合或手动替换。两者面向的是不同用户群。

维度Claude CodeDSH
开箱体验端到端调试,开箱即用需自行配置插件组合
模型绑定 Claude模型无关(插件)
扩展性受官方扩展点限制插件可任意组合
开源部分开源MIT 全开
用户群所有用户开发者/技术团队
生态官方生态强势依赖 Cordis 插件注册表起步
对比的局限

这个表是「路线差异」而非「优劣差异」。Claude Code 在「一体化」上做到了极致——不代表它不能在未来走向可组合;DSH 在「可组合」上做了选择——不代表它将来不会打磨体验。v0.1 的对比只反映当下,要持续观察。

8.3 哪个适合你

这不是「谁更好」,是「谁是你的工具」。选 Claude Code 如果:你是个人开发者/终端用户,想立刻上手、不在意模型绑定、希望体验最丝滑。选 DSH 如果:你是企业/团队,要控制模型成本或合规要求(必须用本地模型)、要深度定制工具组合、能接受配置复杂度。

另一个角度:选 Claude Code 如果你信任 Anthropic 的演进节奏;选 DSH 如果你相信 Cordis 社区 + 自家能力能把这个框架养大。后者风险更高、回报也更高。

一句话记住:DSH = 模型无关 + 插件可组合 + 需配置起步;Claude Code = 模型绑定 + 一体化集成 + 开箱即用。本质是架构路线选择,不是绝对优劣。
L1 · 直接应用模型绑定

Claude Code 与 DSH 在「模型绑定」上有什么本质差异?这种差异在商业上意味着什么?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果 Anthropic 把 Claude Code 拆出来支持第三方模型,DSH 的优势还在吗?
L2 · 变形迁移可组合 vs 一体化

「可组合」和「一体化」是架构路线选择。请举例:什么类型的团队适合 DSH 不适合 Claude Code?什么类型反之?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果某团队既要「开放」又要「精致」,有没有折中方案?
L3 · 构造反例生态对比

构造一个反例:在什么条件下,DSH 的「开放」反而不是优势,而 Claude Code 的「绑定」是优点?给出理由。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果 Claude 模型本身的能力持续领先,「模型无关」反而让 DSH 用户用次等模型,开放的意义还在吗?
我能说出 DSH 与 Claude Code 的模型绑定差异与商业含义
我能用「可组合 vs 一体化」架构框架判断自己的场景
我能构造「开放反而劣于绑定」的反例场景

答辩:如果我是审稿人

你把「模型无关」列为 DSH 的优势。但 Agent 的真正价值在「工具+模型协同调优」,单个厂商对自己模型调得最好——模型无关=「通用适配」=「次优适配」。你怎么辩护?

参考防守

防守要点:第一,「最优适配」的优势是真实的,但只对当前最强模型成立;模型迭代后绑定方的优势可能被新模型反超,模型无关让用户不被「押错宝」;第二,Cordis 的插件体系允许同一模型有自己的「定制插件」,所以「模型无关」不排斥「单模型最优」,反而允许共存;第三,企业最害怕的是「被锁」,通用适配等于「可替换保底」。承认:能力上限上,绑定方通常会更高,但长期看议价权在用户手里更重要。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

DSH 与 Claude Code 的对比,本质是「可组合 vs 一体化」的架构路线选择。模型无关 vs 模型绑定是核心分歧,背后是用户议价权之争。两者各有适用群体,没有绝对优劣。选择取决于你的团队属性、模型成本敏感度和长期策略。

第9章 模型无关:趋势还是口号

@deepseek-ai/dsh-llm README(LlmRuntime 适配器注册表、Provider-Neutral 词汇、流式 API、BlockAssembler、错误分类);@deepseek-ai/dsh-llm-deepseek README(DeepSeek 适配器);@deepseek-ai/dsh-llm-pi-ai README(Pi-AI 动态路由适配器)——基于源码架构的技术分析

「模型无关」是 DSH 架构的核心承诺之一。但它在工程上如何实现、边界在哪里?这一章从 dsh-llm 子包的 README 架构出发来拆解。

学完这一章你应该能做到

  • 给出「模型无关」的精确定义
  • 列出支撑「趋势论」和反对「趋势论」的各三个论据
  • 判断 DSH 的「模型无关」是真承诺还是依赖生态
建议先读第 1 章和第 8 章。

9.1 dsh-llm 的 Provider-Neutral 架构

根据 dsh-llm README,DSH 的模型无关性通过 LlmRuntime 适配器注册表实现。README 定义了一套 Provider-Neutral 的 LLM 词汇——所有模型适配器实现统一接口(流式 API、BlockAssembler、错误分类),而不同厂商的差异(如调用格式、流的解析方式、错误码体系)被封装在各自的适配器插件里。这意味着框架核心不需要知道「当前在跟哪个模型对话」,只通过 LlmRuntime 的抽象接口操作。

真正的模型无关需要三个条件:

  1. 接口统一:所有模型走同一套「对话+工具+工具结果」的接口,不依赖任何厂商专有特性。
  2. 配置切换:换模型=改配置,不需要改代码或重写工具。
  3. 能力无损:切换后 Agent 仍能有可用能力(不要求能力相同,但要求「能用」)。

第三个条件最难。一个模型有「视觉理解」而另一个没有,工具调用格式一个遵循标准 JSON schema、另一个用自定义格式——这时候「无关」就只是「理论装得上」,不是真的能替换。所以模型无关是有光谱的,不是 0 或 1。

Model-agnosticModel-agnostic):系统能容纳多种模型,切换成本由配置承担而非代码承担,且切换后保持可用能力上限。这是渐变量,不是二值量。在 dsh-llm README 中,这对应 LlmRuntime 注册表 + 适配器插件的架构——换模型=换适配器插件+改配置,不改框架核心。

9.2 支撑模型无关的架构论据

从 dsh-llm README 和 DSH 架构出发,有三条支撑「模型无关」的论据:

  • 模型在快速迭代:今天最好的模型半年后可能被超过。绑定=押宝;无关=可换。dsh-llm 的适配器注册表让换模型的成本仅限于实现一个新适配器。
  • 开源权重繁荣:Llama、Qwen 等开源权重让用户可以本地部署,天然倾向模型无关。适配器插件可以封装本地模型的调用逻辑。
  • 价格竞争:API 持续降价,用户乐见多家竞价,模型无关让用户切换灵活。
为什么这是趋势而非技术偏好

因为「议价权」是硬需求。企业最怕被锁,每个 CIO 都在算「换供应商的代价」。模型无关把代价压到「改一行配置」,这是实打实的商业价值。

9.3 反对论:也可能只是口号

但也有三条相反论据:

  • 差异化能力:每个模型都有自己的「独家特性」(多模态、长上下文、function calling 格式),统一接口=削足适履。
  • 协同调优:厂商自己能把工具和自己的模型调到最优,无关框架只能做通用适配。
  • 成本结构:模型无关要支持多种模型=更多适配代码=更重框架,对单一厂商反而更贵。

所以最严格说法是:模型无关是有上限的好处,不是无条件的优点。适用群体明确:需要多模型/控成本/防锁定的用户;不适合:追求当前最强单一模型体验的用户。

存疑点

DSH 宣称模型无关,但实际能不能无损切换各种模型(尤其是非主流模型、本地模型),取决于有没有对应的「模型插件」。生态不成熟时,「无关」可能只是「技术上可挂」而非「实际可用」。这是 v0.1 阶段的真实风险。

9.4 DSH 的「模型无关」能不能成立

根据 dsh-llm README 的架构分析:能成立,但需要生态。DSH 的 LlmRuntime 注册表从架构上保证了「模型就是插件」——任何模型只要实现了适配器接口就能接入。DeepSeek 自家模型有旗舰适配器(dsh-llm-deepseek);其他模型需要社区或用户自己实现适配器。

本地包中已存在 dsh-llm-pi-ai 等适配器子包,说明 DSH 的模型无关不是「纸上承诺」——已有多个适配器实现。但 README 也列出了 Known Limitations:适配器的流式解析和错误分类需要针对不同模型做适配调试,不是写完接口就自动完美支持。这是「能力上限」问题,不是「架构不可能」问题。

一句话记住:模型无关是有光谱的属性,渐变量不是二值。它对「需要多模型、控成本、防锁定」的用户是真趋势,对「追求单一最强模型」的用户反而是次优。DSH 的模型无关成立,但强弱取决于生态成熟度。
L1 · 直接应用定义

写出「模型无关」的三个条件,并说明为什么第三个(能力无损)最难。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果某模型有「原生多模态」而接口标准只支持文本,「模型无关」会不会被牺牲?
L2 · 变形迁移光谱

「模型无关是渐变量而非二值」。请给出三个产品案例,分别处于「完全绑定」「半无关」「完全无关」位置,并说明它们各处于光谱何处。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:把 LangChain 也按这个光谱定位,它在哪?
L4 · 多概念综合承诺 vs 生态

DSH 「承诺」模型无关,但「实际可用」依赖生态。请分析:在 v0.1 阶段,DSH 应该用什么策略让「模型无关」从架构承诺变成现实能力?给出至少 3 个具体行动,并解释每个行动解决什么问题。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果官方不做生态(只开源不管插件市场),DSH 还能做到「实际无关」吗?
我能给出模型无关的三个条件
我能区分「架构承诺」与「生态可用」
我能给出三个让承诺转现实的策略

答辩:如果我是审稿人

你说模型无关「是渐变量」。但「渐变量」意味着用户要承担适配成本。用户为什么要为框架的「未竟之事」付钱付时间?

参考防守

防守要点:第一,渐变量意味着「程度可调」,而不是「未竟之事」。Cordis 的接口定义让最小适配成本降到「实现一个 interface」,这是可接受代价;第二,用户付费买的不是「框架的完整」,是「框架的开放空间」——这个空间让用户长期自主,等于把适配成本用「未来灵活性」偿还;第三,模型无关让用户可以选择「适配一两个核心模型」,不是必须适配所有,可控范围。承认:v0.1 缺文档,有适配成本,但这是阶段性问题不是结构性问题。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

模型无关是渐变量,定义需要三个条件(接口统一、配置切换、能力无损,第三个最难)。dsh-llm 的 Provider-Neutral 架构和适配器注册表在工程上实现了「换模型≠改框架」。但实际可用看适配器生态——已有 dsh-llm-deepseek、dsh-llm-pi-ai 等适配器子包,架构承诺正在变成现实能力。

第10章 上手安装与第一个 Agent

@deepseek-ai/dsh README.md(安装与入口模式);@deepseek-ai/dsh-base README(dsh-base Bundle 插件行);本地 Node.js v22.17.0 兼容性验证

理论讲完,该动手了。这一章带你装 DSH、跑第一个 Agent,并指出真正的环境坑。

学完这一章你应该能做到

  • 用 npm 或 npx 安装并启动 DSH
  • 说出 Node 版本要求和兼容性风险
  • 跑通 `dsh web` 并发一句话
需要一台能装 Node.js 的机器。建议先读第 3、4 章理解配置和模式。

10.1 安装:两条路

官方给了两种安装方式。第一种是 npx 临时运行,不用装,直接 `npx @deepseek-ai/dsh` 起服务——适合快速体验;第二种是 全局安装,`npm install -g @deepseek-ai/dsh`,把 dsh 当命令用,适合长期使用。

本机实测装的是 v0.1.0-rc.6(2026-08-13 当天的 npm 包),总共拉了 530 个依赖包——其中 90 多个是 @deepseek-ai 子包。安装目录:`C:\Users\78430\AppData\Roaming\npm\node_modules\@deepseek-ai\dsh\`,里面能看到 lib/bin.js(CLI 入口)、package.json(依赖清单)、README.md 等文件。

环境坑:Node.js 版本

DSH 要求 Node.js >= 22.12。本机实际是 v20.18.0(旧版),安装时 npm 抛了 EBADENGINE 警告——但能安装、能跑。这是一个明确的兼容性风险:未来某个版本可能用到 Node 22+ 才有的特性(比如更新的 fetch API),那时 Node 20 就跑不动了。建议升级到 Node 22.12+ 再长期用。

10.2 跑第一个 Agent:dsh web 三步

装好之后,三步走起来:

  1. 设 API Key:DSH 默认用 DeepSeek 模型,需要 DeepSeek API Key(在 DeepSeek 平台拿)。把它写进 $DSH_HOME/cordis.patch.yml(第 3 章讲过的用户配置层),或者用 --patch 临时传。
  2. 启动:`dsh web`(即 `dsh --profile web`)。终端会提示监听端口(通常 localhost:xxxx)。
  3. 打开浏览器:访问提示的地址,看到 Web 界面(对话框+历史记录),发第一句话。

能不能立刻干活?取决于 profile 默认加了什么工具。web profile 应该至少有 shell + 文件工具。让 Agent 帮你 `ls` 一下当前目录——如果它做得到,说明工具链通了。

10.3 第一次实验:--dump-config 自检

新手最容易踩的坑是「以为改了配置但没生效」。这时候用 `dsh --profile web --dump-config` 把最终合并树打出来——你想要的那个值,在树里是不是你期望的值?是 = 生效。不是 = 哪一层覆盖了,逐层排查。

这是个值得养成习惯的动作:改完配置 → dump-config 验证 → 跑 Agent。三步缺一不可。DSH 不自动帮你校验配置,要你自己用工具查——这是插件化架构的代价之一:框架不替你做判断。

10.4 图解:dsh CLI 参数全景

图解 10-1:dsh 命令常用参数交互
--profile web/headless/tui --patch <file> --dump-config dsh web(profile 别名) dsh plugin --profile <name> <args> dsh <其他子命令> 选运行形态 在 profile 环境里装插件 临时最高优先级覆盖

点击各模块看说明。--profile 和 --patch 可以组合用。

一句话记住:安装 = npm i -g @deepseek-ai/dsh(或 npx 临时跑);要求 Node >= 22.12(v20 能装但有警告);启动 = `dsh web`;自检 = `--dump-config`。
L1 · 直接应用安装

DSH 的两种安装方式分别是什么?各自适合什么场景?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果用户访问 npm 失败(在中国大陆),有没有 fallback 安装方式?
L2 · 变形迁移配置自检

改完配置后「不生效」是 DSH 的常见坑。请说明:用 --dump-config 应该怎么排查?给出三步操作。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果 dump-config 显示值正确,但 Agent 行为还是老样子,下一站查哪?
L3 · 构造反例版本兼容

DSH 要求 Node >= 22.12,但本机 v20.18.0 也能装能跑。请分析:为什么 npm 给了警告但不阻止安装?这种「能装能用」的兼容性风险会在什么时刻爆发?怎么防范?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果你是企业 IT,员工都装了 v20,升级 Node 全公司是个工程,你会怎么决策?
我能用 npm/npx 安装并启动 dsh
我能用 --dump-config 排查配置问题
我能说出 Node 版本兼容性风险及防范方法

答辩:如果我是审稿人

你强调 Node 22.12+,但企业环境普遍 Node 18/20。这个兼容性是不是劝退很多企业用户?官方应该怎么做?

参考防守

防守要点:第一,Node 升级不是 DSH 独有问题,是整个 JS 生态的演进压力——Node 18 已 EOL,Node 20 也快了。DSH 跟上是合理选择,不是它自找麻烦;第二,对于企业,可以用 Docker 镜像固定 Node 22+,避免动宿主;第三,官方可以做的事:提供 Docker 镜像、提供独立二进制(pkg 打包)、提供详细的升级指南。但承认:v0.1 只管 npm,对企业的友好度确实不够。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

安装 DSH 用 npm 或 npx,Node 需 >= 22.12(v20 能装但有兼容风险)。启动 `dsh web`,设 API Key,发第一句话。改完配置用 `--dump-config` 自检。学会这几招,你就能在本地玩转 DSH 了。剩下的就是把第 3-7 章的机制映射到你自己的实战中。

第11章 技术生态:子包体系与扩展点

@deepseek-ai/dsh npm 包全部子包 README(90+ @deepseek-ai 子包);@deepseek-ai/dsh-subagent README(子代理体系);@deepseek-ai/dsh-cordis-host-runner README(动态包机制);@deepseek-ai/dsh-workflow README(工作流引擎)

DSH 的 npm 包有 90+ 个 @deepseek-ai 子包。这一章从官方 README 出发,梳理这些子包构成的技术生态——子代理、动态包、工作流引擎,以及它们提供的扩展点。

学完这一章你应该能做到

  • 列出 DSH 子包体系的主要分类及其职责
  • 解释 dsh-subagent 的子代理 seam 机制和委派策略
  • 理解 dsh-cordis-host-runner 的动态包机制和浏览器半包限制
  • 说明 dsh-workflow 工作流引擎的编排能力与失败纪律
建议先读第 1、5、7 章(插件哲学 + Agent 循环 + 会话日志)。

11.1 子包全景:90+ 个 @deepseek-ai 包的分类

打开 DSH 的 npm 安装目录(node_modules/@deepseek-ai/),能看到 90 多个子包。每个子包都是一个 Cordis 插件(或插件的支持库),有自己的 README。按功能可以分为以下几大类:

  • 核心层:cordis(元框架)、dsh(产品启动器)、dsh-base(共享 Bundle)
  • Agent 层:dsh-agent(接口注册表)、dsh-agent-loop(循环驱动器)、dsh-subagent(子代理)
  • LLM 层:dsh-llm(适配器运行时)、dsh-llm-deepseek、dsh-llm-pi-ai 等适配器
  • 会话层:dsh-session(事件溯源日志)、dsh-goal(目标状态)
  • 工具层:dsh-tool-bash、dsh-tool-fs、dsh-tool-web 等 20+ 个工具插件
  • 技能层:dsh-skill(技能注册表)
  • 运行时:dsh-sandbox(进程沙箱)、dsh-cordis-host-runner(动态包)、dsh-cordis-client-runner
  • 编排层:dsh-workflow(工作流引擎)

这个分类不是官方文档给的——官方没有一份「子包目录索引」。上述分类是基于每个子包 README 的自我描述整理的。每个 README 都很简短(15-154 行不等),但它们合在一起构成了 DSH 架构的完整拼图。

为什么子包体系是生态的基石

因为每个子包都是独立可替换的。用户不需要接受整个 DSH 的全量功能——可以只取核心层 + Agent 层 + 特定 LLM 适配器,组装一个极简 Agent。这种「粒度细到子包」的生态结构,让 DSH 的扩展点不是几个固定的 hook,而是「每个子包的接口都是扩展点」。

11.2 dsh-subagent:子代理体系

根据 dsh-subagent README(154 行,是所有子包中最长的之一),子代理是 DSH 最复杂的扩展点之一。README 定义了子代理 seam(缝隙)机制,支持两种子代理模式:

  • one-shot 子代理:发起方创建一个子代理,给它一个任务描述,等它完成后回收结果。适合「分区处理」场景——主 Agent 把一个大任务拆成几个子任务,并行分派。
  • continuable 子代理:发起方创建子代理后保持引用,可以多次发送消息、延续对话。适合「专家咨询」场景——主 Agent 遇到特定领域问题时,调用子代理专家。

README 还定义了 Activations(激活)机制——子代理的创建和销毁由 Activation 管理,子代理的生命周期绑定到发起方的作用域。委派策略(delegation strategy)决定了主 Agent 何时创建子代理、如何分配任务、如何回收结果。集合模型(collection model)定义了多个子代理的并发管理方式。

README 中的 Known Limitations

dsh-subagent README 的暂缓事项列表包括:跨会话的子代理持久化尚不完善,子代理间的直接通信当前需要通过发起方中转。这些限制在 README 中明确标注为「Deferred Work」。

子代理体系的架构意义在于:它让 DSH 不需要外部编排就能实现多 Agent 协作。主 Agent 通过 subagent seam 创建、调用、回收子代理,整套机制封装在 dsh-subagent 包中——这就是「插件化协作」的工程实现。

11.3 dsh-cordis-host-runner:动态包机制

根据 dsh-cordis-host-runner README(72 行),DSH 的动态包机制允许运行时加载和执行 Cordis 插件包,而不需要预装。README 描述了三个核心能力:

  • node:vm 沙箱:动态包在 Node.js 的 vm 模块沙箱中执行,与主进程隔离。这提供了安全边界——动态加载的代码不能直接访问主进程的文件系统或网络。
  • 浏览器半包往返:README 描述了「半包」(half-package)机制——动态包可以在 Node.js 环境中完整运行,也可以打包后在浏览器环境中部分运行(「半包」),两者之间通过消息传递往返通信。这让 DSH 的插件可以在 Web UI 和 Node 后端之间共享逻辑。
  • 动态加载与热替换:配合 Cordis 的 HMR 机制,动态包可以在运行时加载、卸载和替换。这与第 2 章讲的时间可组合性直接对应。
README 中的 Known Limitations

dsh-cordis-host-runner README 标注的暂缓事项包括:浏览器半包的功能子集尚未完整体现,安全沙箱的权限控制粒度较粗。这意味着 v0.1 阶段动态包主要在 Node.js 环境中使用,浏览器端支持有限。

11.4 dsh-workflow:工作流引擎

根据 dsh-workflow README(61 行),DSH 内置了一个工作流引擎 seam。工作流是「模型编写的编排脚本」——与子代理的「主 Agent 动态调用」不同,工作流是预先定义的执行流程,可以被模型或用户创建、执行、复用。

README 定义了工作流的几个关键特性:

  • 失败纪律(Failure Discipline):工作流的每一步执行状态都被记录,失败后可以从特定步骤重试,不需要从头开始。这与 dsh-session 的事件溯源架构天然契合——工作流执行本身就是事件流的一部分。
  • seam 接口:dsh-workflow 提供 seam(不提供具体实现),让上层插件可以注册不同的工作流执行策略。这是「定义接口不定义实现」的 Cordis 风格。
  • 模型可编写:工作流脚本由模型生成,不是手写。模型根据任务需求生成工作流定义,交给引擎执行。这本质上是 PTC 模式(第 4 章)的编排层升级——PTC 是「一次程序化调用」,工作流是「可复用的程序化编排」。

工作流引擎的架构意义在于:它将「Agent 的执行路径」从代码层面提升到了配置层面。用户不需要写代码来定义 Agent 的执行流程,只需要提供工作流定义。

一句话记住:DSH 的技术生态由 90+ 个子包构成,每个子包是一个独立可替换的 Cordis 插件。子代理(dsh-subagent)实现多 Agent 协作,动态包(dsh-cordis-host-runner)实现运行时安全加载,工作流引擎(dsh-workflow)实现模型可编写的编排——这三个机制是 DSH 最核心的扩展点。
L2 · 变形迁移子代理体系

dsh-subagent 定义了 one-shot 和 continuable 两种子代理模式。请分别举一个适合 one-shot、适合 continuable 的场景,并解释为什么另一种模式不适合。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果子代理需要跨会话保持上下文,dsh-subagent 当前的 Activations 机制够用吗?不够的话缺什么?
L3 · 机制分析动态包机制

dsh-cordis-host-runner 使用 node:vm 沙箱执行动态加载的插件包。请分析:node:vm 沙箱提供了什么安全边界?它的已知局限性是什么?「浏览器半包」机制解决了什么问题?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果浏览器半包功能子集完善了,DSH 的 Web UI 能做到哪些当前做不到的事情?
L4 · 多概念综合工作流引擎

dsh-workflow 的「模型可编写编排」与 dsh-subagent 的「动态子代理调用」有什么本质区别?请从编排方式、失败恢复、可复用性三个维度对比。工作流引擎的 seam 接口设计体现了 Cordis 的什么架构原则?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果让你设计一个工作流——「代码审查 Agent 链」,主 Agent 创建子代理读代码、再创建子代理做安全审计、最后合并报告——你会用子代理模式还是工作流模式?为什么?
我能说出 one-shot 和 continuable 子代理的区别及各自适用场景
我能解释 node:vm 沙箱的安全边界和已知局限
我能对比工作流引擎与子代理体系在编排能力上的差异

答辩:如果我是审稿人

你说工作流引擎的「模型可编写编排」是核心扩展点,但 dsh-workflow README 只定义了 seam 接口没有提供具体实现。一个没有实现的接口,算「核心扩展点」吗?

参考防守

防守要点:第一,Cordis 的架构哲学就是「定义接口不定义实现」——seam 的存在本身就是 API 契约,上层插件可以注册不同的执行策略。第二,dsh-workflow 的 Failure Discipline(失败纪律)和模型可编写特性已经在 README 层面定义,这些约束对任何实现者都是必须遵守的。第三,seam 接口先于实现,是「先定 API 再写代码」的工程实践——它让社区可以并行开发不同的工作流执行引擎。但承认:如果到 1.0 仍无参考实现,seam 的实际价值存疑。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

DSH 的技术生态由 90+ 个子包构成,按功能分为核心层(cordis/dsh-base/dsh-cordis-host-runner)、Agent 层(dsh-agent/dsh-agent-loop/dsh-subagent/dsh-goal)、会话层(dsh-session/dsh-llm)、工具层(dsh-skill/dsh-sandbox/dsh-workflow)。三个最核心的扩展点:子代理体系(one-shot/continuable 模式 + Activations 生命周期 + 委派策略)实现多 Agent 协作,动态包机制(node:vm 沙箱 + 浏览器半包往返)实现运行时安全加载插件,工作流引擎(seam 接口 + 失败纪律 + 模型可编写编排)将执行路径从代码提升到配置。三个扩展点都遵循 Cordis 的 seam 设计原则——定义接口不定义实现,由上层插件注册具体策略。

第12章 局限与存疑点

DSH v0.1 本地实测(@deepseek-ai/dsh v0.1.0-rc.6);各子包 README 的 Known Limitations 和 Deferred Work 段落;与 Claude Code 公开文档对比

前 11 章我讲了 DSH 的设计理念和优势。这一章专门挑刺——每一个架构决策都有代价,搞清楚代价才能判断它适不适合你。

学完这一章你应该能做到

  • 说出 DSH 在 v0.1 阶段的三个核心局限
  • 解释插件化架构的「灵活性税」具体是什么
  • 判断 DSH 当前适合什么场景、不适合什么场景
建议先读第 1-7 章,理解 DSH 的核心机制。

12.1 文档缺口:架构太灵活,文档追不上

DSH 最直接的局限是文档。这不是小问题——因为架构太灵活(一切皆插件),「怎么用」的路径空间是指数级增长的。文档需要覆盖的不是「一条主路径」,而是「N 条路径的组合」。v0.1 阶段文档主要集中在安装和基本启动,对以下关键问题尚未覆盖:

  • 怎么从零写一个插件(需要理解 Cordis 的插件注册机制)
  • profile 的 cordis.patch.yml 完整字段参考
  • 每种运行模式的内部行为差异(标准模式怎么调用工具 vs PTC 模式怎么传递参数)
  • 会话日志的完整事件 schema(用于自定义恢复/分叉逻辑)
  • 沙箱插件的配置和扩展(怎么自定义执行策略)

这些问题在 v0.1 阶段只能靠读源码解决。源码是 TypeScript,质量尚可,但「靠读源码理解」和「靠文档理解」的门槛差了一个数量级。

文档缺口的恶性循环

文档不足 → 只有硬核开发者能用 → 社区贡献的插件少 → 生态不丰富 → 吸引不到更多用户 → 文档投入动力下降。这个循环不打破,架构再好也走不远。打破的方式是官方优先投入文档和示例,而非新功能。

12.2 灵活性税:每个选择都是你的责任

「一切皆插件」听起来是优势,但每多一个插件接口,用户就多一个需要做的决策。在 Claude Code 里你不需要选模型(默认 Claude)、不需要选 UI(就是终端)、不需要选沙箱策略(官方定了)。在 DSH 里,这些全是你的事。

这不是缺陷而是设计代价。Claude Code 把决策成本替你扛了,换来的是灵活性受限。DSH 把决策权交给你,换来的是你必须有足够的判断力。具体来说:

  1. 模型选择成本:选哪个模型?DeepSeek-V3 还是别的?不同模型对不同任务的效果差异需要你自己测试。
  2. 配置调试成本:五层配置有一层写错,行为就和预期不同。排查时需要理解全部五层的交互。
  3. 插件兼容性成本:插件之间可能有隐式依赖或冲突(A 插件依赖 B 插件的某个版本,C 插件和 B 不兼容)。npm 生态的依赖地狱问题在 DSH 上同样存在。
  4. 安全审计成本:开源生态意味着任何人都能发布插件。恶意插件可以伪装成有用工具。你需要自己判断哪些插件可信。

这种「灵活性税」对个人玩家是可接受的成本,但对企业团队是实打实的工程负担。团队需要有人专门负责插件选型、配置管理、安全审计——这些岗位在用 Claude Code 时是不需要的。

一句话记住:灵活性不是免费的——「一切皆插件」意味着「一切都要你自己选」。每多一个决策点就多一份心智负担和调试成本。

12.3 性能开销:Cordis 框架的间接层

DSH 基于 Cordis 4.0.1,一个通用插件框架。这意味着每次工具调用、每次模型请求、每次会话操作,都要经过 Cordis 的插件系统间接层——注册、查找、调用、返回。这比直接硬编码的 Agent 框架多了运行时开销。

这个开销在单次交互中可以忽略(毫秒级),但在高频场景(批量处理、大规模并发)会累积。如果你要跑 1000 个并发 Agent,Cordis 的间接层可能是瓶颈之一。

不过,这个判断有一个重要的前提:我没有跑过严格的基准测试。推理依据是「通用框架通常比专用实现在高频路径上有额外开销」这个一般规律。DSH 是否真的存在性能瓶颈,需要用实际负载来测量才能下结论。我在这里只是提出存疑,不作定论。

为什么我标注「不确定」

因为 v0.1 没有公开的性能基准数据,我也没有高负载测试环境。盲目说「Cordis 一定慢」是不负责任的。但盲目说「一定没问题」同样不负责任。负责任的做法是标注存疑,等有人做实测后再修正。

12.4 安全模型:沙箱好但不是万无一失

DSH 的沙箱插件是一个重要的安全机制(第 6 章过过),但沙箱不是银弹:

  • 沙箱逃逸:任何沙箱实现都有边界。如果模型生成的代码利用了运行环境的漏洞(如通过 Node.js 的 child_process 绕过限制),沙箱可能被突破。
  • 网络隔离:沙箱默认是否阻止网络访问?如果不阻止,恶意代码可以外传数据。这取决于沙箱插件的配置,而配置又取决于用户理解了风险。
  • 文件系统范围:沙箱限制的是文件系统访问范围。如果范围配错了(比如允许访问 $HOME),敏感文件可能泄露。

这些风险不是 DSH 独有的——任何能执行代码的 Agent 都有。但 DSH 的特别在于:沙箱是插件,用户可以选择不用沙箱(为了性能或便利)。这种自由度本身就是风险——人总是倾向于「先关了安全限制跑通再说」,然后忘了开回来。

安全建议

对于生产环境,建议:(1) 始终启用沙箱插件;(2) 沙箱配置限制网络和文件系统范围;(3) 如果自建插件,审计其文件系统操作;(4) 不在生产环境运行来源不明的第三方插件。这些不是 DSH 特有建议,是所有 Agent 框架的通用安全实践。

12.5 版本风险:v0.1 意味着 API 可能随时变

官方 GitHub 仓库和 npm 包均明确标注了「Developer Preview」。这意味着:

  1. 插件接口可能不兼容——今天写的插件,下个版本可能要重写。
  2. 配置格式可能变——cordis.patch.yml 的字段可能会改。
  3. CLI 参数可能变——--profile、--patch 的行为可能调整。
  4. 可能有未发现的 bug——核心路径可能有潜在问题。

对于想基于 DSH 认真做产品的团队,v0.1 是一个需要谨慎对待的版本号。建议的策略是:先用它做原型验证,不要把生产系统绑在 v0.1 的 API 上。等 1.0 发布后,API 稳定了,再迁移到生产。

这是不是太保守了?不一定。Agent 框架和 Web 框架不同——Web 框架的 API 变了,顶多重写路由。Agent 框架的 API 变了,你可能要重定义你的 Agent 的行为逻辑,这比路由改动复杂得多。

一句话记住:v0.1 = 开发者预览 = API 可能随时变。用 DSH 做原型验证可以,但不要在 v0.1 上建生产系统。

12.6 适用性判断:现在该不该用

综合以上局限,我的判断是:

DSH v0.1 适用性判断矩阵
场景 适合度 理由
学习 Agent 架构原理 开源可读,每一层都透明
个人原型/Demo 验证 灵活度高,试错成本低
企业生产 Agent v0.1 稳定性不足,文档缺失
需要多模型支持的 Agent 模型无关是核心设计
需要快速上手的团队 门槛高,文档不足
高并发批量处理 存疑 Cordis 间接层开销未实测

注意,这张表是 v0.1 阶段的快照。随着文档补齐、生态成熟、版本迭代,适用性会变化。我的判断基于 2026-08-15 的信息,不保证未来仍然成立。

L2 · 变形迁移灵活性税

什么是「灵活性税」?请举一个具体场景说明 DSH 的用户需要为灵活性付出什么额外的决策或调试成本。

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果 DSH 未来加了「推荐配置模板」(默认插件组合),能不能消除灵活性税?
L3 · 机制分析版本风险

为什么我建议「用 DSH 做原型验证但不绑生产系统」?这个建议在什么条件下可能变得过于保守?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果你的团队有 5 个工程师,有 2 个愿意专门跟进 DSH 版本迁移,那是否值得绑生产?
L4 · 多概念综合适用性综合判断

一个 50 人的创业团队想用 Agent 做内部代码审查工具,预算有限,模型可用 DeepSeek 和 GPT-4o。请用本章的适用性矩阵分析:DSH 在 v0.1 阶段适不适合他们?你会给他们什么建议?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果这个团队改用 Claude Code 直接做,什么场景下 6 个月后他们会后悔?
我能说出 DSH v0.1 的三个核心局限
我能解释「灵活性税」及其具体代价
我能用适用性矩阵判断 DSH 是否适合某个场景

答辩:如果我是审稿人

你说 v0.1 不适合生产,但 DeepSeek 是大公司,它的 v0.1 可能比一般团队的 1.0 更稳定。你的保守建议是否过度?

参考防守

防守要点:第一,「公司大」不等于「产品稳定」。内部测试覆盖 != 用户场景覆盖。v0.1 的不确定性是「不知道什么场景会出问题」,而不是「已知的有问题」——后者反而好处理。第二,DeepSeek 以模型闻名,DSH 是它的第一个 Agent 框架产品,没有 Agent 框架运维积累。模型和框架的工程挑战不同。第三,我的建议不是「别用」,是「用但别绑死」——原型验证完全可以做。但承认:如果 DeepSeek 快速迭代到 1.0,且 API 做了向后兼容承诺,我的保守建议确实可以放宽。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

DSH v0.1 的核心局限是:文档缺口(架构太灵活,文档追不上路径空间)、灵活性税(每个选择都是用户的决策责任)、性能开销存疑(Cordis 间接层在高频场景可能有瓶颈,但未实测)、安全模型依赖用户自律(沙箱可关、插件来源不受控)、版本风险(API 可能随时变)。适用性判断:适合学习和个人原型,不适合生产和企业团队快速上手。这些局限是 v0.1 阶段快照,随版本迭代会变化。

第13章 未来推演与实战建议

Cordis 论文结论(自进化 Agent Harness 方向);各子包 README「Known Limitations and Deferred Work」中的规划项;@deepseek-ai/dsh-goal / dsh-workflow README 暂缓事项;作者主观判断(已标注)

最后一章,我从「未来会怎样」和「你现在该干什么」两个维度给出判断。所有推演都是我的主观预测,不是官方路线图。

学完这一章你应该能做到

  • 说出 DSH 未来 6-12 个月的三个关键演进方向
  • 判断 DSH 要成功需要跨越的三个门槛
  • 制定一份「现在就能执行」的 DSH 上手计划
建议先读前 12 章,尤其是第 1、8、11、12 章。

13.1 推演一:插件市场——决定 DSH 生死的不是框架本身

我判断 DSH 未来 6 个月最关键的工作不是加功能,而是建立插件市场。原因很简单:Agent 框架的价值不是「能跑多少种模型」,而是「生态里有多少现成可用的插件」。用户不想自己写数据库查询插件、不想自己写文件搜索插件、不想自己写 Git 操作插件——他们想从市场里装一个就用。

Cordis 的插件市场经验(有过聊天机器人场景的插件分发验证)是 DSH 的一个隐性优势——团队知道怎么做插件分发。但 Agent 插件和聊天机器人插件的需求维度不同:Agent 插件需要更多的安全审计、版本兼容、沙箱策略说明。这是一套新的工程体系,不是简单复制聊天机器人时代的 marketplace 就行的。

我的预测:如果 DSH 在 3 个月内上线插件市场,并在 6 个月内有 50+ 个高质量社区插件,它有机会成为 Agent 开发者的首选框架。如果 6 个月后插件市场还没起来,开发者会转向其他框架——不是因为它不好,而是因为「没有生态的框架」等同于「框架不存在」。

主观判断(请批判性看待)

这是我的推测,不是事实。插件市场的成功取决于太多因素(用户体验、审核机制、盈利模式、竞品动作),50 插件这个数字也是拍脑袋的。真实情况可能更好或更差。但有一点我比较确定:没有插件市场的 Agent 框架走不远

13.2 推演二:模型无关将变成行业标配

第 9 章我讲过「模型无关」是 DSH 的一个设计方向。我的判断是:未来 12-24 个月内,模型无关会从「某些框架的差异化特征」变成「Agent 框架的行业基本要求」。原因有三:

  1. 模型成本波动:模型定价在快速变化(降价是趋势),但也可能出现某些模型涨价或限流。不绑死一个模型是应对不确定性的策略。
  2. 能力差异化:不同模型在不同任务上表现不同(代码生成用 A、推理用 B、摘要用 C)。多模型组合比单一模型更适合复杂 Agent。
  3. 企业合规:不同企业的合规要求不同——有的只能用私有部署模型,有的可以用云端但要符合数据驻留法规。模型无关让 Agent 框架能适配多种合规场景。

如果这个推演成立,DSH 的先发优势在于:它从一开始就按模型无关设计,不像某些框架要「后期改造」。但先发优势不等于胜势——如果竞品能更快做到模型无关 + 更好体验,DSH 的架构优势会被对冲。

一句话记住:模型无关会从差异化优势变成行业基本要求。DSH 的先发优势是「一开始就做了」,但能不能守住取决于执行速度。

13.3 推演三:沙箱安全将成为关键竞争维度

Agent 能执行代码,意味着安全风险是真实的。目前各家框架的沙箱策略差异很大——有的很强(完全容器隔离),有的很弱(只限制目录访问),有的干脆没有。随着 Agent 在企业生产场景的渗透,安全审计会成为采购决策的核心因素。

DSH 的优势是沙箱是插件(可以替换、升级、定制),劣势是没有默认的最强安全配置。如果 DeepSeek 能提供一个「企业安全沙箱插件」(容器级隔离 + 网络白名单 + 操作审计 + 合规报告),这对企业采购者是一个强卖点。

我的预测:到 2027 年,Agent 框架的安全模型会成为比性能更重要的竞争维度。因为性能差异在缩小(模型进步太快),但安全事件是「一票否决」的——一次代码注入导致数据泄露,整个产品可能被禁用。

为什么安全是「一票否决」维度

因为安全的代价是「不对称」的。性能差 10%,用户忍一忍或加机器;安全出一次事,用户直接跑路。这个不对称让安全成为「下限决定型」因素——你可以因为安全好而被选中,也可以因为安全差而被否决,但不会因为安全好而胜过更强的对手。框架的方向是「把安全做到及格线以上」,而不是「用安全当卖点」。

13.4 三个门槛:DSH 要成功需要跨越什么

综合前面所有章节的分析,我认为 DSH 要从「有潜力的 v0.1」变成「主流 Agent 框架」,需要跨越三个门槛:

  1. 文档门槛:从「靠读源码理解」到「靠文档上手」。需要完整的 API 参考、插件开发指南、配置字段清单、至少 5 个端到端示例项目。时间窗口:3-4 个月。
  2. 生态门槛:从「官方插件为主」到「社区插件占据半壁江山」。需要上线插件市场、建立审核机制、种子 50+ 个高质量插件。时间窗口:6-12 个月。
  3. 信任门槛:从「开发者预览」到「团队敢放生产」。需要发布 1.0、承诺 API 向后兼容、建立安全基线、出几个标杆用户案例。时间窗口:9-12 个月。

三个门槛不是串行的——应该并行推进。但优先级是文档 > 生态 > 信任。因为没有文档,生态长不起来;没有生态,没有标杆案例;没有标杆案例,信任无从建立。

三个门槛的依赖关系
文档门槛 ──→ 生态门槛 ──→ 信任门槛
(3-4月)       (6-12月)      (9-12月)
    │              │              │
    ▼              ▼              ▼
 API参考        插件市场        1.0发布
 开发指南       审核机制        兼容承诺
 示例项目       50+插件        标杆案例
      

13.5 实战建议:现在就开始的 7 天上手计划

如果你看完前 12 章觉得 DSH 值得试试,这里是一份 7 天上手计划。它不追求让你成为专家,只追求让你「跑起来并且理解每一层在做什么」。

  1. Day 1:装 DSH(第 10 章),跑通 `dsh web`,发一句话确认整个链路通。读 README.zh.md。
  2. Day 2:跑 `--dump-config`,对照第 3 章理解五层配置。试着用 --patch 改一个配置(比如模型默认值),再 dump 确认变化。
  3. Day 3:切换 profile(web → headless → tui),体会第 4 章讲的四种模式区别。在 headless 模式下跑一次任务,观察日志输出格式。
  4. Day 4:读 lib/ 目录下的源码(重点看 bin.js 和核心 Agent 循环),对照第 5 章理解循环四阶段。不需要看懂全部,能定位「模型调用在哪」「工具调用在哪」就行。
  5. Day 5:配置一个非 DeepSeek 模型(比如本地 Ollama 或 OpenAI API),验证第 9 章讲的模型无关。体会「换模型不动框架」是什么感觉。
  6. Day 6:尝试理解会话日志格式(第 7 章)。开一个会话,发几句话,关掉重开,验证恢复功能。如果日志是 append-only,尝试找到「分叉点」。
  7. Day 7:尝试写一个最简单的自定义插件(比如一个返回当前时间的工具),挂到 Agent 上。如果跑通了,你对 DSH 的理解就超过 90% 的围观者了。

这个计划的核心思路是:每一天碰一层,七天碰完所有核心层。你不需要在第 7 天就写出复杂插件——目标只是「对每一层有手感」。有了手感,后续深入任何一层都有基础。

一句话记住:7 天计划的核心是「每天碰一层」——安装/配置/模式/循环/模型/会话/插件。不求精通,求手感。

13.6 结语:一个值得认真对待的实验

DSH 是一个不完美但值得认真对待的项目。它不完美在于 v0.1 的文档缺失、稳定性未验证、生态未建立。它值得认真对待在于:「一切皆插件」不是营销话术,而是有 Cordis 学术论文和五年工程实战支撑的架构哲学——从 Revertible Effects 到 Reactive Coeffects,每个机制都有形式化定义和元理论性质证明。代码和架构是真实的。

我无法预测 DSH 的未来。但我可以说:如果你对 Agent 架构感兴趣,不管你最终用不用 DSH,理解它的设计决策对你都有价值。因为 DSH 提出了一组清晰的命题——模型要不要绑、工具要不要固定、UI 要不要内置、安全谁说了算——这些命题是所有 Agent 框架都要回答的。DSH 给了一份答案,你可以认同或不认同,但至少你有了一个参照系。

这,就是深度精读的意义。

L2 · 变形迁移三大门槛

说出 DSH 要成为主流框架需要跨越的三个门槛,以及它们之间的依赖关系。为什么是文档优先而非生态优先?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果 DeepSeek 决定把 DSH 交给独立基金会运营,对三个门槛有什么影响?
L3 · 机制分析安全竞争维度

为什么我说安全是「一票否决」维度而非「胜出」维度?这种不对称性对 Agent 框架的产品策略意味着什么?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果一个框架在安全方面做到行业最强,它需要做什么才能把安全变成「胜出」维度?
L5 · 批判与创造综合判断

基于全书 14 章的内容,请给出你对 DSH 的综合判断:它最大的价值是什么?最大的风险是什么?如果让你给 DeepSeek 团队一条建议,你会说什么?

粘贴到外部大模型获得评分后填入:
评分标准:0-2分为不通过,3-5分为通过。分数越高,下次复习间隔越长。
变式:如果 2 年后 DSH 失败了,最可能的原因是什么?你会怎么复盘?
我能说出 DSH 未来演进的三个方向和理由
我能说出三个门槛及其依赖关系
我能制定一份可执行的 DSH 上手计划

答辩:如果我是审稿人

你的三个推演(插件市场、模型无关标配、安全竞争维度)都是「行业趋势」,不是 DSH 独有的洞察。凭什么说 DSH 有优势?

参考防守

防守要点:第一,推演本身不是说 DSH 有优势,而是在说「这些趋势来了之后 DSH 处于什么位置」。我的判断是 DSH 在「模型无关」和「架构灵活性」上有先发优势,在「插件市场」和「安全」上没有。第二,行业趋势对所有玩家是同一个考试题,但 DSH 的 Cordis 框架(论文证明了时空可组合性,有五年工程实战积累)是在「插件可组合性」这门考试上有别人没有的复习资料。第三,最终优势不取决于今天谁先看到趋势,取决于谁先执行到位。承认:我的推演可能是对的,DSH 仍可能因为执行不力而输给后发者。

本章自测

以下题目由系统自动判分,答题记录接入间隔重复算法。

本章小结

未来推演三方向:插件市场(6 个月内生死线)、模型无关变标配(12-24 月趋势)、安全成关键竞争维度(2027 年预期)。三个门槛:文档 (3-4 月) → 生态 (6-12 月) → 信任 (9-12 月),文档优先。7 天上手计划:每天碰一层,安装→配置→模式→循环→模型→会话→插件。DSH 不完美但值得认真对待——它提出了所有 Agent 框架都要回答的命题,给了一份清晰答案,你可以不认同,但理解它对你判断整个领域有价值。