前言¶
DeepSeek Harness(命令名 dsh)是 DeepSeek AI 开源的智能体运行时,核心设计是「一切皆插件」:模型、工具、技能、会话、沙箱和界面都可以用插件替换或组合。社区里还有一份独立的插件目录站点 deepseek-harness-plugin.com,它和 DeepSeek / 幻方没有官方从属关系,收录的是带 dsh-plugin 话题的社区仓库。
智能体日常最容易翻车的,往往不是写业务代码,而是那些看起来很简单、结果却必须可复现的操作:现在几点、这段 JSON 里某个字段是什么、CSV 有几列、15 + 27 * sqrt(9) 等于多少。模型心算时区、闰年和浮点统计很容易错;走内置 bash 又每次起进程,跨平台语法还不统一。omdsh-dev 维护的 dsh-toolkit 把十个零依赖的确定性工具打成一个 collection,可以一次安装,也可以按需只装某一个。
dsh-toolkit 是什么¶
dsh-toolkit 是一款面向 DeepSeek Harness 的「工具与能力」插件合集,由 GitHub 组织 omdsh-dev 维护,仓库地址是 omdsh-dev/dsh-toolkit。社区目录页把它归在「工具与能力」分类,许可证为 MIT,主要语言是 TypeScript。截至 2026-08-17,GitHub 显示 21 颗星;目录页当时仍标注 16 颗,以仓库页面为准。
它解决的问题很具体:把 time、encoding、json、calculator、csv、regex、markdown、diff、stat、schema 十个工具做成可独立安装的 bundle,再在本仓库里 vendored 冻结成 pack artifact 快照,统一工程、统一测试、统一维护。根包名是 @deepseek-ai/dsh-toolkit,package.json 里写了 "private": true,只用于 Git / collection 分发,并不代表会发到 npm registry,也不代表它是 DeepSeek 官方应用商店里的产品。
仓库 README 把它定位成 collection 与安装辅助仓库:每个子包都可以单独启用、禁用、卸载;collection 提供目录、清单和批量安装脚本。适配目标写的是 DSH 0.1.0-rc.6(npm)的 Profile Bundle 插件系统。根包要求 Node.js 为 ^22.19.0 || >=24.0.0,当前版本号是 0.0.1。
十个工具分别做什么¶
仓库 catalog.json 列出了十个子插件,能力如下。README 还标注了各子包的测试用例数,合计 723 个;这是仓库自己的统计,不是第三方评测。
1、time(dsh-tool-time):严格 ISO 8601 解析、IANA 时区转换、UTC 日历加减、固定时长差。支持 now / convert / add / diff。不接受自然语言日期,不带时区的日期时间也会被拒绝。
2、encoding(dsh-tool-encoding):UTF-8 文本的 base64 / base64url / url / hex 编解码,以及 md5 / sha1 / sha256 / sha512 摘要和 UUID v4。哈希只适合非安全完整性校验,不要拿它处理机密材料。
3、json(dsh-tool-json):JMESPath 风格的路径查询,手写递归下降解析器。支持点号访问、方括号索引、数组通配符投影。不支持过滤器 [?...]、管道 | 和函数调用。
4、calculator(dsh-tool-calculator):安全的数学表达式求值。支持 + - * / % **、括号,以及 abs、sqrt、sin、pow、PI、E 等白名单函数和常量。实现不用 eval,也不用 new Function。
5、csv(dsh-tool-csv):RFC 4180 解析、按列精确查询、行列统计、转 JSON。与 json 工具形成一对:JSON 管对象,CSV 管表格。
6、regex(dsh-tool-regex):测试匹配、提取捕获组、安全替换,以及静态解释正则含义(explain 不执行匹配)。test / find / replace 在可终止的 worker 里跑,硬超时 1000ms,用来挡住 ReDoS。
7、markdown(dsh-tool-markdown):HTML↔Markdown、GFM 表格规范化、目录生成。md2html 走标签白名单,javascript: / data: 链接会降级成纯文本;script / style / iframe 等内容会被剥离。
8、diff(dsh-tool-diff):文本 / JSON / CSV / Markdown 的结构化比较,以及内存中的 unified diff。只读,不读文件、不写文件、不联网、不调 git。
9、stat(dsh-tool-stat):描述统计、百分位数、频数分布、Pearson / Spearman 相关。相同输入得到相同输出;拒绝 NaN / Infinity。
10、schema(dsh-tool-schema):JSON Schema(draft 2020-12 子集)验证、失败路径、约束解释、安全应用 default。零网络、零动态代码执行;不支持的关键字默认直接失败,不会静默忽略。
这些工具的共同取向是:零第三方运行时依赖、纯函数、结果确定、有资源上限。它们不是去替代 bash 或 git,而是把智能体高频、易错、又必须可核对的那一类操作从「模型猜」改成「工具算」。
安装与启用¶
社区目录页给出的安装命令如下,在 DeepSeek Harness 终端里运行即可:
dsh plugin add github:omdsh-dev/dsh-toolkit
如需可复现安装,目录页建议固定 commit 哈希:
dsh plugin add github:omdsh-dev/dsh-toolkit#commit
把 #commit 换成仓库里实际的提交哈希。插件以当前 dsh 进程的权限运行,安装时可能执行代码,装之前应检查源码和许可证。
仓库 README 另外说明了两种挂载模型,和目录页那条「一次加根包」并不完全等同。
独立 bundle 模型(README 推荐):每个子包单独安装、启用、禁用、卸载。例如只装 CSV 或 Diff:
# 安装单个工具到 web profile
dsh plugin --profile web add github:omdsh-dev/dsh-tool-csv
# 一次性任务(headless)profile
dsh plugin --profile headless add github:omdsh-dev/dsh-tool-diff
批量安装可以用仓库里的脚本(幂等,重复执行不会重复添加):
./scripts/install-web.sh # 全部 10 工具 → web profile
./scripts/install-headless.sh # 全部 10 工具 → headless profile
./scripts/install-all.sh # 两个 profile 都装
验证与运行:
dsh --profile web --dump-config | grep tool-csv
dsh run "使用 csv 工具解析 'a,b\n1,2'"
web 与 headless 是不同 profile:装到 web 不会自动覆盖 headless;dsh run 默认使用 headless。Windows 路径要用正斜杠。
meta bundle 模型(可选):需要一次原子挂载全部工具时,挂根包:
dsh plugin --profile web add github:omdsh-dev/dsh-toolkit
dsh --profile web --dump-config | grep tool-kit
若 profile 里已经单独挂过同名插件(tool-time 到 tool-schema),再挂 meta 包会因重名报错。这时应先移除旧插件,或改用独立 bundle。README 写明 meta apply 具备原子性:任一子插件失败时会逆序回滚已注册工具,不残留部分状态。
也可以本地 npm pack 后用 tarball 路径安装,不依赖 GitHub。根 meta 包保持 private: true,不要把它理解成已经发布到 npm 公共源。
典型用法¶
安装成功后,智能体会获得对应的工具名。下面的例子都来自各子仓库 README,可以直接对照。
计算器,不用 bash 算术,也不走 eval:
calculator { expression: "15 + 27 * sqrt(9)" } → 96
headless 侧可以这样冒烟:
dsh run "使用 calculator 工具计算 1+2*3"
JSON 路径查询:
json { input: <JSON>, query: "items[0].name" } → "hello"
json { input: <JSON>, query: "items[*].name" } → ["a", "b"]
CSV 解析成对象数组(有表头时):
csv { action: "parse", csv: "name,city\nAlice,NYC" }
→ [{"name":"Alice","city":"NYC"}]
时间工具取当前 UTC:
dsh run "使用 time 工具获取当前 UTC 时间"
add 始终按 UTC 日历运算;2026-01-31 加一个月会钳制成 2026-02-28,而不是溢出到三月。
编码工具把文本做成标准 base64:
encoding { action: "base64_encode", input: "foobar" } → "Zm9vYmFy"
正则提取捕获组,以及只解析、不执行的 explain:
regex { action: "find", pattern: "(\\w+)@(\\w+)", input: "a@b x c@d" }
regex { action: "explain", pattern: "\\d{4}-\\d{2}" }
Markdown 转换与安全降级:
markdown { action: "html2md", html: "<h1>标题</h1><p>你好 <b>世界</b></p>" }
→ # 标题
你好 **世界**
markdown { action: "md2html", markdown: "[x](javascript:alert(1))" }
→ <p>x</p>
统计和 Schema 验证也可以直接交给工具,而不是让模型心算:
dsh run "使用 stat 工具计算 [1,2,3,4,5] 的描述统计"
dsh run "用 schema 工具验证 {name: 'x', age: 3} 是否符合给定 JSON Schema"
适用场景与注意事项¶
适合已经在用 DeepSeek Harness、需要给智能体补一套可核对、可复现基础能力的人。典型场景包括:配置和 API 响应里的 JSON / CSV 抽取、文档 HTML 转 Markdown、两段文本或表格的结构化对比、日期时区换算、以及用 JSON Schema 检查插件 manifest 或配置文件。
使用前有几条边界需要看清楚。
1、权限与来源。插件以当前 dsh 进程的权限运行,安装时可能执行代码。装之前应阅读 omdsh-dev/dsh-toolkit 源码和 MIT 许可证;需要可复现环境时固定 commit。社区目录不是 DeepSeek 官方应用商店。
2、web 和 headless 不要混为一谈。只在 web profile 里装了工具,dsh run 默认的 headless profile 里是看不到的。
3、不要和同名单插件叠装。meta 包与已经单独安装的 dsh-tool-* 会抢同一组工具名。
4、能力是子集,不是全家桶替代品。json 不是完整 JMESPath;time 不接受「下周」这类自然语言;calculator 不支持科学计数法 1e5,三角函数用弧度;encoding 的 hash 没有 HMAC;schema 只覆盖 draft 2020-12 的一部分关键字;diff / markdown / regex / schema 都有输入体积和超时上限。超出范围应退回 bash、jq 或其他专用工具。
5、不要把机密送进工具参数。encoding、markdown、diff、schema 的 README 都写明:工具参数会记入会话日志。密钥、会话 Cookie、私钥不要作为 input / html / data 传进去。
6、包名不等于官方发布。子包也使用 @deepseek-ai/dsh-tool-* 这种 scoped 名称,这是 DSH 生态里的命名约定;本 collection 的维护者是 omdsh-dev,根包还是 private: true。
小结¶
dsh-toolkit 做的事情很克制:不给智能体加新的「会思考」的能力,只把十件必须算准的小事做成零依赖工具,并能一次装上。目录页安装命令是 dsh plugin add github:omdsh-dev/dsh-toolkit;更细的按需安装、profile 选择和工具语义,以仓库 README 为准。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-toolkit/
GitHub:https://github.com/omdsh-dev/dsh-toolkit