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

从零构建智能体 tsrigo/dsh-from-scratch

DeepSeek Harness
tsrigo80 天前有提交已提供中文文档扫描:含敏感能力

一份可运行的 TypeScript 教程,从零搭建极简的 DeepSeek 风格智能体框架。

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

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

自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add tsrigo/dsh-from-scratch
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · dev
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/28·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 80 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

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

✗npm 包dsh-from-scratch(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

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

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 12:33:33

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 6 处,展示前 6 条)
  • 读取本地文件
    src/checkout-workspace.ts:48
    WORKSPACE_PATHS.map((path) => [path, readFileSync(new URL(path, defaultWorkspace), "utf8")]),
  • 读取密钥环境变量
    src/cli.ts:15
    const apiKey = process.env.DEEPSEEK_API_KEY;
  • 发起网络请求
    src/llm-deepseek.ts:48
    const response = await this.#fetch(`${this.#baseUrl}/chat/completions`, {
  • 写入本地文件
    src/python-workspace.ts:38
    await mkdir(root, { recursive: true });
  • 写入本地文件
    src/python-workspace.ts:76
    await writeFile(resolve(root, HELLO_FILE), value.content, "utf8");
  • 读取本地文件
    src/python-workspace.ts:99
    source = await readFile(resolve(root, HELLO_FILE), "utf8");
