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

推理服务诊断 xiciyang/inference-diagnose

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

采集脱敏证据并离线定位推理服务故障根因

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add xiciyang/inference-diagnose
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件
查看扫描证据(共 56 处,展示前 50 条)
  • 读取本地文件
    src/engine/loop-controller.js:113
    if (!existsSync(machinePath)) {
  • 读取本地文件
    src/engine/loop-controller.js:116
    const m = parse(readFileSync(machinePath, 'utf8'))
  • 读取本地文件
    src/governance/audit.js:243
    const stream = createReadStream(path, { highWaterMark: 4 * 1024 * 1024 })
  • 读取本地文件
    src/primitives/abstraction-layer.js:36
    if (!existsSync(p)) continue
  • 读取本地文件
    src/primitives/assets-hash.js:39
    if (!existsSync(dir)) return
  • 读取本地文件
    src/primitives/assets-hash.js:40
    for (const name of readdirSync(dir)) {
  • 读取本地文件
    src/primitives/assets-hash.js:44
    st = statSync(p)
  • 读取本地文件
    src/primitives/assets-hash.js:68
    h.update(readFileSync(p))
  • 读取本地文件
    src/primitives/assets-hotloader.js:42
    buf = readFileSync(f.path)
  • 读取本地文件
    src/primitives/consistency-rules.js:32
    if (!existsSync(p)) {
  • 读取本地文件
    src/primitives/consistency-rules.js:38
    doc = parse(readFileSync(p, 'utf8'))
  • 读取本地文件
    src/primitives/consistency-rules.js:244
    if (!existsSync(p)) {
  • 读取本地文件
    src/primitives/consistency-rules.js:256
    doc = JSON.parse(readFileSync(p, 'utf8'))
  • 读取本地文件
    src/primitives/desensitizer.js:21
    if (!existsSync(dir)) return rulesUnavailable(`缺少目录 ${RULES_DIR}/`)
  • 读取本地文件
    src/primitives/desensitizer.js:24
    files = readdirSync(dir).filter((f) => f.endsWith('.yaml') || f.endsWith('.yml')).sort()
  • 读取本地文件
    src/primitives/desensitizer.js:35
    const doc = parse(readFileSync(join(dir, f), 'utf8'))
  • 读取本地文件
    src/primitives/dimension-loader.js:24
    return JSON.parse(readFileSync(path, 'utf8'))
  • 读取本地文件
    src/primitives/dimension-loader.js:36
    if (!existsSync(cfgPath)) {
  • 读取本地文件
    src/primitives/dimension-loader.js:67
    if (!existsSync(p)) {
  • 读取本地文件
    src/primitives/dimension-loader.js:72
    const doc = parse(readFileSync(p, 'utf8'))
  • 读取本地文件
    src/primitives/dimension-loader.js:203
    if (!existsSync(dir) || !statSync(dir).isDirectory()) continue
  • 读取本地文件
    src/primitives/dimension-loader.js:203
    if (!existsSync(dir) || !statSync(dir).isDirectory()) continue
  • 读取本地文件
    src/primitives/regression-rules.js:28
    const doc = parse(readFileSync(p, 'utf8'))
  • 读取本地文件
    src/primitives/regression-rules.js:57
    if (!existsSync(p)) {
  • 读取本地文件
    src/primitives/root-cause-rules.js:70
    if (!existsSync(p)) {
  • 读取本地文件
    src/primitives/root-cause-rules.js:75
    const doc = parse(readFileSync(p, 'utf8'))
  • 读取本地文件
    src/primitives/scope-resolver.js:44
    if (!existsSync(p)) {
  • 读取本地文件
    src/primitives/scope-resolver.js:50
    const doc = parse(readFileSync(p, 'utf8'))
  • 读取本地文件
    src/primitives/script-composer.js:21
    if (!existsSync(dir)) return { ok: false, reason: `缺少目录 ${TEMPLATE_DIR}/` }
  • 读取本地文件
    src/primitives/script-composer.js:22
    const files = readdirSync(dir).filter((f) => f.endsWith('.yaml') || f.endsWith('.yml')).sort()
  • 读取本地文件
    src/primitives/script-composer.js:27
    const doc = parse(readFileSync(join(dir, f), 'utf8'))
  • 读取本地文件
    src/session/closure-tracker.js:32
    if (existsSync(parent)) {
  • 读取本地文件
    src/session/closure-tracker.js:33
    const st = statSync(parent)
  • 写入本地文件
    src/session/closure-tracker.js:36
    mkdirSync(dir, { recursive: true })
  • 写入本地文件
    src/session/closure-tracker.js:38
    writeFileSync(probe, String(Date.now()))
  • 删除本地文件
    src/session/closure-tracker.js:39
    rmSync(probe, { force: true })
  • 读取本地文件
    src/session/closure-tracker.js:97
    if (existsSync(p)) {
  • 读取本地文件
    src/session/closure-tracker.js:99
    staleMemory = JSON.parse(readFileSync(p, 'utf8'))
  • 写入本地文件
    src/session/closure-tracker.js:116
    writeFileSync(tmp, JSON.stringify(obj, null, 2))
  • 写入本地文件
    src/session/closure-tracker.js:117
    renameSync(tmp, target)
  • 删除本地文件
    src/session/closure-tracker.js:120
    try { rmSync(tmp, { force: true }) } catch { }
  • 读取本地文件
    src/session/closure-tracker.js:137
    for (const f of readdirSync(dir)) {
  • 读取本地文件
    src/session/closure-tracker.js:154
    if (existsSync(p)) {
  • 写入本地文件
    src/session/closure-tracker.js:168
    writeFileSync(tmp, JSON.stringify(obj, null, 2))
  • 写入本地文件
    src/session/closure-tracker.js:169
    renameSync(tmp, target)
  • 删除本地文件
    src/session/closure-tracker.js:172
    try { rmSync(tmp, { force: true }) } catch { }
  • 删除本地文件
    src/session/closure-tracker.js:280
    rmSync(tmp, { force: true })
  • 读取本地文件
    src/verification/hash-binder.js:11
    if (!existsSync(path)) return null
  • 读取本地文件
    src/verification/hash-binder.js:12
    return 'sha256:' + createHash('sha256').update(readFileSync(path)).digest('hex').slice(0, 32)
  • 读取本地文件
    src/verification/hash-binder.js:22
    pluginVersion = JSON.parse(readFileSync(join(pkgRoot, 'package.json'), 'utf8')).version || '0.0.0'
扫描于 2026/10/31(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

从证据诊断推理服务:生成脱敏采集脚本,离线解析,按根因排序并给出证伪条件,只补采缺失部分。哈希链审计;五个只读 DSH 工具。

README

由 DeepSeek 最新模型翻译生成
@xiciyang/inference-diagnose 用证据诊断推理服务,不靠猜——证据不足时,就直说「未确认」。 生成采集脚本 → 离线解析脱敏报告 → 给出按优先级排序的根因和修复方案 → 修复失败,就只补采缺失的探针,再和上一轮做 diff。 全程离线、去标识化、审计哈希链;framework × runtime × hardware 组合缺规则时,直接 fail-closed。 - 日志不出本机:采集在用户机器上跑,解析和诊断都在内存里完成,不走云端往返。 - 证据驱动:每条结论都带严重度、置信度和证伪条件;「未确认」也是有效结论。 - 三种模式:服务故障(A)、相对客户基线的劣化(B)、一致性 / 非确定性(C)。 - 五个工具,全部 risk: read——不写盘、不需要沙箱、不需要确认令牌。 安装 git clone https://github.com/xiciyang/inference-diagnose.git cd inference-diagnose && bash scripts/build.sh dsh plugin --profile <name> add . 尚未发布到 npm;按上面的源码路径装完,重启生效。 要求 Node ≥ 20,已在本机 DSH 0.2.0-rc.2 上验证。
展开完整文档(README 剩余 1 节)
@xiciyang/inference-diagnose

用证据诊断推理服务,不靠猜——证据不足时,就直说「未确认」。

生成采集脚本 → 离线解析脱敏报告 → 给出按优先级排序的根因和修复方案 → 修复失败,就只补采缺失的探针,再和上一轮做 diff。
全程离线、去标识化、审计哈希链;framework × runtime × hardware 组合缺规则时,直接 fail-closed。

- 日志不出本机:采集在用户机器上跑,解析和诊断都在内存里完成,不走云端往返。
- 证据驱动:每条结论都带严重度、置信度和证伪条件;「未确认」也是有效结论。
- 三种模式:服务故障(A)、相对客户基线的劣化(B)、一致性 / 非确定性(C)。
- 五个工具,全部 risk: read——不写盘、不需要沙箱、不需要确认令牌。

安装

git clone https://github.com/xiciyang/inference-diagnose.git
cd inference-diagnose && bash scripts/build.sh
dsh plugin --profile <name> add .

尚未发布到 npm;按上面的源码路径装完,重启生效。

要求 Node ≥ 20,已在本机 DSH 0.2.0-rc.2 上验证。

从源码构建:

bash scripts/build.sh # 27 个文件 → lib/
node tests/run.mjs # 30 spec,无 GPU / 无容器 / 无网络

用法

在会话里直接调用五个工具(裸名,无 inference_ 前缀):

| 工具 | 作用 |
| generate_collect_script | 生成内嵌脱敏的采集脚本(在用户自己的机器上执行,本插件不代执行) |
| parse_collect_report | 解析已脱敏报告 → 结构化证据(全程内存,明文不落盘) |
| diagnose_service | A 范式:服务异常(崩溃/启动失败/挂起/被外部杀/资源耗尽/输出异常) |
| diagnose_regression | B 范式:相对客户基线的性能/精度劣化(无基线则退化为定性诊断) |
| diagnose_consistency | C 范式:一致性/非确定性 |

典型链路:generate_collect_script → 用户在目标机执行 → parse_collect_report → diagnose_service;修复失败后,用返回的 nextSteps 只补采缺失探针,再调一次 diagnose_service(带 priorRound)看 diff。

配置

| 变量 | 作用 | 默认 |
| INFERENCE_DIAGNOSE_ROOT | 审计链与运行状态根 | ~/.ai-infra |
| DSH_HOME | 会话存储根 | ~/.dsh |
| INFERENCE_WORKSPACE | 跑「与兄弟插件工具名不重名」检查时的源码目录 | 未设置则跳过该检查 |
| SPEC_ROOT | 设计文档仓(门禁 2–4) | 未设置则跳过 |

三维词表是 L1 数据:assets/config/dims.json + assets/dimensions/<kind>/<id>.yaml。
新增一个维度取值 = 加一个 YAML + 在 dims.json 登记 + 配规则文件;缺规则文件会让该组合 fail-closed(ERR_ROOTCAUSE_RULES_NOT_LOADED),不会静默降级。

framework:mindie(Ascend)· vllm;runtime:docker; hardware:ascend-arm · gb10 · nvidia · cpu。

治理面

- 风险分级:五个工具全部 risk: read / sandbox: none / confirmation: not-required。
声明面在 manifest.yaml(给人/审计看)与 src/governance/risk.js(给代码看),由 tests/unit/governance.spec.mjs 断言逐工具相等,并与实际注册工具名双向一致。
- 审计哈希链:每次调用追加到 $INFERENCE_DIAGNOSE_ROOT/logs/audit/inference-diagnose/<YYYY-MM-DD>.jsonl; hash = sha256(canonicalJson(record 去掉 hash)),prevHash 首尾相接,只追加(O_APPEND + 0600)。
记录只存参数摘要与参数名,绝不存参数值。
- 复算:node scripts/verify-audit.mjs [--root R] [--day D] [--tail N],链损坏 exit 1。

兼容与门禁

- DSH bundle:已声明 dsh.bundle.patch + engines.dsh;entry id 为 inference-diagnose,npm 名为 @xiciyang/inference-diagnose。
- node tests/run.mjs:30 个 spec 全部通过(本机实测),只收集 tests/unit/ 与 tests/integration/。
- bash scripts/verify-all.sh:spec 套件 +(可选)状态机穷举与兄弟仓契约;缺少外部仓时显式 SKIP,不伪造通过。
- 真机端到端脚本在 tests/realmachine/,不进 CI(见其 README)。

许可

BSD-3-Clause。见 LICENSE。
预览分享卡片长什么样 ↓xiciyang/inference-diagnose
分享 · DeepSeek Harness Hub
xiciyang/inference-diagnose

采集脱敏证据并离线定位推理服务故障根因

回到顶部