13 章拆解 DeepSeek Harness(dsh) 的架构设计与实现 —— 一个"一切皆插件"的 agent(智能体)运行外壳
本教程的定位(2026-08-15) 同目录下的 Pi-Agent 深度教程 拆的是 减法哲学的代表作:核心极简、刻意不做 MCP / 子 Agent / 权限弹窗。本教程拆的是它的对立面 —— DeepSeek Harness 把 agent 运行时的每一寸能力都做成了可替换插件,185 个包、四层配置 patch、20 多个抽象 seam(能力接缝)。
两者不是优劣关系,而是同一道题的两种答案。第 13 章有完整对照。
项目背景(公网核实,2026-08-15) DeepSeek Harness 于 2026-08-13 开源 v0.1 开发者预览版(MIT 许可证),官方口号 "一切皆插件",社区形象代号"黑鲸",开源初期即获数万 star。本教程写作时距开源仅 3 天,教程正文的技术结论全部来自本机官方包源码与运行时实测,公网信息仅用于背景补充(详见 00-资料索引)。
版本与写作方法 本教程基于 dsh 0.1.0-rc.6(developer preview,官方 README 明示 rc 版本之间会有破坏性变更)。
与 Pi 教程不同,本教程不是翻译或转载,而是基于本机实际运行的 dsh 实例逐条取证写成:195 个官方包的源码与 385 篇官方双语 README、真实会话事件日志、实测的系统提示词与沙箱边界。每一处关键结论都在正文标注了复核路径,你可以在自己的机器上重跑一遍。
如果你已经读过 Pi 教程,你会带着几个问题来看 dsh:
如果你没读过 Pi 教程,本教程也是自洽的:从第 2 章的 cordis 依赖注入框架讲起,不预设你了解任何一个具体 harness。
| 章节 | 主题 | 核心问题 | 难度 |
|---|---|---|---|
| 第 1 章 | 开篇总览 | dsh 是什么?和 Pi / Claude Code 有什么本质不同? | 入门 |
| 第 2 章 | cordis 底座 | 依赖注入框架凭什么能当 agent 运行时的地基? | 入门 |
| 第 3 章 | Profile 与 Patch 分层 | 一个会话的插件图是怎么一层层叠出来的? | ★ 核心 |
| 第 4 章 | Seam 架构 | 20 多个能力接缝如何做到"换后端 = 改配置"? | ★ 核心 |
| 第 5 章 | Agent Loop | session / turn / step 三级生命周期怎么转? | ★ 核心 |
| 第 6 章 | 模型调用 | 怎么把模型调用做成可替换、可拦截、可重试的? | ★ 核心 |
| 第 7 章 | 工具系统 | 工具调用要经过哪五道关卡?Code Mode 是什么? | ★ 核心 |
| 第 8 章 | 会话 | 为什么消息历史是"派生物"而不是真源? | 进阶 |
| 第 9 章 | 上下文工程 | 9927 字符的系统提示词是谁拼出来的? | 进阶 |
| 第 10 章 | 沙箱与权限 | 怎么在四种操作系统上做到 fail-closed? | 进阶 |
| 第 11 章 | 委派与编排 | 三种多 agent 机制分别解决什么问题? | 进阶 |
| 第 12 章 | 技能与人机界面 | 技能、命令、提问、UI 插件怎么接进来? | 进阶 |
| 第 13 章 | 设计精华 | 哪些设计该抄,哪些不该? | 总结 |
阅读建议:第 1-4 章是骨架,建议按顺序通读——不理解 cordis 的 fiber 和 dispose,后面每一章都会卡住。第 5 章起可按需跳读。
每一章回答三个层次的问题:是什么(概念)、怎么做(源码与实测)、为什么这样做(设计取舍)。
本教程的所有事实都可以在一台装了 dsh 的机器上复核。写作时使用的取证路径:
| 素材 | 位置 | 规模 |
|---|---|---|
| 官方包源码 | ~/.dsh/profiles/node_modules/@deepseek-ai/ | 195 包(185 个 dsh 包 + 7 个 cordis 包 + 3 个工具库) |
| 官方文档 | 各包的 README.md / README.zh.md | 385 篇 / 2.54 MB,其中 186 篇中文 |
| 打包源码 | 各包的 lib/index.js + lib/types/*.d.ts | agent-loop 1295 行、tools 3566 行、session 1885 行 |
| 实现 checkout | 资源目录/runtime-seed-dsh/ | npm prod install,精确 pin 到 0.1.0-rc.6 |
| 活会话日志 | $DSH_SESSION_JSONL | 多帧 zstd JSONL,实测单会话 569 条事件 / 21 种类型 |
| 实测系统提示词 | 会话日志的 request/header 事件 | 9927 字符、27 个工具 schema |
| Profile 配置 | ~/.dsh/profiles/web/ + ~/.dsh/settings.yaml | 3 层 bundle patch + 8 行用户 patch + 33 行 preset |
自己动手复核 每章末尾都有「动手复核」小节,给出可直接运行的命令。教程正文里凡是标注 [实测] 的数字,都出自这些命令。
原始资料索引见 00-资料索引,研究背景与结论摘要见 DeepSeek Harness 研究摘要。
| 维度 | Pi 教程 | 本教程 |
|---|---|---|
| 拆解对象 | pi-agent SDK(earendil-works/pi) | DeepSeek Harness(deepseek-ai) |
| 设计哲学 | 减法 —— 核心极简,缺的用扩展补 | 全插件化 —— 一切能力都是可替换插件 |
| 核心包数 | 4 个(ai / agent-core / coding-agent / tui) | 185 个 dsh 包 + cordis 底座 |
| 内置工具 | 4 核心 + 3 辅助 | 本机实测 27 个(由 preset 决定,可增可减) |
| 系统提示词 | 静态模板约 90 词 | 实测装配后 9927 字符,由 N 个插件各贡献一段 |
| 扩展方式 | TypeScript 扩展文件 + 热重载 | cordis 插件 + 四层配置 patch |
| 内容来源 | 转载 dg-ai-notes(CC-BY-SA-4.0)+ 3 章补全 | 全部原创,基于本机取证 |
第 13 章会把这张表展开成完整的哲学对照。