wangxuewangxue98/dsh-motor-ai-l0

dsh-motor-ai-l0

电机 AI 辅助设计插件:需求解析 → 参数识别 → 候选矩阵 → Top10 校验。L0 纯 JS、零求解器依赖,毫秒级广筛候选并给出交给 L1/L2 精算工具的载荷;可作为本地 agent 预设与 Cordis 插件使用。L1(RMxprt)与 L2(Motor-CAD)在本版本中仅预留接口,层级总闸设为 l0 以上会立即报错。

待分类dsh-plugin-bundledsh-plugin-desktopdsh-plugin-market

电机AI辅助设计软件插件

dsh-motor-ai-l0 · DSH 插件(bundle) · 纯 JS,零求解器依赖

**不装 RMxprt / Motor-CAD / Python / license,把 120 个候选在十几毫秒内压成 Top5,
只把求解器时间花在最值得的那几个上。**

📁 算例集:3 个真实算例(含反例)→ examples/ · 能力边界

覆盖电机设计全流程:需求解析 → 参数识别 → 候选矩阵 → L0/L1/L2 解算 → Top10 与校验 → 完整方案。 L0 用代理模型与经验公式毫秒级广筛候选;L1 RMxprt、L2 Motor-CAD 为可选精算工具。 装完即用 —— 无需预装 RMxprt / Motor-CAD / Python,无需 license。

快速开始

# 安装(dsh 未进 PATH 时用 npx)
npx -y @deepseek-ai/dsh plugin --profile web add dsh-motor-ai-l0

# 离线自检(无需 DSH Runtime,裸 Node 即可)
node scripts/verify.mjs

标准流水线(顺序很重要)

  1. motor_param_matrix —— 由功率 / 转速 / 电压生成候选参数矩阵
  2. motor_design_validate —— 批量物理校验,剔除 failed
  3. motor_l0_estimate —— 对剩余候选排序,输出 TopN 与 L1 交接载荷
⚠️ 推荐用聚合工具 `motor_l0_pipeline` 一步跑完上述三步链。DSH 对话上下文有 2000 行读取上限:
当 count=120 时,单 motor_param_matrix 就回显 4000+ 行,模型静默丢行后计数对不上 120 还无报错——
这是「让模型亲手编排三步链」的结构性风险(三案例实战全中)。聚合工具在插件进程内跑完三步链,
只回吐紧凑摘要(计数自检 + Top10 + 交接载荷 + 文件交接路径),上下文恒 < 2000 行,从根上绕开截断。
只有在单独调试某一步(查完整校验报告、手调 failed 阈值)时才拆开用三个独立工具。
⚠️ motor_l0_estimate 只接受 params_list(每项含 16 个 L1 顶层字段),不接受 power_kw / speed_rpm 这类散装命名参数 —— 请先用第 1 步生成矩阵再传入。
L0 结果只用于排序与相对比较,不用于绝对值交付;输出恒带 solve_mode='l0' 标记,最终结论须由 L1/L2 给出。
两条通道的分工(v0.2.2)
| 通道 | 触发 | 输出 | 适用 |
|---|---|---|---|
| 公式通道(默认) | l0Mode: 'auto' / 'formula' | 效率 + 温升 + 损耗拆分 + 齿/轭磁密 + 功率因数 + 可行判定 —— 字段完整 | 日常排序与相对比较 |
| 代理通道(可选增强) | l0Mode: 'surrogate' | 仅效率(温升/损耗/磁密不输出) | 异步机效率排序的交叉参考 |
代理模型 v2.3.0-fixseg(在 v2.2.0 基础上用全量 6029 条真实 RMxprt 结果重训,特征扩为含 poles 的 5 维;designs.db.l0_residuals,fault=0,效率 ∈ [50,99]),按机座外径分三段:
| 机种 | 样本 OD 覆盖 | 样本数 | 5 折 CV R² | MAE |
|---|---|---|---|---|
| 异步 small / medium / large | 150.6–756.5 / 151.3–1085.4 / 1196–2651 mm | 1291 / 2578 / 1276 | 0.652 / 0.438 / 0.670 | 1.44 / 3.29 / 4.53 pp |
| PMSM small / medium / large | 612–1178 mm(均为大机座) | 367 / 745 / 355 | ≤ 0.31 → 自动降级公式通道 | — |
因此 PMSM 与段外样本始终走公式通道;auto 默认走字段完整的公式通道。启用代理时输出带 surrogate_experimental: true,且置信度低于阈值(surrogateConfidenceThreshold,默认 0.4)自动降级 —— 不会硬给一个数。
⚠️ 代理通道可能离线 / 覆盖率 0:部分部署环境代理模型文件缺失或加载失败时,会静默降级到公式通道(字段完整、始终可用)。公式通道是「未标定默认通道」(见「已知精度边界」),其输出 confidence 现为 0.5 的明确标记值(v0.2.7 前恒为 1.0,会误导下游采信绝对值),仅代表「未标定、可排序不可绝对值采信」,不等于高置信预测;代理通道输出带逐预测 confidence(低于阈值自动降级)。经验回灌闭环(tools/feedback/experience-hub.mjs)的 shadow 若给出显著更优的影子模型,即视为触发正式重训的信号——请勿把 confidence: 0.5 的公式结果当终值。

