dsh-calc-tool · DSH 精准计算器插件
专治大模型「算术脑补」与「心算翻车」!给 DeepSeek Harness 的 Agent 配一把零误差、高安全的硬核计算器。
用大模型处理账单、配比、数据统计或代码参数时,最怕什么?
- 一本正经地算错:模型靠概率「猜」出个看似合理的错数,混在报告里坑惨你。
- 思维链里疯狂烧钱:为了算对一道四则运算,模型在 Thinking 里来回列竖式、反复自我怀疑,白白烧掉几百上千个推理 Token。
装上 dsh-calc-tool 后,模型遇到算术直接调 calc 工具,一步到位拿精确结果——既不会算错出幻觉,也不会在思维链里死磕心算浪费你的钱和时间!
⚡ 超级便捷,三步一键安装
不用折腾繁琐配置,直接用 DeepSeek Harness 官方插件面板三步搞定:
- 打开 DeepSeek Harness 桌面端,点击左侧边栏的 「插件」 按钮;
- 点击右上角 「添加插件」;
- 填入下面任意一行,点击安装即可。
npm 包名:
dsh-calc-tool
GitHub 地址:
https://github.com/yhy854/dsh-calc-tool
装完按面板提示重启,新开一个会话让它算个数试试。
💡 随开随关,丝滑掌控:完全接入 DSH 官方插件管理,装好开启即用;平时想用就开,不需要时在插件面板随手一点就能关闭,干净利落。
效果与用法
安装后 Agent 自动解锁 calc 工具,遇到计算自动调用:
calc { expression: "1280 * 0.85 + 42.5" } → 1130.5
calc { expression: "15 + 27 * sqrt(9)" } → 96
支持的计算能力
| 类别 | 支持内容 |
|---|---|
| 基础算术 | + - * / % //(整除)**(幂运算,右结合) |
| 数学函数 | abs ceil floor round trunc sign sqrt cbrt exp log log2 log10 sin cos tan asin acos atan pow hypot max min |
| 常用常量 | PI、E |
| 语法特性 | 括号优先级、一元正负号、科学计数法(如 1.5e3) |
角度与弧度:三角函数默认使用弧度;算角度只需写 sin(30 * PI / 180)。
运算优先级:**(右结合) > 一元 ± > * / % // > + -。
为什么比市面上随便写的计算器安全得多?
很多简陋的计算器插件直接用 eval() 或 new Function() 配合正则过滤——这是巨大的安全漏洞!攻击者(或被提示词注入的模型)只需构造 constructor.constructor("return process")() 就能直接突破沙箱执行任意系统命令。
本插件采用纯手写词法分析 + 递归下降解析器,彻底实现零代码执行风险:
- 0 eval、0 new Function:绝不走任何 JS 动态代码求值捷径。
- 严格语法白名单:词法层只认数字、白名单函数/常量、运算符、括号和逗号;遇到引号、分号、反引号、
{}、[]直接报错拦截,绝不搞「清洗后勉强执行」。 - 防原型链污染(已通过回归测试锁死):白名单字典使用
Object.create(null)创建(彻底剥离原型链),查表强制使用Object.hasOwn而非in运算符——防止__proto__、constructor、toString蒙混过关(早期版本曾用in被测试套件抓出漏洞,现已彻底焊死并配有 7 条专项回归测试)。 - 防卡死护栏:表达式上限 4096 字符、括号嵌套上限 64 层、函数参数上限 32 个,结果非有限数字(
NaN/Infinity)一律拒绝。
友好的结构化报错(帮模型秒纠错,不瞎重试)
算式写错时,插件会返回清晰的错误码和位置,模型看一眼就能自己改对,不会卡在死循环里盲目重试:
| 错误码 | 含义 |
|---|---|
CALC_PARSE_ERROR |
语法错误(精准附带出错字符位置) |
CALC_UNKNOWN_IDENTIFIER |
调用了白名单之外的函数或变量名 |
CALC_DIVIDE_BY_ZERO |
除数为 0 |
CALC_NOT_FINITE |
结果溢出或对负数开偶次方 |
CALC_LIMIT_EXCEEDED |
超出长度 / 嵌套深度 / 参数个数上限 |
CALC_BAD_ARGUMENT |
传入参数类型或数量错误 |
已知边界(实话实说)
- IEEE 754 双精度浮点特性:遵循 JavaScript 标准双精度浮点,
0.1 + 0.2会得出0.30000000000000004。需要保留固定小数位时请配合round()或自行四舍五入。 - 安全整数范围:±9e15(即
Number.MAX_SAFE_INTEGER),超大整数超出此范围会有精度损失。 - 定位纯粹:专注于数值计算,不支持符号代数、矩阵运算或解方程。
测试覆盖
运行测试:
node test/evaluate.test.mjs
内置 43 条严苛测试用例,全量覆盖:
- 数值正确性与运算符优先级(16 条)
- 恶意攻击载荷拦截:
constructor.constructor链、process.exit、globalThis、require、模板字符串、分号注入、括号注入(16 条) - 原型链污染回归测试:
__proto__、constructor、toString、valueOf、hasOwnProperty(7 条) - 资源上限守卫:超深括号嵌套、超长表达式轰炸(2 条)
- 参数异常校验(2 条)
兼容性
| DSH 内核 | 状态 |
|---|---|
0.2.x |
完美兼容(peerDependencies 写 >=0.2.0-0,覆盖 rc 预发布版) |
⚠️
peerDependencies范围请保持>=0.2.0-0不要乱改。写成^0.1.x会展开成<0.2.0-0从而把0.2.0-rc.1排除掉,导致 DSH 预检静默禁用插件。
许可
MIT
No comments yet. Be the first to write one.