扫描于 2026/11/4(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

1 张 · 点击查看大图

功能亮点

  • TypeScript教程
  • 从零搭建智能体框架

README

由 DeepSeek 最新模型翻译生成
DeepSeek Harness 从零开始 这是一份可离线使用的教程,有中文和英文两个版本,用 TypeScript 和 Python 两套并行实现,讲清 DeepSeek Harness 的主要运行时机制。 DeepSeek Harness 简称 DSH,提供语言模型执行任务所需的运行时。它组装模型输入、暴露工具、执行校验过的工具调用、记录运行过程,并在一次模型响应不足以完成任务时继续推进。本仓库把这些机制精简成两套实现,可以阅读、运行、测试。仓库里还有一个交互式教程站点,由源码生成。 每套实现都用六个独立的确定性示例,只保留各自问题所需的输入和运行时事件。各章节逐步加入上下文投影、插件生命周期、会话日志、动态插件和长任务续跑。你可以查看源码、模型请求,以及每个机制改动后的运行时状态。 本项目专注讲运行时机制,代码库刻意做小,执行边界也写得很明确。它不提供 DeepSeek Harness 的兼容层,也不覆盖完整产品里的权限、持久化、调度和多智能体功能。 快速开始 需要 Node.js 22 或更高版本。pnpm 11 版本已固定在 package.json 中。
展开完整文档(README 剩余 1 节)
DeepSeek Harness 从零开始

这是一份可离线使用的教程,有中文和英文两个版本,用 TypeScript 和 Python 两套并行实现,讲清 DeepSeek Harness 的主要运行时机制。

DeepSeek Harness 简称 DSH,提供语言模型执行任务所需的运行时。它组装模型输入、暴露工具、执行校验过的工具调用、记录运行过程,并在一次模型响应不足以完成任务时继续推进。本仓库把这些机制精简成两套实现,可以阅读、运行、测试。仓库里还有一个交互式教程站点,由源码生成。

每套实现都用六个独立的确定性示例,只保留各自问题所需的输入和运行时事件。各章节逐步加入上下文投影、插件生命周期、会话日志、动态插件和长任务续跑。你可以查看源码、模型请求,以及每个机制改动后的运行时状态。

本项目专注讲运行时机制,代码库刻意做小,执行边界也写得很明确。它不提供 DeepSeek Harness 的兼容层,也不覆盖完整产品里的权限、持久化、调度和多智能体功能。

快速开始

需要 Node.js 22 或更高版本。pnpm 11 版本已固定在 package.json 中。

git clone https://github.com/tsrigo/dsh-from-scratch.git
cd dsh-from-scratch
corepack enable
pnpm install
pnpm tutorial:generate
pnpm site:dev

运行真实模型演示

下面这条命令运行一个有边界的 Python 任务。智能体必须创建 hello.py,用提供的校验器运行它,并确认输出正好是 Hello, world!。文件默认写到 demo-python/hello.py。

pnpm demo

设置了 DEEPSEEK_API_KEY 时,命令使用真实的 DeepSeek 模型。没有设置时,命令离线回放已存储的模型决策,不访问网络,也不模拟流式时序。你可以用环境变量和选项选择模型与工作区:

DEEPSEEK_API_KEY=your-key \
DEEPSEEK_MODEL=deepseek-chat \
pnpm demo -- --workspace ./tmp/python-hello

模型请求、工具调用和 Python 程序输出都记录在 SessionLog 中。想运行最初的离线结账示例,用 pnpm demo:checkout。

数据生成和浏览站点都不发模型请求,也不需要 API key。

运行教程站点

站点包含:

- 所选实现的四张入门卡片:TypeScript 讲类型注解、interface、async / await 和可辨识联合;Python 讲类型注解、dataclass、async / await 以及字典和列表。
- 每种实现各有六个独立机制示例,包含源码、逐章 diff、模型请求、Session Events、执行轨迹,以及和正文对应的插件关系。
- 估算相邻请求的稳定前缀、首个变化部分和 token 数。这些值只用来解释请求结构。服务商缓存命中和计费必须依据服务商数据判断。

pnpm tutorial:generate 会运行 TypeScript 和 Python 生成器。TypeScript 生成器读取 docs/checkpoints.json 或 docs/checkpoints.en.json、对应的课程和入门文档,然后写出 website/public/generated/tutorial.json 和 website/public/generated/tutorial.en.json。Python 生成器读取 python_harness/、docs/lessons-python/、docs/lessons-python-en/、对应的 Python 入门文档,以及 docs/python-chapters.en.json 里的英文覆盖内容,然后写出 website/public/generated/tutorial-python.json 和 website/public/generated/tutorial-python.en.json。生成过程会检查源码范围、代码指南覆盖情况,并在请求证据来自 Session Events 时精确重建请求。

六个章节

下面的章节标题和问题与英文教程站点一致。摘要描述 TypeScript 实现;站点提供对应的 Python 课程。

第 1 章 · Agent Loop

DSH 的 Agent Loop 长什么样?

Agent.runTurn() 把一个 Turn(一次连续执行)拆成若干 Step。每个 Step 包含一次模型请求及其工具执行。Harness 根据当前状态构建请求。模型返回 Tool Call 时,Harness 用 JSON Schema 校验参数,执行工具,再把 Tool Result 加入下一次请求。模型不再调用工具时,Turn 结束。超过 maxSteps 会以显式错误终止。

本章还展示 Programmatic Tool Calling(PTC)如何把多个动作组织成 TypeScript 程序。仓库只做静态对比,不实现 Code Runtime。

第 2 章 · 上下文与缓存复用

上下文如何组织,DSH 又如何优化缓存复用?

每次模型请求都是完整记录的一次投影。对于很长的工具结果,模型视图保留开头、结尾,并显式标注省略的字符数。原始结果仍留在会话记录里。稳定的系统指令和工具 schema 排在最前,消息按顺序追加,Step 专属上下文排在最后。这种顺序让相邻请求之间保持更长的相同前缀。
站点会比较最长的相同规范前缀,并估算它的 token 数。实现不会调用或模拟服务商的 Prompt Cache。

第 3 章 · 一切皆插件

DSH 如何做到一切皆插件?

Context 是插件共享的注册接口。插件可以提供运行时 Service、注册 Tool、贡献系统 Prompt、添加 Event Listener。每项贡献都会记录自己的 owner,以及一个 effect,用来在插件生命周期内管理清理。如果 setup 失败,或者已挂载的插件被移除,Context 会按相反顺序执行这些清理函数。

这个小巧的运行时保留了教程所需的 Cordis 生命周期特性:依赖访问、能力归属、setup 回滚、幂等移除、运行时检查。

第 4 章 · 让每次运行都可追溯

DSH 如何记录并保存智能体运行?

SessionLog 按执行顺序追加 Turn 与 Step 边界、用户消息、模型响应、工具调用、工具结果、请求头、上下文检查点、插件变更、Goal 状态变更。每个事件都会获得单调递增的标识符,已存储的事件不会被原地修改。

buildRequest() 从这些事件重建所选 Step 的输入。replayTrace() 从同一来源推导执行轨迹。上下文检查点只在后续模型投影中替换更早的历史;原始事件仍然可用。最小运行时把日志保存在内存中,教程生成器把它序列化成静态 JSON 供站点使用。

第 5 章 · 运行时自进化

DSH 如何在运行时持续进化?

常驻的 Runtime Tools 向智能体暴露 cordis_inspect、cordis_define、cordis_run、cordis_stop、cordis_undefine。智能体可以检查当前能力、提交 Cordis 插件代码、挂载插件、调用新工具验证其行为,然后停止插件或删除其定义。

动态插件仍然走第 3 章的 Context.mount(),所以新工具和新提示词会出现在后续模型请求中,移除时也走同一条清理路径。Node.js 用 node:vm 加载代码。这套机制面向可信的教程 fixture,并不是针对不可信代码的安全沙箱。

第 6 章 · 让长时间任务持续推进

DSH 如何让长时间任务持续推进直到完成?

LongTaskRunner 在智能体 Loop 之外保存 Goal、它的当前状态、已开始的 Round 数、轮次上限。每个 Round 启动一次常规的智能体 Turn,并复用同一个 Context、工作区和 SessionLog。Round 返回结构化的进度、完成或阻塞信息。外层 runner 随后启动下一个 Round,或者以 completed、blocked、max-rounds 结束。
Goal、Round、Turn 和 Step 分别表示长期目标、一次续跑尝试、一次连续执行和一次模型请求。测试覆盖正常完成、无可观察进展、显式阻塞,以及配置的 round 上限。

部署教程站点

pnpm tutorial:generate
pnpm site:build
pnpm site:dev

pnpm site:build 会在 website/dist/ 下生成生产站点。想在本地查看,运行 pnpm site:dev,然后打开终端里打印的地址。

有意划定的范围边界

TypeScript 实现省略了这些生产特性:

- 完整的 DeepSeek Harness 插件目录、预设加载和配置热重载。
- 用于 PTC 的 Code Runtime、通用 shell、任意文件访问和网络工具。
- 面向不可信插件代码的权限、审批流、进程隔离和安全沙箱。
- Session Log 的 JSON Lines 持久化、SQLite 持久化和进程重启恢复。
- 调度、后台任务、子代理和工作流。
- 服务商侧缓存命中的度量、计费模拟和通用上下文压缩策略。

这些边界让每一章的代码都直接对应它要回答的问题。完整产品见 DeepSeek Harness。

参考与许可

运行时行为参考了 DeepSeek Harness。逐章递进的结构,以及正文、源码与录制执行的对齐方式,参考了 pi-from-scratch。分阶段、可复现的动效设计参考了 vibe-motion/skills。本仓库中所有源码、正文、章节结构、组件、布局、动效和执行数据均为独立创作。

本项目采用 MIT License。它是独立的教育实现,与 DeepSeek 及其关联公司无隶属关系,未获其授权,也未与其合作开发。
预览分享卡片长什么样 ↓tsrigo/dsh-from-scratch
分享 · DeepSeek Harness Hub
tsrigo/dsh-from-scratch

一份可运行的 TypeScript 教程,从零搭建极简的 DeepSeek 风格智能体框架。

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部