能力边界

层级 · 引擎 · 速度 · 范围 · 付费 · 本版本状态 L0 · 代理模型 + 经验公式 · 毫秒级 · 全部方案 · free · ✅ 已交付核心 L1 · RMxprt 磁路法(可选) · 1–3s/方案 · TopN · vip · ⛔ 预留(接口已留) L2 · Motor-CAD 有限元(可选) · ~200s/方案 · Top3 · flagship · ⛔ 预留(接口已留)

本版本做参数矩阵生成、物理校验、L0 估算排序、TopN 交接与回归质量门;不做 RMxprt / Motor-CAD 调用、MCP Server、Python 桥接、多目标优化。

工具

工具 · 作用 · 关键入参 motor_l0_pipeline · 推荐入口:三步链聚合,只回紧凑摘要 + 文件交接,根治 2000 行截断 · power_kw speed_rpm count top_n write_handoff motor_param_matrix · 生成候选参数矩阵(聚焦扫描,非笛卡尔积) · power_kw speed_rpm voltage_v poles count motor_l0_estimate · 毫秒级估算 + 排序 + L1 交接载荷(默认 Top10) · params_list top_n sort_by motor_design_validate · 17 条物理一致性校验,返回 passed/warning/failed · params_list escalate bg_caliber

入参别名:power→power_kw、rpm→speed_rpm、volt→voltage_v。 sort_by 白名单:efficiency torque_density temp_rise total_loss power(temp_rise、total_loss 升序,越小越好)。

示例(15kW / 1460rpm / 380V 异步,实跑 16 ms)

$ motor_param_matrix       { power_kw: 15, speed_rpm: 1460, voltage_v: 380, motor_type: 'induction', count: 120 }  →  120 候选
$ motor_design_validate    17 条物理校验  →  0 passed / 80 warning / 40 failed
$ motor_l0_estimate        sort_by: 'efficiency'  →  Top5,OD310 / 6 极 / η=95.17%

# · OD (mm) · L (mm) · 极数 · 槽数 · 效率 (%) · 温升 (K) · 轭磁密 (T) · 总损耗 (W) 1 · 310 · 226.4 · 6 · 72 · 95.17 · 14.6 · 1.39 · 604 2 · 327 · 216.6 · 6 · 72 · 95.02 · 14.6 · 1.38 · 628 3 · 278 · 187.1 · 6 · 72 · 94.94 · 20.5 · 1.38 · 642 4 · 343 · 206.7 · 6 · 72 · 94.89 · 14.7 · 1.38 · 650 5 · 294 · 177.2 · 6 · 72 · 94.81 · 20.5 · 1.38 · 663

→ 这 5 个方案直接作为 L1(RMxprt)的入参,而不是把 120 个全丢给求解器。 完整算例、复现命令与另外两个工况(75kW 异步、200kW 高速 PMSM 反例)见 `examples/`。

配置

配置位于 cordis.patch.yml(查看:npx -y @deepseek-ai/dsh --profile web --dump-config)。最常用四项:

配置项 · 默认 · 说明 level · 'l0' · 层级总闸。设为 l1/l2 立即抛错(快速失败,杜绝静默降级) l0Mode · 'auto' · formula 纯公式(字段完整)/ surrogate 代理模型(仅输出效率)/ auto = 公式通道,段外与低置信度自动降级 surrogatePath · 'models/l0_surrogate_family.json' · 代理模型路径(v2.3.0-fixseg) surrogateConfidenceThreshold · 0.4 · 代理置信度门限,低于此值降级公式 efficiencyCap · 96 · 效率封顶(与 L1 同口径,避免两层排序跳变)。v0.2.4 起仅钳展示值 efficiency,排序按 efficiency_raw(未封顶真值) insulationClass · 'F' · 绝缘等级,决定温升限值(B=80K / F=105K / H=125K)。v0.2.5:行内 insulation_class 优先于本项 line_freq_hz · 50 · 电源频率 (Hz),合法区间 20~400Hz。60Hz 电网与 VFD 变频工况必须设置,否则 V16 按 50Hz 判超同步(4极@1500rpm 会形成假断崖)。非法值判 V18 failed,不静默回落

其余配置项(本地统计 usageLog;L0 运行 surrogatePath / surrogateConfidenceThreshold / maxMatrixSize / topNPreview / tempRiseRange / airGapFluxT / highSpeedRpm;脱敏回传 telemetryEnabled / telemetryEndpoint / telemetryBatchSize / telemetryIntervalSec / sessionTelemetry)见 docs/ENGINEERING.md 与本文「脱敏聚合指标回传」节。

⚠️ tempRiseRange 命名待议:它对齐 L1 max_temp 的钳位区间(°C),不是 L0 温升(K),拟改 maxTempClamp。

用量统计(本地,隐私安全)

