多 Key 自动轮换,失败切换并冷却恢复
35.3/100
综合分
7
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add xiaozhe7772222/dsh-api-key-pool该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 78 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-api-key-pool(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 17:43:47
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 10 处,展示前 10 条)
- 读取本地文件lib/index.js:52
if (!existsSync(SETTINGS_FILE)) return false - 读取本地文件lib/index.js:53
const raw = readFileSync(SETTINGS_FILE, 'utf8') - 读取本地文件lib/index.js:67
try { return existsSync(CONFIG_FILE) ? JSON.parse(readFileSync(CONFIG_FILE, 'utf8')) : {} } catch { return {} } - 读取本地文件lib/index.js:67
try { return existsSync(CONFIG_FILE) ? JSON.parse(readFileSync(CONFIG_FILE, 'utf8')) : {} } catch { return {} } - 写入本地文件lib/index.js:77
mkdirSync(dirname(CONFIG_FILE), { recursive: true }) - 写入本地文件lib/index.js:82
writeFileSync(CONFIG_FILE, JSON.stringify(out, null, 2), 'utf8') - 读取本地文件lib/index.js:90
const raw = readFileSync(SETTINGS_FILE, 'utf8') - 读取本地文件lib/index.js:173
const raw = readFileSync(SETTINGS_FILE, 'utf8') - 写入本地文件lib/index.js:205
writeFileSync(SETTINGS_FILE, out.join('\n'), 'utf8') - 发起网络请求lib/client.js:41
const r = await fetch(url, opts)
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-llm@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 多Key轮询
- 故障自动转移
- 冷却与恢复
DeepSeek Harness 的 API Key 轮换池:多 Key 轮询、401/403/429 自动故障转移、冷却与恢复、Web UI 管理面板
README
由 DeepSeek 最新模型翻译生成dsh-api-key-pool
API Key 轮换池插件 · 适用于 DeepSeek Harness (DSH) 的 API Key 轮换池插件
🐧 由小哲设计与构建 (@xiaozhe7772222)
License: MIT
DSH
Node
Author
多 Key 自动轮换 · 失败自动切换 · 冷却恢复 · Web 管理面板
多 Key 轮询 · 自动故障转移 · 冷却与恢复 · Web UI 面板
✨ 功能特性
| 功能 | 描述 |
| 🔄 轮询轮换 | 每个提供商支持多个 Key,按请求轮换以实现负载均衡 |
| 🛡️ 自动故障转移 | Key 因 401 / 403 / 429 失败 → 自动标记为不健康,由下一个 Key 接管 |
| ⏱️ 冷却与恢复 | 失败的 Key 进入指数退避冷却(默认 30 秒),到期后自动重新加入轮换 |
| 🌐 Web 管理面板 | DSH Web UI → 设置 → 插件 → API Key Pool:添加/删除 Key、查看健康状态、重置冷却 |
| 🔒 Key 掩码 | REST API 仅暴露掩码后的 Key(sk-abc1234),绝不暴露完整密钥 |
| 💾 持久化配置 | 通过 Web UI 添加的 Key 会持久化到 pool-config.json,重启后依然保留 |
展开完整文档(README 剩余 1 节)
dsh-api-key-pool
API Key 轮换池插件 · 适用于 DeepSeek Harness (DSH) 的 API Key 轮换池插件
🐧 由小哲设计与构建 (@xiaozhe7772222)
License: MIT
DSH
Node
Author
多 Key 自动轮换 · 失败自动切换 · 冷却恢复 · Web 管理面板
多 Key 轮询 · 自动故障转移 · 冷却与恢复 · Web UI 面板
✨ 功能特性
| 功能 | 描述 |
| 🔄 轮询轮换 | 每个提供商支持多个 Key,按请求轮换以实现负载均衡 |
| 🛡️ 自动故障转移 | Key 因 401 / 403 / 429 失败 → 自动标记为不健康,由下一个 Key 接管 |
| ⏱️ 冷却与恢复 | 失败的 Key 进入指数退避冷却(默认 30 秒),到期后自动重新加入轮换 |
| 🌐 Web 管理面板 | DSH Web UI → 设置 → 插件 → API Key Pool:添加/删除 Key、查看健康状态、重置冷却 |
| 🔒 Key 掩码 | REST API 仅暴露掩码后的 Key(sk-abc1234),绝不暴露完整密钥 |
| 💾 持久化配置 | 通过 Web UI 添加的 Key 会持久化到 pool-config.json,重启后依然保留 |
📦 安装
Clone the repo
git clone https://github.com/xiaozhe7772222/dsh-api-key-pool.git
cd dsh-api-key-pool
Copy into your DSH profile's plugins directory
mkdir -p ~/.dsh/profiles/web/plugins/dsh-api-key-pool
cp -r lib package.json cordis.patch.yml ~/.dsh/profiles/web/plugins/dsh-api-key-pool/
然后在 ~/.dsh/profiles/web/package.json 中声明该 bundle:
{
"dsh": {
"profile": {
"bundles": [
{
"name": "dsh-api-key-pool",
"platform": ["web"],
"optional": false
}
]
}
}
}
重启 DSH:
npx @deepseek-ai/dsh web
⚙️ 配置
方式一:通过 cordis.patch.yml 进行静态配置
- insert:
- id: api-key-pool
name: dsh-api-key-pool
inject: [llm, webServer]
config:
pools:
provider-a:
apiKeyEnv: PROVIDER_A_API_KEY
keys:
- sk-your-first-key
- sk-your-second-key
- sk-your-third-key
cooldownMs: 30000
provider-b:
apiKeyEnv: PROVIDER_B_API_KEY
keys:
- sk-key2-1
- sk-key2-2
cooldownMs: 60000
defaultCooldownMs: 30000
| 字段 | 类型 | 描述 |
| pools..apiKeyEnv | string | 该提供商 API Key 的环境变量名(必须与 settings.yaml 中的 apiKeyEnv 匹配) |
| pools..keys | string[] | 要轮换的 API 密钥列表 |
| pools..cooldownMs | number | 每个密钥失败后的冷却时间(毫秒) |
| defaultCooldownMs | number | 全局默认冷却时间(毫秒),默认 30000 |
选项 2:Web 管理面板(运行时)
启动 DSH 后,打开 设置 → 插件 → API Key Pool:
- 查看每个提供商的密钥健康状态(绿色 = 健康,橙色 = 冷却中)
- 粘贴新密钥并点击 添加
- 点击 ✕ 移除密钥
- 点击 重置冷却 以清除某个提供商的冷却状态
- 点击 刷新 以重新加载状态
通过面板添加的密钥会自动持久化到 pool-config.json。
🧠 工作原理(v0.3.0) LLM request │ ▼ ┌──────────────────────────────────────────────────┐ │ agent/request waterfall (this plugin v0.3.0) │ │ v0.3.0 fix #1: event payload has NO provider │ │ → call next() first, read provider from the │ │ returned LlmCallConfig │ │ ┌──────────────────────────────────────────────┐ │ │ │ 1. pickKey(provider) — round-robin healthy key│ │ │ │ 2. inject process.env[apiKeyEnv] │ │ │ │ 3. credentials resolve env first → takes effect│ │ │ └──────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────┘ │ ▼ Provider API call │ ├── Success → markSuccess (reset failCount) │ └── Fail 429 (e.g. SenseNova 429001) / 401 / 403 / 5xx ... │ ▼ ┌──────────────────────────────────────────────────┐ │ agent/request-error waterfall (this plugin) │ │ v0.3.0 fix #2: no-error-left-behind │ │ ANY 4xx/5xx status, or message containing │ │ rate/limit/quota/exhaust/timeout/auth → retry │ │ v0.3.0 fix #3: return { kind: 'retry' } │ │ agent loop re-issues the request (not just │ │ mark-failed-and-quit) │ │ ┌──────────────────────────────────────────────┐ │ │ │ 1. markFailed(currentKey) → cooldown │ │ │ │ 2. return { kind: 'retry' } │ │ │ └──────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────┘ │ ▼ agent loop retries → agent/request again pickKey skips the cooling key → picks next key │ ├── key2 again 429 → cooldown → retry → key3 → OK ✅ │ └── all keys cooling → keeps retrying (wait for cooldown) 关键设计:DSH 按 process.env > .credentials.yaml > .env 的顺序解析凭据。本插件利用这一点——它在 agent/request 瀑布流中临时重写 process.env,从而实现零配置文件更改的热密钥切换。自 v0.3.0 起,失败的密钥不仅会进入冷却,还会要求 agent 循环立即使用下一个密钥重试(此前它仅标记密钥,请求随即终止)。
🔌 REST API
本插件在 DSH Web 服务器上注册路由。
GET /dsh-api-key-pool/pools
返回所有带有脱敏密钥、健康状态和环境变量名称的池:
{
"pools": {
"provider-a": {
"apiKeyEnv": "PROVIDER_A_API_KEY",
"keys": ["sk-your-first-key"],
"maskedKeys": ["sk-you-key"],
"states": {
"sk-you-key": { "failCount": 0, "cooldownUntil": 0 }
}
}
},
"defaultCooldownMs": 30000
}
POST /dsh-api-key-pool/pools
| action | body | 描述 |
| add | { action, provider, key } | 添加一个密钥 |
| remove | { action, provider, key } | 移除一个密钥 |
| update | { action, provider, keys: [] } | 替换完整的密钥列表 |
| reset | { action, provider } | 重置某个供应商的所有冷却状态 |
示例:
curl -X POST http://127.0.0.1:3080/dsh-api-key-pool/pools \
-H 'Content-Type: application/json' \
-d '{"action":"add","provider":"provider-a","key":"sk-new-key"}'
🗂️ 项目结构
dsh-api-key-pool/
├── package.json # Package metadata + DSH bundle declaration
├── cordis.patch.yml # Static pool config (first-install example)
├── pool-config.json # Runtime persistence (written by Web UI, gitignored)
├── lib/
│ ├── index.js # Server: rotation logic + agent waterfalls + REST API
│ └── client.js # Client: Web settings panel card
├── README.md
├── CHANGELOG.md
└── LICENSE
🏷️ 主题
deepseek-harness · dsh · api-key · api-key-rotation · key-pool · failover · load-balancing · round-robin · circuit-breaker · llm · openai · plugin · cordis
📄 许可证
MIT 许可证 — 可自由使用、修改、分发。切勿将你的真实 API 密钥提交到公开仓库。
中文文档
🚀 解决在 DeepSeek Harness 框架上面使用中转站模型或者第三方模型限流问题
✨ 功能特性
| 功能 | 说明 |
| 🔄 自动轮换 | 同一供应商配置多个 Key,请求时依次轮换,均衡负载 |
| 🛡️ 失败切换 | Key 返回 401 / 403 / 429 时自动标记故障,切换到下一个健康 Key |
| ⏱️ 冷却恢复 | 故障 Key 按指数退避进入冷却期(默认 30s 起步),到期自动回到轮换池 |
| 🌐 Web 管理面板 | DSH Web UI → 设置 → 插件配置 → API Key 池:直接增删 Key、查看健康状态、重置冷却 |
| 🔒 Key 脱敏 | REST 接口对外只返回脱敏后的 Key(sk-abc1234),不泄露完整密钥 |
| 💾 配置持久化 | Web 面板添加的 Key 持久化到 pool-config.json,重启后依然有效 |
📦 安装
克隆仓库
git clone https://github.com/xiaozhe7772222/dsh-api-key-pool.git
cd dsh-api-key-pool
拷贝到 DSH profile 的 plugins 目录
mkdir -p ~/.dsh/profiles/web/plugins/dsh-api-key-pool
cp -r lib package.json cordis.patch.yml ~/.dsh/profiles/web/plugins/dsh-api-key-pool/
然后在 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles 中声明:
{
"dsh": {
"profile": {
"bundles": [
{
"name": "dsh-api-key-pool",
"platform": ["web"],
"optional": false
}
]
}
}
}
重启 DSH:
npx @deepseek-ai/dsh web
⚙️ 配置说明
方式一:cordis.patch.yml(静态配置)
- insert:
- id: api-key-pool
name: dsh-api-key-pool
inject: [llm, webServer]
config:
pools:
provider-a:yaml
apiKeyEnv: PROVIDER_A_API_KEY
keys:
- sk-your-first-key
- sk-your-second-key
- sk-your-third-key
cooldownMs: 30000
provider-b:
apiKeyEnv: PROVIDER_B_API_KEY
keys:
- sk-key2-1
- sk-key2-2
cooldownMs: 60000
defaultCooldownMs: 30000
| 字段 | 类型 | 说明 |
| pools..apiKeyEnv | string | 该供应商的 API Key 对应的环境变量名(需与 settings.yaml 中 apiKeyEnv 一致) |
| pools..keys | string[] | 要轮换的多个 API Key |
| pools..cooldownMs | number | 单个 Key 失败后的冷却时长(毫秒) |
| defaultCooldownMs | number | 全局默认冷却时长(毫秒),默认 30000 |
方式二:Web 管理面板(运行时)
启动 DSH 后,打开 设置 → 插件配置 → API Key 池:
- 查看各供应商 Key 健康状态(绿点 = 健康,橙点 = 冷却中)
- 输入框粘贴新 Key,点击「添加」
- 点击 ✕ 移除不想用的 Key
- 点击「重置冷却」清空某个供应商的冷却状态
- 点击「刷新」重新加载状态
Web 面板添加的 Key 会自动持久化到 pool-config.json,重启后依然有效。
🧠 工作原理(v0.3.0) LLM 请求 │ ▼ ┌──────────────────────────────────────────────────┐ │ agent/request 瀑布(本插件 v0.3.0) │ │ v0.3.0 修复1:事件 payload 没有 provider 字段 │ │ → 先调 next(),从返回的 LlmCallConfig 里取 provider│ │ ┌──────────────────────────────────────────────┐ │ │ │ 1. pickKey(provider) 轮询选健康 Key │ │ │ │ 2. 注入 process.env[apiKeyEnv] │ │ │ │ 3. 凭据解析优先读 env → Key 立即生效 │ │ │ └──────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────┘ │ ▼ 供应商 API 调用 │ ├── 成功 → markSuccess(重置失败计数) │ └── 失败 429(如商汤 429001)/ 401 / 403 / 5xx ... │ ▼ ┌──────────────────────────────────────────────────┐ │ agent/request-error 瀑布(本插件拦截) │ │ v0.3.0 修复2:宁多勿漏 │ │ 任何 4xx/5xx 状态码,或消息含 rate/limit/quota/ │ │ exhaust/timeout/auth 等关键词 → 均判定可重试 │ │ v0.3.0 修复3:返回 { kind: 'retry' } │ │ agent loop 收到后重新发起请求(不再直接退出!) │ │ ┌──────────────────────────────────────────────┐ │ │ │ 1. markFailed(当前key) → 进入冷却 │ │ │ │ 2. return { kind: 'retry' } │ │ │ └──────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────┘ │ ▼ agent loop 重试 → 再次进入 agent/request pickKey 跳过冷却中的 key → 选中下一个 key │ ├── key2 也 429 → 标记冷却 → retry → key3 → 成功 ✅ │ └── 全部 key 冷却 → 继续重试(等冷却),日志预警关键设计:DSH 的凭据解析优先级是 process.env > .credentials.yaml > .env,本插件利用这一机制,在 agent/request 瀑布中临时改写 process.env,实现零配置文件改动的 Key 热切换。v0.3.0 起,失败的 Key 不仅进入冷却,还会让 agent loop 立刻换下一个 Key 重试(此前只是标记了故障但请求直接失败,等于白轮换)。
🔌 REST API
插件在 DSH webServer 上注册以下路由:
GET /dsh-api-key-pool/pools
返回所有池的 Key 列表(脱敏)、健康状态、环境变量名: json {
"pools": {
"provider-a": {
"apiKeyEnv": "PROVIDER_A_API_KEY",
"keys": ["sk-your-first-key"],
"maskedKeys": ["sk-you-key"],
"states": {
"sk-you-key": { "failCount": 0, "cooldownUntil": 0 }
}
}
},
"defaultCooldownMs": 30000
}
POST /dsh-api-key-pool/pools
| action | body | 说明 |
| add | { action, provider, key } | 添加一个 Key |
| remove | { action, provider, key } | 移除一个 Key |
| update | { action, provider, keys: [] } | 整体替换 Key 列表 |
| reset | { action, provider } | 重置该供应商全部冷却状态 |
示例:
curl -X POST http://127.0.0.1:3080/dsh-api-key-pool/pools \
-H 'Content-Type: application/json' \
-d '{"action":"add","provider":"provider-a","key":"sk-new-key"}'
🗂️ 项目结构
dsh-api-key-pool/
├── package.json # 包元数据 + DSH bundle 声明 ├── cordis.patch.yml # 静态池配置(首次安装示例) ├── pool-config.json # 运行时持久化(Web 面板写入,已 gitignore) ├── lib/ │ ├── index.js # 服务端:轮换逻辑 + agent 瀑布 + REST API │ └── client.js # 客户端:Web 设置面板卡片 ├── README.md ├── CHANGELOG.md └── LICENSE
🏷️ 标签 (Topics)
deepseek-harness · dsh · api-key · api-key-rotation · key-pool · failover · load-balancing · round-robin · circuit-breaker · llm · openai · plugin · cordis
📄 许可证
MIT License — 自由使用、修改、分发。请勿将你的真实 API Key 提交到公开仓库。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
xiaozhe7772222/dsh-api-key-pool
多 Key 自动轮换,失败切换并冷却恢复
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这是你的仓库?认领条目