同一套 Runtime 能长出很多个产品——DSH 是 Runtime,浏览器界面、桌面客户端、命令行都只是它的不同外壳;分清这一层,后面一半的困惑会自动消失。
导读讲完了【这是什么】,第 1 章开始给 DSH 定位。1.1 是全章第一刀:把【你看得见的产品】和【底下跑起来的运行时】切开。1.2 讲【一切皆插件】、1.3 讲为什么它不只是多挂几个工具,都建立在这一刀上。
一、一句话区分
产品是你看到、点开、付款的那个东西——界面、安装包、账号、价格。 Runtime(运行时)是底下真正让模型动起来的那个东西——工具、会话、沙箱、循环。
打个比方:产品是车,Runtime 是发动机加传动系统。 同一台发动机可以装进轿车、面包车、皮卡——车不一样,里面转动的道理是一样的。
所以问到【这个工具好用吗】的时候,要先问一句:你说的是哪一层? 界面丑不丑是产品层的事,工具会不会被卡住是 Runtime 层的事。
二、三层的责任划分
把整条链拆开,大概是三层:
- 模型层:负责推理,把文字变成文字。
- Runtime 层:负责让推理变成动作——工具、会话、沙箱、循环、调度。
- 产品层:负责让人用得上——界面、安装方式、账号体系、收费。
这三层的改动成本差得很远:
- 换模型:改一行配置。
- 换工具实现:换一个插件。
- 换产品界面:换一个 UI 插件。
改动一次比一次外移,越往里越稳定。这就是为什么分清层次有用—— 你永远知道该在哪一层动手。
三、同一个 Runtime,多种产品
DSH 这套 Runtime,已经被做成了好几种产品形态:
- Web UI:浏览器里的界面,一条
npx命令就能起。 - 桌面应用:Windows / macOS 客户端,不用碰命令行。
- headless:没有界面,跑完一件事打印结果就退出,适合脚本和 CI。
- TUI:终端里的界面,偏好键盘的人用。
关键是:这几种形态底下是同一套 Runtime。 你在 Web 界面里配好的模型、装好的插件,换到命令行形态依然是那套东西。 因为【界面】本身在 DSH 里也是一个插件——换界面不叫换系统,叫卸一个插件装一个插件。
四、分清它,有什么用
这一刀分下去,至少三个常见困惑自动有答案了:
- 【换个模型是不是要重写代码?】——不用。模型是 Runtime 层的插件,改一行配置。
- 【换了个客户端,我的工具是不是要重装?】——不用。工具挂在 Runtime 上,不在产品里。
- 【为什么同一套底子,不同产品能力差这么多?】——因为挂哪些插件由预设决定, 不同产品默认的预设可能不同。
注意第 3 条的反面:Runtime 相同,不等于能力相同。 底子一样、装配不同,出来的东西可以差很远——这正是第 3 章要讲的事。
五、动手 Demo:把三层各管什么列清楚
先做个最直白的对照,把三层各自的职责分开:
layers = [
("模型", "推理、生成 Token"),
("Harness(Runtime)", "工具、会话、沙箱、循环、调度"),
("产品", "界面、安装、账号、收费"),
]
for k, v in layers:
print("%-20s %s" % (k, v))
print()
print("换模型的改动量 = 1 行配置")
print("换界面的改动量 = 换 1 个 UI 插件")
print("两者都不需要动对方")
实跑输出:
--------------------------------------------------------------------
把产品和 Runtime 分开
--------------------------------------------------------------------
这是全书第一刀,也是后面所有讨论的地基:
同一套 Runtime,可以长出很多个产品。
问题 属于产品 属于 Runtime
---------------------------------------------------
界面长什么样 是 不是
有哪些工具可用 不是 是
会话怎么存 不是 是
命令在哪里跑 不是 是
模型怎么连 不是 是
装在哪台机器上 是 不是
要不要登录、怎么收费 是 不是
---------------------------------------------------
分清楚之后就能看懂:DSH 是 Runtime,
而这套 Runtime 已经被做出了好几种产品形态。
产品形态 长什么样 什么时候用
-----------------------------------------------------------------
Web UI 浏览器里的界面 默认方式,一条 npx 命令
桌面应用 Windows / macOS 客户端 不想开命令行的人
Headless 没有界面,跑完打印结果 CI、脚本、批处理
TUI 终端里的界面 社区替换版,偏好键盘的人
-----------------------------------------------------------------
注意最后一行:连【界面】本身都是一个插件。
同一个 Runtime,换一个 UI 插件就变成另一种产品。
小算例:一个 Runtime 配几种界面,能开出几种产品?
界面插件 4 种 × 部署位置 3 种(本地 / 自托管服务器 / 桌面)
= 12 种组合
这 12 种背后的运行时逻辑,是同一套。
分清这一层,后面很多问题就自动有答案了——
比如【换个模型要不要改代码】:模型是 Runtime 层的插件,
改一行配置就行,界面和工具都不用动。
最后三行是这一节的重点:换模型和换界面互不影响, 因为它们在两个不同的层上。 这种【互不影响】不是碰巧,是故意设计出来的—— 后面第 3 章讲的两个平面、第 4 章讲的接缝,都是在保证这件事。
30 秒实验
- 挑一个你天天用的 AI 产品,把它的【模型】【运行时】【产品外观】三层分别写出来。
- 在终端里跑一次
dsh --help,看--profile后面能跟哪些名字——那些就是不同的产品形态。 - 想一个你现在遇到的问题,判断它属于哪一层的问题:模型不行、运行时卡住,还是界面难用。
常见误区
- 错误:产品就是 Runtime,是一回事。——纠正:产品是外壳(界面、安装、收费),Runtime 是里子(工具、会话、沙箱、循环);同一个 Runtime 能长出好几个产品。
- 错误:换个界面就得重做工具。——纠正:连界面本身都是插件,换 UI 插件不影响工具和会话。
- 错误:既然 Runtime 一样,各产品能力就一样。——纠正:Runtime 相同不等于能力相同——挂哪些插件由预设决定,不同产品默认预设可能不同。
自测三问(点开对答案)
1. 产品和 Runtime 怎么区分? —— 产品是你看到、点开、付款的东西(界面、安装方式、账号、收费);Runtime 是底下让模型动起来的那层(工具、会话、沙箱、循环)。 2. DSH 这套 Runtime 被做成了哪几种产品形态? —— Web UI、桌面应用、headless(无界面)、TUI(终端界面)。 3. 为什么【换个模型】这么便宜? —— 因为模型是 Runtime 层的插件,**改一行配置即可**,界面和工具都不用动。- ☐ 下一节(1.2 【一切皆插件】)
相关笔记
- 本书的学习路径 —— 上一篇交代路线,这一篇正式开始第 1 章
- 【一切皆插件】 —— 下一节讲这套 Runtime 内部是怎么装起来的
- 网络的虚拟化① VLAN —— 【同一套底座、多种形态】的另一套讲法
- 🐳 DeepSeek Harness · 索引