每次工具调用向 ~/.dsh/storages/dsh-motor-ai-l0/usage.jsonl 追加一行元数据:

{"ts":"2026-09-22T06:40:12.345Z","tool":"motor_l0_estimate","ok":true,"elapsed_ms":2,"n":20,"failed":0,"sort_by":"efficiency","top_n":10}
  • 只记次数 / 耗时 / 规模 / 成败,不记设计参数与结果内容 —— 行业 Know-how 不落盘
  • 开关:配置项 usageLog(默认开);所有写入静默降级,绝不影响工具调用
  • 数据可自行聚合(周期 / 命中率 / 失败率),也可作为社区统计面板

(dsh-usage-statistics-panel、dsh-usage-unified 等 DSH 社区插件)的本地数据源搭配使用

  • 累积的真实工况分布后续直接服务公式系数标定与代理模型训练

脱敏聚合指标回传(显式可选,默认关闭)

在本地 usage.jsonl 之上,可选地把「按工具聚合的统计量」回传到你指定的端点 (如管理端 /api/admin/dsh-plugins//usage-report)。这是显式 opt-in:

配置项 · 默认 · 说明 telemetryEnabled · false · 回传总开关。须为 `true` 且 `telemetryEndpoint` 非空才生效 telemetryEndpoint · '' · 回传目标 URL(POST JSON);空 = 不外发 telemetryBatchSize · 50 · 单批最多携带的用量记录条数(分批推进,失败不推进、下批重报) telemetryIntervalSec · 300 · 回传周期(秒);0 = 仅进程退出时 flush 一次 sessionTelemetry · 'auto' · 是否顺带挂 DSH Runtime sessionTelemetry 瀑布(运行时探测,不静态 inject)

合规底线(与 DSH 生态遥测规范一致):

  • 默认全关,不配置 = 零外发(本地 usage.jsonl 照记,行为与 0.1.4 逐字节一致)
  • 只回传白名单聚合统计量(调用次数 / 成败 / 耗时分布 / 规模总和 / 成功速率 / 来源版本 /

平台 OS);绝不包含设计参数正文、结果明细(效率/温升/损耗)、提示词、工作目录、密钥

  • 逐条明细只保留在本机;error 字段截断到 80 字并去换行/路径,避免夹带参数/密钥
  • 回传是 fire-and-forget:网络/超时/拒绝都静默降级,绝不影响工具主流程

启用示例(cordis.patch.yml):

telemetryEnabled: true
telemetryEndpoint: 'http://127.0.0.1:5000/api/admin/dsh-plugins/motor-ai-l0/usage-report'
telemetryIntervalSec: 300

免费额度与联网行为(默认开启,与遥测相互独立)

⚠️ 本插件有两条相互独立的「对外」通道,默认状态不同,请分别看待:
- 遥测回传(telemetryEnabled / designExperienceUpload):默认 关闭,不配置 = 零外发(见上节)。
- 每日免费额度(freeQuotaEnabled,本节):默认 开启,但计数与放行完全在本地完成,
后端不可达也不影响使用。

v0.5.0 语义升级(important)

闸门从「后端决定 + 断网放行」改为 「本地为准的硬闸 + 非阻塞旁路遥测」。原因是一条实测到的事故级缺陷:

旧实现 checkFreeQuota 里是 await fetch(...) + 4s 超时。一旦 commerceBackendUrl 指向一个
在中国大陆不可达的地址(实测 *.workers.dev 被 DNS 污染、TCP 443 直连超时),
国内用户每次工具调用都要白等 4 秒才拿到放行 —— 限流没生效,延迟先炸了。

现在的行为:

  • 每日 10 次硬闸(本地计数,fail-closed):默认 10 次/天,按本地自然日重置。

计数只认本地 free-quota.json,断网也拦——否则「分发出去即失联」时闸门形同虚设。

  • 非阻塞旁路遥测:若 config.commerceBackendUrl / config.backendUrl / env.DSH_BACKEND_URL

已显式配置,插件会顺手 POST /api/dsh/free-call(载荷 { plugin_id, device_id })做旁路计数, 但这是 fire-and-forget,调用链不等待(实测后端挂死时闸门 1ms 返回)。 未配置地址 ⇒ 一个网络请求都不发,不再向 http://127.0.0.1:5000 打无意义请求。

  • 后端不再决定放行:即使后端返回 allowed: false,本地未超限就照常放行(旧版会拦)。
  • 与完整版共用一本账:配额文件路径 $DSH_HOME/storages/dsh-motor-ai/free-quota.json

(与完整版 lib/license.mjs:52 的激活态同目录同文件),同机上 l0 与完整版不会分裂成两本。

  • device_id = sha256(hostname|platform|arch).slice(0, 16)——以主机名 + 平台 + 架构派生的设备指纹,

与完整版逐字节一致,用于后端归并同一台机器的额度账。

💡 「出厂即孤岛」已不再是问题:每日 10 次闸门现在完全不依赖后端,装完即生效。
是否部署接收端只影响两件事——① 匿名使用数据(次数/成败/耗时)是否回流;② 换机后额度能否归并。