课程总纲 / 阶段 4 · 讲授
L19

十分钟讲清 dsh:讲稿与演示脚本

拿着现成讲稿和演示脚本,完成一次让同事记住"dsh 是什么"的内部分享。

预计阅读 25 分钟难度 ★★☆☆☆全课程收官
本课用法:不学新知识,而是把已学的东西组织成一场可复述的分享。素材来自 L04–L07 与 L12–L18,照时间轴排练两遍即可。

〇、时间轴总览The 10 Minutes

时间段环节听众心里的问题
0:00–1:00开场:一句话定位 + 为什么值得听"这东西跟我有什么关系?"
1:00–5:00三张图讲架构(插座板 → 一次干活 → 三角色)"它到底是怎么工作的?"
5:00–8:00演示主线:跑起来 → 加一个工具 → 模型当场调用"眼见为实"
8:00–10:00高频问题标准答案 + 收尾"我能用吗?靠谱吗?"

分享的成败在于听众散场时能否复述你的主线。这十分钟只押三句话:一切皆插件、能力可整体替换、日志是唯一事实源。

一、开场(0:00–1:00)Opening

"今天介绍的 DeepSeek Harness(简称 dsh)是 DeepSeek 开源的智能体运行框架——『AI 助手的发动机 + 一整套改装件』。它最有意思的地方:从模型调用、终端执行、会话存储到 Web 界面本身,全部是插件,没有哪个功能焊死在主程序里。接下来我用三张图讲清架构,再现场演示给 AI 加一个新本事——全程不超过 20 行代码。"
开场三个不要:不念 README;不放目录页(10 分钟没有目录);不从安装讲起——安装放演示环节顺带做。

二、三张图讲架构(1:00–5:00)Three Diagrams

每图约 80 秒。投屏直接开 L04L05L06 三页,或把图重画在白板上。

图 1 · 一切皆插件(插座板比喻)—— 回答"它的骨架长什么样"

核心只有一块"插座板"
Cordis 运行时
模型调用llm 插件
终端执行shell 插件
会话存储session 插件
Web 界面也是插件

台词:"传统软件是『主机 + 外设』,核心功能焊死在主程序里;dsh 是一块插座板——你以为的『主体功能』全都以插头形式插在上面。拔掉 Web 界面插件,它就变成命令行工具;换掉模型插件,它就换了大脑。这就是『一切皆插件』。"

图 2 · turn/step 流程 —— 回答"一次干活长什么样"

① 你提问进入一个 turn
② 模型思考决定:直接回答
还是调工具?
③ 调工具读文件 / 跑命令
= 一个 step
④ 结果回填塞回上下文
⑤ 循环 ②–④直到最终答复

台词:"它不是一口气答完,而是走循环:思考 → 可能调工具 → 结果吃回来 → 再思考。一轮对话叫一个 turn,每次工具调用叫一个 step;AI 助手看似智能的多步操作,本质都是这个循环。"

图 3 · 能力缝三角色 —— 回答"为什么换实现这么容易"

Definition定义"什么是
执行命令"的契约
Provider真正去执行
(本地 / 沙箱 / 远程)
Consumer把它包装成
AI 可调用的工具

台词:"每项能力切成三个角色:定义契约的、提供实现的、消费使用的。契约稳定,实现随便换——今天命令在本地跑,明天换沙箱环境,换一个 Provider 插件就行,定义和工具都不用动。这就是『能力可整体替换』。"

时间紧砍图 2(turn/step 听众大多能脑补),保住图 1(静态骨架)和图 3(为什么灵活)——它们共同回答"这框架凭什么值得看"。

三、演示主线(5:00–8:00)Live Demo

五步走,每步有台词。核心冲击点:给行驶中的车换零件——运行中的 dsh 加上新工具,模型立刻会用。

第 1 步 · 跑起来(约 30 秒)

pnpm dsh web

台词:"这是完整的产品,Web 界面、模型、工具箱都在跑。"前提:演示前已完成 pnpm install && pnpm run build,现场不构建。

第 2 步 · 布置一个真实任务(约 60 秒)

在 Web UI 里问一个能展示多步工具调用的任务:

看一下这个仓库的 package.json,告诉我它叫什么名字、有哪些脚本命令

台词:"注意左侧执行轨迹:先调工具读文件、再组织语言回答——就是图 2 的循环,每一步都看得见。"

第 3 步 · 现场写 20 行代码加一个工具(约 60 秒)

切到编辑器,在 scratch-plugin/src/my-plugin.ts 写下(或誊写备好的)工具:

import type { Context } from '@deepseek-ai/cordis'
import { defineTool } from '@deepseek-ai/dsh-tools'

export const name = 'lunch-plugin'
export const inject = ['tools']

const RESTAURANTS = ['兰州拉面', '沙县小吃', '食堂三楼', '楼下便利店']

export function apply(ctx: Context) {
  ctx.tools.register(defineTool({
    name: 'pick_lunch',
    description: '从公司楼下的餐厅列表里随机挑一家',
    parameters: {},
    output: { schema: { type: 'string' } },
    async execute() {
      return RESTAURANTS[Math.floor(Math.random() * RESTAURANTS.length)]
    },
  }))
}

台词(边写边说):"三件事:name 插件名,inject 声明用『工具注册表』服务,apply 注册 pick_lunch 工具。就这些——不改框架一行代码。"

