🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

插件架构拆解课 onychen/learn-dsh

DeepSeek Harness
onychen78 天前有提交已提供中文文档扫描:无法判定

DeepSeek Harness 拆解教学课程附上简单教学版实现项目

43.4/100
综合分
33
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:仓库根目录及浅层子目录均无 dsh 插件清单,无法用 dsh 插件安装命令安装。以下命令仍可尝试,但可能失败。
无法用 dsh 插件命令安装(仓库内无 dsh 插件清单)
git clone https://github.com/onychen/learn-dsh.git
按该仓库 README 的原生方式安装;若作者另行发布了 DSH 插件包,请以其文档为准

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · other
装得上吗
作者未把包发布到 npm,只能用源码安装
插件本身没问题,是分发方式不同
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 78 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

仓库根目录及浅层子目录均无 dsh 插件清单,无法用 dsh 插件安装命令安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包learn-dsh(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/11 22:01:15

安全扫描自动 · 静态分析源码
v2.7.0
⚪ 扫描:无法判定尚无人工评估
展开查看扫描说明与证据 ↓

已尝试扫描但取不到可分析的源码:仓库或包不存在、已删除,或为非 JS/TS 实现、未随包发布源码。无法判定,不代表安全。

  • · 取源不可用(Error: github tarball HTTP 404 @ https:
  • · api.github.com
  • · repos
  • · onychen
  • · learn-dsh
  • · tarball)
扫描于 2026/11/2(1 天前)

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 拆解教学课程
  • 附简单实现项目

README

由 DeepSeek 最新模型翻译生成
learn-dsh:拆解 DeepSeek Harness 仿照 learn-claude-code 的渐进式教学风格,但主线来自 DeepSeek Harness 自己的架构分层,不是照搬。 温馨提醒,由于当前 dsh 暂时是 v0.1 开发者预览版,很多设计不一定完善,但我这个教程会持续跟随 dsh 的更新而更新的,其次是对于怎么讲清楚我自己也还在探索,其实可以不着急看,等待孵化 网页展示效果更好,建议通过网页阅读 https://onychen.github.io/learn-dsh/ 这门课教什么 DeepSeek Harness(下称 dsh)的世界观和「一个 while 循环里不断加东西」截然不同。 它的骨架只有几条: - 一切皆插件(Cordis):没有可打补丁的「特权核心」。模型适配器、工具注册表、会话日志、甚至 agent loop 本身都是插件,向共享的 ctx 贡献服务、类型化事件和可回退副作用。 - 仅追加的 SessionEvent 日志是唯一真源:模型看到的历史不是单独存的,而是用 deriveMessages() 从事件日志投影出来的。「模型可见即已记录」。 - Turn / Step 轮次:step = 一次模型请求 + 它触发的工具调用;turn = 零或多个 step。
展开完整文档(README 剩余 1 节)
learn-dsh:拆解 DeepSeek Harness

仿照 learn-claude-code 的渐进式教学风格,但主线来自 DeepSeek Harness 自己的架构分层,不是照搬。

温馨提醒,由于当前 dsh 暂时是 v0.1 开发者预览版,很多设计不一定完善,但我这个教程会持续跟随 dsh 的更新而更新的,其次是对于怎么讲清楚我自己也还在探索,其实可以不着急看,等待孵化

网页展示效果更好,建议通过网页阅读 https://onychen.github.io/learn-dsh/

这门课教什么

DeepSeek Harness(下称 dsh)的世界观和「一个 while 循环里不断加东西」截然不同。
它的骨架只有几条:

- 一切皆插件(Cordis):没有可打补丁的「特权核心」。模型适配器、工具注册表、会话日志、甚至 agent loop 本身都是插件,向共享的 ctx 贡献服务、类型化事件和可回退副作用。
- 仅追加的 SessionEvent 日志是唯一真源:模型看到的历史不是单独存的,而是用 deriveMessages() 从事件日志投影出来的。「模型可见即已记录」。
- Turn / Step 轮次:step = 一次模型请求 + 它触发的工具调用;turn = 零或多个 step。
- 能力 seam:一个可替换能力 = interface + implementation + consumer 三角色。
换一个 provider 就能整体换掉产品的一块能力。
- 可选能力挂在 seam 上,不进 loop 主干:subagent、compaction、skills、jobs、goal 都是可选能力,各自是独立机制,不属于 agent loop 核心。

和 learn-claude-code 最本质的区别:原版是「循环不变、能力层层叠加」;
dsh 是「内核极薄、一切经由插件树 + 事件 + seam 组合」。
所以本课主线不是「往循环里塞功能」,而是「先立起 Cordis 插件/事件/seam 这套骨架,再逐层把每个能力作为插件挂上去」。

课程地图(七主题 · 一条主线)

编号 L01–L22 是一条连续的阅读主线,下面七个主题只是给这条主线分段贴标签。
个别课(如 L22)编号靠后但概念归属较早的主题,已在括号里标注——按编号顺序读即可。

主题 A · 内核骨架 ├ L01 最小 Agent Loop ├ L02 Cordis 插件 + 可逆注册 └ L03 四种事件分发 ▼ 主题 B · 会话即真源 ├ L04 仅追加事件日志 ├ L05 deriveMessages 投影 └ L22 显式 Trace 查看 (扩展课·读侧对称面,依赖 L04/L05/L15) ▼ 主题 C · 轮次与模型边界 ├ L06 Turn / Step 生命周期 ├ L07 pre-step 拦截 └ L08 LLM 适配器与流式 ▼ 主题 D · 作用域与工具 ├ L09 Scope 与 shadowing ├ L10 工具注册表 ├ L11 工具执行管线与策略 ├ L12 能力 seam └ L13 System Prompt 装配 ▼ 主题 E · 上下文的可持续性 ├ L14 Skills 按需加载 └ L15 Compaction 压缩 ▼ 主题 F · 委派与并发 ├ L16 Subagent 上下文隔离 ├ L17 Jobs 后台任务 ├ L18 持久 Goal 领域 └ L19 Goal Round Driver ▼ 主题 G · 组装成产品 ├ L20 Profile / Bundle ├ L21 Capstone 合成 mini-dsh └ 附录 X 持久化 / flush / 崩溃恢复 (仅讲义,无代码)

关于 L22 的编号:它排在末尾,但概念上是主题 B(会话即真源)的读侧对称面,依赖 L04 / L05 / L15。可以学完这三课后跳看,或按主线读到最后自然抵达。

22 课 motto 一览

| 课 | 主题 | Motto |
| L01 | 最小 Agent Loop | 一个循环 + 一次模型调用 + 一个工具,就是 agent 的胚胎 |
| L02 | Cordis 插件 + 可逆注册 | 不改核心,只在旁边挂插件;每个注册都能被回退 |
| L03 | 四种事件分发 | 能力调用走 ctx.<service>,观察/拦截/策略走事件 |
| L04 | 仅追加事件日志 | 不存消息历史,只存事件;一切皆可回放 |
| L05 | deriveMessages 投影 | 模型看到的是投影,不是存储;模型可见即已记录 |
| L06 | Turn/Step 生命周期 | step=一次请求+其工具;turn=零或多个 step,跑完才关 |
| L07 | pre-step 拦截 | 用 waterfall 在请求前改写或拒绝要进模型的消息 |
| L08 | LLM 适配器与流式 | 模型本身也是可替换的 provider |
| L09 | Scope 与 shadowing | 同名最具体者胜;作用域是 per-agent 人格的根 |
| L10 | 工具注册表 | 加一个工具,只加一个定义,循环不用动 |
| L11 | 工具执行管线与策略 | pre→guard→execute→post→result,策略挂在管线上而非工具里 |
| L12 | 能力 seam | 换一个 provider,就换掉产品的一整块能力 |
| L13 | System Prompt 装配 | 提示词不是一段字符串,是各插件贡献的段落 + 工具 schema |
| L14 | Skills 按需加载 | 用到什么知识再加载什么 |
| L15 | Compaction 压缩 | 日志从不删除,只追加一条 replace 事件把旧范围移出 surface |
| L16 | Subagent 隔离 | 每个子任务一份干净的上下文,只回传结果 |
| L17 | Jobs 后台任务 | Jobs 管生命周期,控制器负责把完成事实重新交回 Agent |
| L18 | 持久 Goal 领域 | 给会话挂一个持久目标,它是状态不是调度器 |
| L19 | Goal Round Driver | 目标未完成就再开一轮,直到完成或阻塞 |
| L20 | 配置档 / Bundle | 产品 = 有序层叠的插件树,任意一行都能被补丁替换 |
| L21 | Capstone | 所有机制合一,对照真实 harness 看每层如何插在一起 |
| L22 | 显式 Trace 查看 | 一切皆事件,所以一切皆可显式回溯 |

怎么跑

需要 Python 3.10+,无需 API key、无需联网:每课内置一个确定性的 Replay LLM。

从任意一课开始,每个文件都能独立运行
python lessons/L01_agent_loop/main.py
python lessons/L05_derive_messages/main.py
python lessons/L21_capstone/main.py
python lessons/L22_session_trace/main.py

网页版(推荐阅读方式)

讲义 + 源码另有一个纯静态网页版,形式类似 learn.shareai.run:左侧按阶段分组导航,右侧课程时间线,点进去可切「讲义 / 源码」双标签。

python site/build_site.py # 改过讲义后重新生成数据
start site/index.html # 双击也行,file:// 就能跑

零依赖、不需要 Node/npm、不需要联网。详见 site/README.md。

想接真实模型?需要显式开启(默认永远走 Replay,避免测试意外联网):

$env:DSH_LIVE = "1" # 必须显式开启;缺 key 会直接报错 $env:DEEPSEEK_API_KEY = "sk-..." $env:DEEPSEEK_BASE_URL = "https://api.deepseek.com" # 可选 $env:DEEPSEEK_MODEL = "deepseek-chat" # 可选,默认 deepseek-chat
pip install requests # 真实模型路径依赖
开启后任意「会调模型」的课都会走真实 API(缺 key 会直接报错)。
但请注意下面的局限:工具型智能体课(L01/L21 等)不保证复现工具流程。
python lessons/L01_agent_loop/main.py

真实模型路径是可选彩蛋,定位有限,别期望它端到端跑工具:
- 它只证明「Replay 与真实 DeepSeek 是同一个 seam 的两个服务商」,并能做纯文本对话。
- 本课的工具调用用的是教学格式({id,name,arguments}),不是 DeepSeek/OpenAI 的 wire-format;各课也没把工具 schema 传给真实模型。所以像 L01/L21 这类工具型智能体,真实模型不保证复现 Replay 的工具流程。把这条链路做成 API 兼容会引入大量适配复杂度,偏离「离线教学」的初衷,故有意不做。要完整体验工具型智能体,请用默认的 Replay。
- DeepSeekLLM.stream() 是「先 complete 再切片」的模拟流式,不是真 SSE。

课程定位(重要)

本课分两种形态,别用同一把尺子衡量:

- L01–L13 是「渐进式主干」:概念上后一课在前一课基础上叠一层,主线连续。
- L14–L22 是「能力实验室」:每课聚焦一个可选能力(Skills / Compaction / Subagent / Jobs / Goal / Trace 等),为了让单课能独立读懂、独立运行,各自搭建该机制的最小上下文, 不强求与上一课代码逐行 diff。真实 dsh 里这些能力也是各自独立的 seam/包。
- L21 Capstone 整合的是「核心主干」那 8 层(ctx / 事件 / 日志 / 投影 / turn-step / llm seam / 工具管线 / subagent),不是全部 22 层——它是 headless 配置档的教学缩影。

每课讲义结构

每课 README.zh.md 固定九段,先跑再讲。每课都在“代码拆解”后提供独立的 代码解读:沿该课自己的执行路径带读 main.py,解释控制流、状态变化和设计原因。

1. Motto — 一句话主旨
2. 30 秒运行 — 命令 + 预期输出
3. 观察输出 — 你刚才看到了什么
4. 问题 — 为什么需要这一层
5. 心智模型 — 用一个比喻建立直觉
6. 方案与图 — 网页端渲染为流程、结构、对照或步骤式教学组件
7. 代码拆解 — 最小实现的快速索引
8. 代码解读 — 从真实源码行出发,解释本课设计如何落到控制流和不变量
9. 相对上一课新增 + 简化了什么 vs 真实 dsh — 附「教学类名 → 真实 ctx 服务/事件/包」映射表

“代码拆解”是快速索引;“代码解读”则回答代码如何真正把本课设计跑起来。网站中的源码片段直接按行号取自同课 main.py,构建时会校验范围,避免讲义与源码复制后漂移。

重要免责声明

本课的教学代码是玩具!!!!!,不是 dsh 的真实实现!!!!!。 dsh 本体用 TypeScript + Cordis 编写;本课用 Python 让机制短小易读。每课第 9 段都会明确标出:本课简化了什么、真实工程里那一层复杂度为什么必要。一切以官方文档和源码为准(见 deepseek-harness/docs/)。
预览分享卡片长什么样 ↓onychen/learn-dsh
分享 · DeepSeek Harness Hub
onychen/learn-dsh

DeepSeek Harness 拆解教学课程附上简单教学版实现项目

回到顶部