把 QPCM 兼容网关接成模型来源,分组管理密钥与模型
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add llersakuya/dsh-connect-qpcm-gateway该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · model
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 13 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 6 处,展示前 6 条)
- 读取本地文件lib/index.js:234
const parsed = JSON.parse(await readFile(file, 'utf8')) - 写入本地文件lib/index.js:248
await mkdir(dir, { recursive: true }) - 写入本地文件lib/index.js:251
await writeFile(temporary, JSON.stringify(body, null, 2), { encoding: 'utf8', mode: 0o600 }) - 写入本地文件lib/index.js:252
await rename(temporary, file) - 发起网络请求lib/index.js:334
const response = await fetch(`${cfg.baseURL}/models`, { - 发起网络请求client.js:238
const response = await fetch(path, {
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-credentials@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-llm@deepseek-ai/dsh-llm-pi-ai@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 插件:把兼容 OpenAI 的 QPCM 网关(ai.qpcmqam.cn)接入为 DSH 模型来源,并提供设置面板,可配置 Base URL、API key 和模型选择。
README
由 DeepSeek 最新模型翻译生成dsh-connect-qpcm-gateway
把 https://ai.qpcmqam.cn/v1 这个 OpenAI 兼容网关接成 DSH 的模型来源,并给出一块可以在 Web UI 里操作的面板。
可以接多组:每组有自己的端点、Key 和模型清单,同时出现在模型选择器里。
安装
一条命令,不需要 git、不需要放行构建脚本、不需要装任何工具:
dsh plugin --profile desktop add https://github.com/llersakuya/dsh-connect-qpcm-gateway/releases/download/v0.4.2/dsh-connect-qpcm-gateway-0.4.2.tgz
桌面版用户也可以在 设置 → 插件 → 安装 bundle 里直接粘贴同一个 .tgz 地址。
装完打开 插件 → QPCM 网关接入,粘一次你的 API Key,点「保存并验证」。
目录拉通之后插件会自动接入,模型立刻出现在模型选择器里,不用重启,也不用再去拨那个开关。
展开完整文档(README 剩余 1 节)
dsh-connect-qpcm-gateway
把 https://ai.qpcmqam.cn/v1 这个 OpenAI 兼容网关接成 DSH 的模型来源,并给出一块可以在 Web UI 里操作的面板。
可以接多组:每组有自己的端点、Key 和模型清单,同时出现在模型选择器里。
安装
一条命令,不需要 git、不需要放行构建脚本、不需要装任何工具:
dsh plugin --profile desktop add https://github.com/llersakuya/dsh-connect-qpcm-gateway/releases/download/v0.4.2/dsh-connect-qpcm-gateway-0.4.2.tgz
桌面版用户也可以在 设置 → 插件 → 安装 bundle 里直接粘贴同一个 .tgz 地址。
装完打开 插件 → QPCM 网关接入,粘一次你的 API Key,点「保存并验证」。
目录拉通之后插件会自动接入,模型立刻出现在模型选择器里,不用重启,也不用再去拨那个开关。
为什么用 .tgz 而不是 github: 地址
| | .tgz(推荐) | github:llersakuya/... |
| 需要本机有 git | 不需要 | 需要,否则报 ERR_PNPM_GIT_RESOLVE_FAILED |
| 需要放行 pnpm 构建 | 不需要 | 视 pnpm 策略而定,可能要改 allowBuilds |
| 版本 | 地址里锁死 | 默认跟随 main,每次装到的可能不同 |
git 方式仍然可用,适合想跟最新提交的人:
dsh plugin --profile desktop add github:llersakuya/dsh-connect-qpcm-gateway
改过本插件的 Host 侧代码后,要把它关掉再打开一次才会重新加载:HMR 默认忽略 **/node_modules,而插件正好装在那里。
依赖
本插件不自带 pi-ai 与 dsh-llm-pi-ai,它用的是 Host 里已有的那两份(peerDependencies,且全部标为 optional)。这也意味着它必须跑在装有 @earendil-works/pi-ai 的 DSH 上——正常的桌面版都满足。
多组 API
面板最上面是分组列表。添加一组之后,这一组有自己的:
- Base URL(各组的端点互相独立)
- API Key(存在各自的凭据引用里,互不串用)
- 模型清单(各自的 /models 结果与勾选)
- 接入开关(可以只开其中一组)
各组的模型同时出现在模型选择器里,以路由 id 区分——模型选择器里看到的是 分组名 / 模型名。默认第一组的 id 是 qpcm-gateway(v0.3.x 就用这个,所以老会话里的模型引用不会失效),之后新建的按你填的名字派生。
最多 8 组。这个上限是刻意的:每一组都会往模型选择器里塞条目,没有上限会把那里淹掉。
一组的 Key 只有存进它自己的凭据引用才生效。删除一组会保留它的 Key 引用(不删你磁盘上的密钥),但不再使用。
它做什么
- 在 插件 → QPCM 网关接入 里填 Base URL、存 API Key、拉取模型目录、勾选要提供的模型。
- 打开「接入」开关后,被勾选的模型直接出现在模型选择器里,走
POST {baseURL}/responses(OpenAI Responses 协议,含工具调用、流式、推理档位)。
- 每个模型可以单独调上下文窗口、最大输出 token、输入模态,见下一节。
- 在 设置 → 模型 里,每条连接以它自己的路由 id 出现,和手写 llm-pi-ai 的那几条并列。
按模型自定义
网关的 /models 只给 id 和名字,不给窗口和上限——所以这些数字原本是本插件写死的兜底值。现在每个模型后面都有一行设置:
| 项 | 含义 | 默认 |
| 上下文 | contextWindow,算 token 预算用 | 128000 |
| 最大输出 | maxTokens → 请求里的 max_output_tokens | 留空 = 不声明 |
| 收图 | 是否把 image 加进 input 模态 | 只收文本 |
改完点那一行的保存才生效;有覆盖的模型会带一个「已自定义」标记,点恢复默认可以撤掉。
三个字段都真的影响请求,不是摆设:
- maxTokens 会经 pi-ai 的
clampMaxTokensToContext(model, context, maxTokens) 落到 max_output_tokens,
并且被上下文窗口反向截断——窗口设得比输出上限还小的时候,实际发出去的数字会比填的小。
- input 决定带图请求能不能发。这个网关多数模型不收图,打开后带图会失败,所以默认是关的。
「最大输出」留空是有意的:网关没声明上限,猜一个数字等于把「平台没说」写成「平台说了」。填了就是明确告诉 DSH 你希望的上限。
设置存在插件自己的状态文件里(~/.dsh/state/<profile>/dsh-connect-qpcm-gateway/state.json),不写进你的 llm-pi-ai 配置。
为什么走 /responses 而不是 /chat/completions
这个网关两个端点都通,但 /responses 在实测里多出三样东西:
1. 推理内容以独立 reasoning 条目回来(带 encrypted_content,可整条回放)。
2. reasoning.effort 真的能调:high 在难题上稳定产出 reasoning_tokens 与明文推理摘要,medium 次之。
3. 多轮回放被接受:把上一轮的 reasoning / output_text 原样放回 input,再追加新输入,实测 200;带不带 encrypted_content 都接受。
文本、工具调用、流式、多轮对话、系统提示在 /responses 上逐项验证通过。
推理档位只声明 off / medium / high
thinkingLevelMap 按实测的 reasoning_tokens 定,不是照着 OpenAI 文档抄的:
| 档位 | 实测表现 |
| minimal | 多数模型 0 token,什么都不做 |
| low | 半数模型 0 token |
| medium | 有产出,但部分模型仍为 0 |
| high | 稳定产出明文推理 |
minimal / low 显式钉成 null(不提供)——留着它们等于在菜单里承诺两个多数模型上什么都不做的档位。off 映射到线上字面量 none,五个模型逐个验证 200。
推理明文不是每轮都有
网关的明文推理走 SSE 的 response.reasoning_summary_text.delta,且只在流式请求里发;非流式请求只回 encrypted_content(加密)。即使流式,它也按模型和请求波动——同一模型同一档位两次请求,一次有摘要、一次没有。因此面板不承诺「每轮都看得见思考过程」;reasoning_tokens 在 usage 里始终可靠。
它不做什么
- 不改 profile 里已有的 llm-pi-ai 配置。本插件注册的路由 id 是 qpcm-gateway,与 gpt-2610 / ds-v41-flash / zai 不冲突——registerAdapter 对已占用路由整组拒绝,所以这一点是硬要求。
- 不把 API Key 写进配置、状态文件或日志。Key 只落 owner-only 的 ~/.dsh/.credentials.yaml,引用名默认 QPCM_API_KEY。
- 不提供图像模型。gpt-image-2.5-flare 与 -sunburst 在 /responses 上稳定 502,只在 /images/generations 上 200;而 DSH 的 LLM 接缝没有图像生成能力(PiAiAdapter 上有 prepareCall / stream,没有 generateImages;dsh-llm 里也搜不到相关接口)。列出来只会让模型选择器里出现一个必然失败的条目,所以这些 id 在目录里标为「不是对话模型」,不进候选。它们在 /chat/completions 上同样是 400。
配置怎么分层
| 层 | 位置 | 谁写 |
| 出厂默认 | 本 bundle 的 cordis.patch.yml(以及 profile patch 里的同名行) | 安装时写入;操作者可以在 profile patch 里钉死 |
| 面板状态 | $DSH_HOME/state/<profile>/dsh-connect-qpcm-gateway/state.json | 面板 |
| API Key | ~/.dsh/.credentials.yaml → refs.QPCM_API_KEY | 面板 |
生效值 = 状态文件里有的字段覆盖出厂默认,没有的字段继续跟随 patch。这样面板写路径不会因为写配置而重载本插件(重载会打断正在跑的请求)。
cordis.patch.yml 里的字段
| 字段 | 默认 | 说明 |
| baseURL | https://ai.qpcmqam.cn/v1 | OpenAI 兼容根地址(/responses 挂在其下) |
| displayName | QPCM Gateway | 模型选择器里的显示名 |
| apiKeyEnv | QPCM_API_KEY | 凭据引用名(不是 key 本身) |
| enabled | false | 是否注册成 LLM provider |
| enabledIds | [] | 启用清单,见下 |
| requestTimeoutMs | 30000 | 单次请求超时 |
| cacheSeconds | 60 | 模型目录缓存秒数 |
| allowedHosts | [] | 追加可信 Host 名 |
enabledIds 的三态
| 值 | 含义 |
| [] | 不过滤——目录里每个 chat 模型都提供(新增的模型自动跟上) |
| ["__hide_all__", ...] | 一个都不提供 |
| ["id", ...] | 严格白名单 |
裸 [] 已经被「全部」占了,所以「全不选」必须走哨兵。Host 与客户端读同一个字面量。
面板能做什么
- 源站地址:改 Base URL,或一键恢复默认。改地址会丢掉旧目录(换端点等于换了一个目录)。
- API Key:保存即验证——存完立刻拉一次 /models,成功与否当场显示;也能清除。
- 模型目录:显示 id、显示名、能不能当对话模型用;全选 / 全不选 / 逐个勾选。
- 接入开关:开 / 关 provider 注册,不需要重装插件、不需要重启。
排障
| 现象 | 原因 |
| 目录报 HTTP 401 | key 不对或已失效,重新保存 |
| 目录报 MISSING_CREDENTIAL | 还没存 key |
| 选择器里没有模型 | 「接入」开关没开,或者勾选清单是「全不选」 |
| provider.failed 里提到 peer | 这台 Host 缺 @earendil-works/pi-ai 或 @deepseek-ai/dsh-llm-pi-ai |
| 推理档位菜单里没有 minimal/low | 故意的,见上文「推理档位只声明 off / medium / high」 |
| 某轮没显示思考过程 | 网关只在流式且它愿意的时候发明文摘要;reasoning_tokens 仍计入 usage |
面板里的每一次写操作都是同源请求;Host 侧对 Host / Origin 有围栏,跨站页面拿不到这块面板的读写面。
许可证
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
llersakuya/dsh-connect-qpcm-gateway
把 QPCM 兼容网关接成模型来源,分组管理密钥与模型
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给…
★ 761已汉化DSH
68.7
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 379已汉化DSH
67.8
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1