dsh-units:DeepSeek Harness 的单位换算插件

前言

在 DSH 智能体工作流里,单位换算看起来简单,但实际很容易出错:摄氏与华氏之间存在偏移量,十进制 MB 与二进制 MiB 不能混用,mpg 与 L/100km 是倒数关系,机械马力、公制马力和电动马力也不等于同一个“hp”。如果智能体靠心算或临时推断,结果可能直接进入报告、脚本、配置和解释文本。

dsh-units 是 DeepSeek Harness,也就是 DSH 的单位换算工具箱插件。它提供 convert_unitlist_units 两个工具,让智能体在需要时直接调用静态单位表完成换算,而不是自行猜测系数。

这是什么

TYEclipse/dsh-units 是一个 DSH 插件,由 TYEclipse 维护,许可证为 MIT。当前资料中的版本号为 0.3.0,运行环境要求 node >=20

它的定位很窄:做单位换算。覆盖长度、质量、温度、面积、体积(含烹饪单位)、速度、时间、数据大小、压强、能量、角度、频率、功率、力、扭矩、排版和油耗等 17 个类别。实现上不依赖网络、不访问文件系统、不执行代码,主要是对静态单位表做纯算术。

核心功能

下面是已核实的两项主要能力。

convert_unit

convert_unit 用于在同一类别内把 value 从一个单位换算到另一个单位。它可以接收符号或完整名称,例如 °C"miles""MiB" 都可以工作。

它会拒绝未知单位、跨类别换算以及非有限数值,并给出明确的错误信息。内部计算保留浮点精度,返回结果时再做显示舍入。

返回内容会包含原始值、源单位和目标单位的符号与完整名称、换算结果、所用公式和所属类别。这样智能体解释结果时,可以说明计算路径,而不是只给出一个数字。

list_units

list_units 用于查看类别和单位。它可以列出全部 17 个类别,也可以只列出某一个类别,例如 "data""temperature"

这个工具适合在调用 convert_unit 之前使用,用来确认准确的单位符号或完整名称。

安装与启用

在 DSH 环境中,可以使用下面的插件安装命令:

dsh plugin --profile default add github:TYEclipse/dsh-units

如果需要在本地构建,可以使用仓库里的开发流程:

git clone https://github.com/TYEclipse/dsh-units.git
cd dsh-units && pnpm install && pnpm build

构建脚本使用 tsc,测试脚本使用 vitest,lint 脚本使用 oxlint。这些开发工具只出现在 devDependencies 和脚本中,不属于运行时依赖。

典型用法

下面这些示例都来自插件说明中的可复现调用。

把公里换算成英里:

convert_unit { value: 100, from: "km", to: "mi" }
→ 100 km = 62.137119 mi (length, × 0.621371)

区分二进制 MiB 和十进制 MB:

convert_unit { value: 500, from: "MiB", to: "MB" }
→ 500 MiB = 524.288 MB (data size / transfer, × 1.048576)

华氏温度换算为摄氏温度:

convert_unit { value: 350, from: "fahrenheit", to: "celsius" }
→ 350 f = 176.666667 c (temperature, (x − 32) × 5/9)

CSS 与排版中的像素、点:

convert_unit { value: 16, from: "px", to: "pt" }
→ 16 px = 12 pt (typography (CSS / print), × 0.75)

油耗单位换算:

convert_unit { value: 20, from: "mpg", to: "l/100km" }
→ 20 mpg = 11.760729 l/100km (fuel economy, 235.214583 ÷ x → x)

功率换算:

convert_unit { value: 150, from: "kw", to: "hp" }
→ 150 kw = 201.153313 hp (power, × 1.341022)

扭矩换算:

convert_unit { value: 1, from: "lbfft", to: "n.m" }
→ 1 lbfft = 1.355818 n.m (torque, × 1.355818)

查看体积类别:

list_units { category: "volume" }
→ volume (volume (incl. cooking), base: liter): m3 = cubic meter | l = liter | ...

单位符号需要注意的点

几个容易混淆的符号已经在新版本里做了明确约定。

pt 表示排版中的 point,不再是 US pint。如果要把品脱换算为升,应该使用 pint

convert_unit { value: 1, from: "pint", to: "l" }

kn 解析为 knot,也就是速度单位节。如果需要使用千牛,应通过完整名称调用:

convert_unit { value: 1, from: "kilonewton", to: "n" }

nm 表示纳米,也就是长度单位。扭矩里的牛顿米使用符号 n.m

convert_unit { value: 1, from: "lbfft", to: "n.m" }

排版单位有一些约定值:px 假设 96 dpi;emrem 假设常见的 16 px 浏览器默认基础字号。这些是实现说明,不是物理绝对值。

配置

插件提供一个显示舍入配置项:

plugins:
  dsh-units:
    maxDecimals: 6

这里的 maxDecimals: 6 只影响返回结果的显示舍入,例如十进制位数或有效数字展示方式。内部计算仍保留完整浮点精度。

适用场景与注意

适合使用这个插件的场景包括:

  1. DSH 智能体需要回答长度、质量、温度、面积、体积、速度、时间等常规单位问题。
  2. 处理数据大小时需要严格区分 MBMiB
  3. 处理油耗时需要在 mpgl/100km 等之间换算。
  4. 处理功率时需要在 kww、不同马力定义之间换算。
  5. 需要在调用前用 list_units 确认单位符号。

使用前需要注意几点:

  1. 插件会随 DSH 插件机制运行,实际执行环境以当前 DSH 进程权限为准。安装前应检查源码、依赖和许可证。
  2. 该插件提供的是算术换算,不判断输入是否有物理意义。例如转换 -10 K 会返回算术结果,物理合理性由调用方负责。
  3. 该插件没有网络、文件系统访问、子进程或代码执行。这个安全模型描述来自插件资料,实际风险仍应结合 DSH 宿主环境判断。
  4. 不要把它当作通用计算引擎;它的范围是单位换算和类别内单位列表。

结尾

dsh-units 解决的是 DSH 智能体里一个很具体的问题:把高频、易错、需要解释的单位换算从心算里拿出来。它的范围不广,但边界清楚:静态单位表、类别内换算、严格校验、结构化结果、零运行时依赖。

GitHub 仓库:

https://github.com/TYEclipse/dsh-units

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