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

能耗碳计量 dclichang2022/dsh-green-meter

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

给 DeepSeek HarnessDSH做的开源桌面应用:一边用 AI…

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

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

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dclichang2022/dsh-green-meter
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · desktop
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 54 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

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

✗npm 包green-dsh-desktop(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 02:38:06

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 47 处,展示前 45 条)
  • 读取本地文件
    electron/main.js:52
    const HARNESS_NODE_PRESENT = fs.existsSync(HARNESS_NODE)
  • 执行外部命令来自配置/变量
    electron/main.js:56
    void execFile(HARNESS_NODE, ['--version'], { timeout: 5000, windowsHide: true }, (error, stdout) => {
  • 发起网络请求
    electron/main.js:122
    const res = await fetch(url, { signal: AbortSignal.timeout(3000) })
  • 写入本地文件
    electron/main.js:140
    fs.mkdirSync(workspace, { recursive: true })
  • 写入本地文件
    electron/main.js:141
    fs.mkdirSync(logs, { recursive: true })
  • 写入本地文件
    electron/main.js:142
    const logStream = fs.createWriteStream(logFile(), { flags: 'a' })
  • 执行外部命令来自配置/变量
    electron/main.js:157
    harness = spawn(runner, [
  • 读取本地文件
    electron/main.js:302
    stat = fs.statSync(file)
  • 写入本地文件
    electron/main.js:384
    fs.mkdirSync(path.dirname(target), { recursive: true })
  • 写入本地文件
    electron/main.js:385
    fs.writeFileSync(target, rows.join('\n') + '\n', 'utf8')
  • 读取本地文件
    electron/main.js:421
    const text = fs.readFileSync(logFile(), 'utf8')
  • 读取本地文件
    electron/main.js:495
    if (!smoke && shotsDir === '' && !fs.existsSync(credentials)) {
  • 写入本地文件
    electron/main.js:508
    fs.mkdirSync(shotsDir, { recursive: true })
  • 写入本地文件
    electron/dsh-home.js:38
    fs.writeFileSync(probe, '')
  • 删除本地文件
    electron/dsh-home.js:39
    fs.unlinkSync(probe)
  • 读取本地文件
    electron/dsh-home.js:48
    if (fs.existsSync(link)) return
  • 执行外部命令固定命令
    electron/dsh-home.js:55
    const result = spawnSync('cmd', ['/c', 'mklink', '/J', link, target], {
  • 读取本地文件
    electron/dsh-home.js:59
    if (result.status !== 0 && !fs.existsSync(link)) {
  • 写入本地文件
    electron/dsh-home.js:79
    fs.mkdirSync(path.join(inTree, 'green-meter'), { recursive: true })
  • 写入本地文件
    electron/dsh-home.js:85
    fs.mkdirSync(path.join(home, 'green-meter'), { recursive: true })
  • 读取本地文件
    electron/ledger.js:18
    text = fs.readFileSync(file, 'utf8')
  • 读取本地文件
    electron/console-data.js:85
    const parsed = JSON.parse(fs.readFileSync(settingsPath(dshHome), 'utf8').replace(/^ FEFF/, ''))
  • 写入本地文件
    electron/console-data.js:117
    fs.mkdirSync(dshHome, { recursive: true })
  • 写入本地文件
    electron/console-data.js:118
    fs.writeFileSync(path.join(dshHome, 'cordis.patch.yml'), patchYaml(settings), 'utf8')
  • 写入本地文件
    electron/console-data.js:129
    fs.writeFileSync(settingsPath(dshHome), JSON.stringify(next, null, 2) + '\n', 'utf8')
  • 读取本地文件
    electron/console-data.js:176
    text = fs.readFileSync(ledgerFile, 'utf8').replace(/^ FEFF/, '')
  • 执行外部命令来自配置/变量
    electron/console-data.js:349
    execFile(command, finalArgs, { timeout, windowsHide: true }, (error, stdout) => {
  • 读取本地文件
    electron/alerts.js:300
    existing = fs.readFileSync(alertsPath(dshHome), 'utf8').replace(/^ FEFF/, '')
  • 写入本地文件
    electron/alerts.js:318
    fs.mkdirSync(dshHome, { recursive: true })
  • 写入本地文件
    electron/alerts.js:319
    fs.appendFileSync(alertsPath(dshHome), fresh.map(alert => JSON.stringify(alert)).join('\n') + '\n', 'utf8')
  • 读取本地文件
    electron/alerts.js:327
    const lines = fs.readFileSync(alertsPath(dshHome), 'utf8').replace(/^ FEFF/, '')
  • 删除本地文件
    electron/alerts.js:338
    fs.rmSync(alertsPath(dshHome), { force: true })
  • 读取本地文件
    electron/reference-data.js:153
    const parsed = JSON.parse(fs.readFileSync(measuredProfilesPath(dshHome), 'utf8').replace(/^ FEFF/, ''))
  • 写入本地文件
    electron/reference-data.js:161
    fs.mkdirSync(dshHome, { recursive: true })
  • 写入本地文件
    electron/reference-data.js:162
    fs.writeFileSync(measuredProfilesPath(dshHome), JSON.stringify(profiles, null, 2) + '\n', 'utf8')
  • 读取本地文件
    electron/relay.js:29
    return JSON.parse(fs.readFileSync(cachePath(dshHome), 'utf8').replace(/^ FEFF/, ''))
  • 写入本地文件
    electron/relay.js:37
    fs.mkdirSync(dshHome, { recursive: true })
  • 写入本地文件
    electron/relay.js:38
    fs.writeFileSync(cachePath(dshHome), JSON.stringify(cache, null, 2) + '\n', 'utf8')
  • 发起网络请求
    electron/relay.js:108
    const response = await fetch(`${base}/v1/activity`, {
  • 发起网络请求
    electron/relay.js:133
    const response = await fetch(url, {
  • 读取本地文件
    resources/harness/lib/bin.js:126
    const manifest = JSON.parse(readFileSync(fileURLToPath(new URL("../package.json", import.meta.url)), "utf8"));
  • 读取本地文件
    resources/harness/lib/dump-config-D-jtgwY3.js:30
    if (existsSync(loaded.patchPath)) layers.push({
  • 读取本地文件
    resources/harness/lib/plugin-9h8shc4d.js:103
    if (!existsSync(join(dir, "package.json"))) {
  • 执行外部命令固定命令
    resources/harness/lib/plugin-9h8shc4d.js:108
    const result = spawnSync("pnpm", args.map((argument) => anchorPathSpec(argument, process.cwd())), {
  • 写入本地文件
    resources/harness/lib/profile-boot-DG5t9aNs.js:143
    writeFileSync(join(profile.dir, PROFILE_ROOT_FILENAME), PROFILE_ROOT_CONFIG);
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

6 张 · 点击查看大图

功能亮点

  • 实时能耗碳排控制台
  • 测量本地GPU推理
  • 估算云API碳排

DeepSeek Harness 桌面应用,带实时能耗/碳排控制台:测量本地 GPU 推理,按公开系数估算云 API,浪费时告警

README

由 DeepSeek 最新模型翻译生成
Green DSH Desktop 给 DeepSeek Harness(DSH)做的开源桌面应用:一边用 AI 干活,一边看清这次对话花了多少电、排了多少碳、省了多少钱。 无论你跑本地模型,还是接云端 API(DeepSeek / OpenRouter / 自建中转站…),它都能把每一次请求的能耗、碳排和费用算清楚、亮出来,并在烧钱烧碳的时候提醒你。 English · 中文 它能做什么 1. 开箱即用的 DSH 桌面版 - 自带 Node.js 24 运行时和完整 DSH 发行版,装完即用,不需要 Node / pnpm / Python; - 完整的 DSH 对话体验:模型管理、会话、工具调用、技能、子代理、工作流都在; - Windows 安装包 + 便携版(zip 解压即用)。
展开完整文档(README 剩余 1 节)
Green DSH Desktop

给 DeepSeek Harness(DSH)做的开源桌面应用:一边用 AI 干活,一边看清这次对话花了多少电、排了多少碳、省了多少钱。

无论你跑本地模型,还是接云端 API(DeepSeek / OpenRouter / 自建中转站…),它都能把每一次请求的能耗、碳排和费用算清楚、亮出来,并在烧钱烧碳的时候提醒你。

English · 中文

它能做什么

1. 开箱即用的 DSH 桌面版

- 自带 Node.js 24 运行时和完整 DSH 发行版,装完即用,不需要 Node / pnpm / Python;
- 完整的 DSH 对话体验:模型管理、会话、工具调用、技能、子代理、工作流都在;
- Windows 安装包 + 便携版(zip 解压即用)。

2. 能耗 / 碳排控制台(主窗口)

| 页面 | 你能看到什么 |
| 控制台 | 本地碳排、本地能耗(估算与实测并列)、云端碳排(公开系数估算)、已省 API 费用;近 30 天碳排和按任务轮次碳排两张柱状图;硬件实时环图 |
| 会话 | 每个会话的 token、能耗、碳排、电费、省 API 费用 |
| 硬件监测 | NVIDIA 显卡全量遥测(显存 / 使用率 / 温度 / 功耗,多卡支持);核显作为扩展监测;CPU / 内存曲线 |
| 预警 | 超支和异常提醒,见下 |
| 数据源 | 接入 OpenRouter 或自有中转站,拉取真实花费与 token 用量 |
| 参考数据 | 每个系数的出处与年份,全部可查证 |
| 碳台账 | 每一步的 JSONL 明细、实测能耗列、一键导出 CSV |
| 日志 / 设置 | harness 输出、碳强度 / 电价 / API 价格等基线设置 |

3. 两条计量路径(核心设计)

- 本地模型 → 实测:检测到 NVIDIA 显卡后,持续采样功耗并积分,得到真实能耗,并按时间归属到每个请求步骤;需要每个模型自己的系数时,一键标定出本机的 J/token;
- 云端 API → 公开系数估算:云端只能看到 token,因此 token→能耗一律用公开权威系数(不用本地标定去推演云端)。

4. 预警:在烧钱烧碳时提醒你

- 阈值类:单会话能耗 / 费用、近 1 小时 / 24 小时费用、中转站日均花费;
- 异常类:单步能耗离群(稳健 z 分数)、上下文重读(输入:输出比过高,反复重读上下文的无效消耗)、空转 / 重试循环(连续多步几乎没有产出)、缓存命中率偏低;
- 严重级预警同时弹桌面通知。

5. 对话内嵌仪表盘

聊天窗口右上角常驻碳排卡片:本会话碳排 / 能耗 / 电费、已省 API 费用、本地 vs 云端对比、每轮能耗柱状图、全部会话累计。

6. 本地小模型开箱支持

自带 Qwen2.5-0.5B(CPU 推理)的接入脚本和 provider 配置,一条命令起服务,即刻体验"本地模型 + 实测计量"的完整闭环;换更大的模型只需改一行模型路径。

截图

| 控制台总览 | 对话内嵌仪表盘 |
| 控制台总览 | 对话内嵌仪表盘 |

| 硬件监测(NVIDIA 多卡) | 预警 |
| 硬件监测 | 预警 |

| 会话明细 | 数据源(中转站) |
| 会话 | 数据源 |

| 参考数据(系数与出处) | 碳台账明细 |
| 参考数据 | 碳台账 |

下载安装

从 Releases 下载:

| 文件 | 说明 |
| Green DSH Desktop Setup x.x.x.exe | Windows 安装包(可选安装目录,桌面快捷方式) |
| Green DSH Desktop-x.x.x-win.zip | 便携版,解压即用 |

安装包未做代码签名,首次启动 Windows SmartScreen 会拦截一下:更多信息 → 仍要运行。
升级直接运行新版安装包,会话 / 凭据 / 台账 / 设置自动保留。

快速上手(三步)

1. 装好打开 → 首次会提示配置模型(DSH 设置页里填 API Key,或用本地模型);
2. 点「打开对话」干活 → 正常聊天、写代码,什么都不用改;
3. 回到控制台 → 碳排、能耗、费用、轮次图、硬件曲线都在实时刷新;在「设置」里调好电价 / API 价格 / 碳强度,数字就是你的真实口径。

想试本地模型:

powershell -ExecutionPolicy Bypass -File scripts\start-local-model.ps1

然后在应用里选「本地 llama.cpp(Qwen2.5-0.5B)」即可(需先下载模型,见脚本内注释)。

数据与方法(简述)

- 本地:token 用量 → 标定系数 → 能耗(有 NVIDIA 时以实测为准)→ 电网碳强度 → 碳排;
- 云端:token 用量 → 公开系数 → 能耗 → 碳排;
- 费用:API 牌价 vs 本地电费。

所有系数都标注来源与年份:

| 类别 | 数值 | 来源 |
| 中国电网 | 0.5777 kgCO₂e/kWh(2024) | 生态环境部《2024 年电力碳足迹因子》 |
| 美国电网 | 0.3497 kgCO₂e/kWh | US EPA eGRID 2023 |
| 云端 per-token | 0.0006 Wh / 输出 token | Epoch AI 2025 |
| 云端 per-request | 0.24 Wh / 0.03 gCO₂e | Google Cloud 2025-08-21 |
| 本地标定 | H20 请求级拟合(R² ≥ 0.998) | 本项目实验 |

边界说明(诚实优先):无 GPU 实测时的本地数值是 token-profile 估算而非硬件实测;云端数值是基于公开系数的估算,不是厂商实测;碳排 = 能耗 × 电网碳强度,属工程估算,非认证核算。

从源码构建

git clone <本仓库>
cd green-dsh-desktop
npm install

1) 打包 green-meter / 仪表盘插件(需要 DSH 源码 checkout,可用 DSH_CHECKOUT 指定路径)
npm run vendor:plugins

2) 组装内置 harness(npm 安装 DSH 发行版 + 本地插件)
npm run pack:harness

3) 放入 Node 运行时(复制本机 node.exe 到 resources/runtime/)

4) 运行 / 打包
npm start
npm run dist

局限与说明

- 目前主要在 Windows 上开发验证;Electron 跨平台,macOS / Linux 构建路径未验证;
- 本地实测依赖 nvidia-smi(NVIDIA 显卡);无 NVIDIA 时本地数值退化为估算,核显仅作扩展监测(只有使用率);
- 对话数据(会话 / 凭据 / 台账)保存在安装目录的 resources/harness/dsh-home,卸载前请先备份(升级会自动保留)。

致谢

- DeepSeek Harness 与 Cordis —— 本应用是 DSH 的插件化桌面发行版;
- green-meter(本项目作者的能耗计量插件)提供 token-profile 标定;
- llama.cpp —— 本地推理;
- Electron —— 桌面壳;
- 能耗 / 碳排参考数据来自生态环境部、US EPA eGRID、Epoch AI、Google Cloud 的公开披露。

License

MIT
预览分享卡片长什么样 ↓dclichang2022/dsh-green-meter
分享 · DeepSeek Harness Hub
dclichang2022/dsh-green-meter

给 DeepSeek HarnessDSH做的开源桌面应用:一边用 AI…

回到顶部