第 4 步 · 挂载并热重载(约 30 秒)

补丁文件 scratch-plugin/cordis.yml(提前建好,现场只展示):

- insert:
    - id: lunch
      name: '/绝对路径/scratch-plugin/src/my-plugin.ts'
pnpm dsh web --patch ./scratch-plugin/cordis.yml

台词:"插件以『补丁层』叠在产品之上——产品一行没动。以后改代码保存即生效,不用重启。"

第 5 步 · 模型当场调用(约 40 秒,全场高潮)

在 Web UI 里问:

今天中午吃什么?帮我从公司楼下的餐厅里挑一家

台词:"看——它自己发现并调用了新工具。这 20 行代码是五分钟前写的,模型清单里本来没有它。扩展 AI 的能力,和给浏览器装扩展一样简单。"

演示保险丝:① 全程彩排至少一遍、掐好每步用时;② 成品代码提前备好,现场是"誊写"不是"创作";③ 带一段完整成功录屏——网络或模型抽风时直接放录屏,讲稿不变;④ API key 提前配好,别在投屏上输入。

四、高频问题标准答案(8:00–10:00)FAQ Script

Q1:"和 Claude Code / Codex 什么关系?"

"同类产品,都是 AI 编程/工作助手。区别在架构:它们的功能大多在主程序里,dsh 把一切做成插件,连界面都是。hooks 桥可直接复用 Claude Code / Codex 已有的 hook 配置,迁移成本低。可当作 DeepSeek 官方的开源智能体试验场——理念走得很前。"

Q2:"能接我们公司自己的模型吗?"

"能,两条路:零代码——模型服务兼容 OpenAI 接口就加自定义 provider(base URL + API key);写插件——注册模型适配器深度定制协议。内置 Anthropic、OpenAI、Bedrock、Vertex 等常见 provider。"

Q3:"稳定吗?能上生产吗?"

"诚实说:开发者预览,API 还会变,别急着上生产。但它最值钱的是三个架构思想:一切皆插件、能力缝三角色、会话日志是唯一事实源——不随版本失效,做任何 AI 应用都用得上。抓理念,别抓 API。"

收尾一句话(照读)

"记住三件事:它是一切皆插件的智能体框架;给 AI 加能力只要 20 行代码;能用配置解决的就不写代码。仓库地址在 slides 最后,感兴趣的一起看看。"

五、演示前检查清单Pre-flight Checklist

检查内容失败后果
构建pnpm install && pnpm run build 提前完成现场等编译,冷场
密钥API key 已配好且不会出现在投屏上泄漏 / 无法调模型
彩排完整流程掐表跑通一遍超时或卡壳
素材成品插件代码备好;录屏兜底带去网络/模型故障
投屏L04–L07 三页提前打开;字号调大;关通知看不清 / 弹窗社死
三句话主线
一切皆插件 / 能力可整体替换 / 日志是唯一事实源。
演示冲击点
运行中的系统 + 20 行代码 = 模型立刻拥有新能力。
演示保险丝
彩排、誊写不创作、录屏兜底、密钥不投屏。
抓理念别抓 API
预览期回答"稳定吗"的标准姿态。
✏️ 动手练习
  1. 对手机录音完整讲一遍这 10 分钟,回听修掉三处卡壳。
  2. 不看本页,白板上徒手画出三张图;画不出的那张回对应课程补课。
  3. 找一位同事实际讲一次,记下他问的、你没答上的问题,把标准答案补进第四节。
预期结果:一场不看稿也能讲的 10 分钟分享;你的私人 FAQ 比本页多出至少一个真实问题。
📝 自测(点击展开答案)
1. 十分钟的标准时间分配?
开场 1 分钟(定位)→ 三张图 4 分钟 → 演示 3 分钟(五步主线)→ FAQ 2 分钟(三问 + 收尾)。时间紧砍图 2,保图 1 和图 3。
2. 三张图各自回答听众的什么问题?
图 1(插座板)=骨架长什么样、一切皆插件;图 2(turn/step)=一次干活长什么样、思考→调工具→回填的循环;图 3(三角色)=为什么换实现容易、契约稳定实现可换。
3. 演示主线的五步?冲击点在哪一步?
跑起来 → 布置真实任务(看工具调用轨迹)→ 20 行代码写 pick_lunch → --patch 挂载热重载 → 再问"中午吃什么"模型当场调用。冲击点是第 5 步:五分钟前还不存在的能力,模型现在就会用。
4. "能接我们内部模型吗"的标准答案结构?
先答"能",再给两条路:零代码(OpenAI 兼容端点加自定义 provider:base URL + key)、写插件(注册 LlmAdapter 深度定制);最后补一句内置 Anthropic/OpenAI/Bedrock/Vertex 等 provider。
5. 为什么说"抓理念别抓 API"?
开发者预览期接口会变,依赖 API 上生产有风险;但三个架构思想(一切皆插件、三角色、日志唯一事实源)稳定,对任何 AI 应用都有迁移价值。
6. 演示保险丝四条?
① 彩排掐表;② 成品代码备好、现场誊写不创作;③ 成功录屏兜底;④ API key 配好且不投屏。
权威出处:docs/architecture.zh.md(架构主源) · 本课程 L04 / L05 / L06 / L07(投屏素材) · L12(演示代码出处) · commands.html(演示命令速查)