dsh-apikeys:为 DeepSeek Harness 统一保管多平台 API Key

前言

在 DeepSeek Harness(DSH)里让模型替你调用 GitHub、Cloudflare 等平台 API,常见问题不是模型不知道接口怎么写,而是凭证放在哪、怎样调用又不把 Key 写进对话或配置文件。把 Token 直接贴进 cordis.patch.yml 或会话里,既难轮换,也容易在日志里留下痕迹。

下面介绍社区插件 dsh-apikeys-plugin(仓库 XRC111/dsh-apikeys,目录页 SkillHub)。维护者为 XRC111,分类为 admin-security。它在 DSH 凭证存储里集中保存多平台 Key,并通过 apikey_call、apikey_platforms、apikey_key 让模型代为发请求,而不默认把原始 Key 暴露给模型。

这是什么

dsh-apikeys-plugin(npm 包名 dsh-apikeys-plugin,当前资料中版本 1.0.3,许可证 MIT)是面向 DeepSeek Harness 的凭证与代理调用插件。

一句话定位:Key 存一次,模型通过工具调用各平台 API;Host 在请求侧附带凭证,模型平时拿到的是工具能力而不是明文 Key(除非你配置允许 apikey_key get Reveal)。

凭证记录形如 dsh-apikeys/<platform>-<account>,不进入 cordis.patch.yml、普通设置文件或会话日志的正文。

核心功能

凭证与隔离

  • Key 保存在 DSH 的 credential store,而不是配置文件或对话里。
  • 模型通过 apikey_call 发请求时由 Host 附加凭证;读取原始值需单独走 apikey_key,且受 exposeKeys 控制。
  • apikey_call 只接受相对 path,Host 来自平台定义,避免把 GitHub Token 发到任意 URL。
  • 同一平台可配置多个命名账户(如工作与个人),不会静默混用他人的 Key。

内置平台

资料中列出的内置平台及校验方式、环境变量回退如下:

id 校验 环境变量回退
github GET /user → login GITHUB_TOKEN
cloudflare GET /user/tokens/verify CLOUDFLARE_API_TOKEN
vercel GET /v2/user → username VERCEL_TOKEN
npm GET /-/whoami NPM_TOKEN
dockerhub GET /user DOCKERHUB_TOKEN
huggingface GET /whoami-v2 → name HF_TOKEN

设置页的 Verify 会发起真实请求,汇报平台返回的身份,用于确认 Key 有效且账户符合预期。

自定义平台

任意 HTTP API 可在配置里用 customPlatforms 声明 baseUrl、认证方式(bearer、header、x-api-key、basic、query 等)及可选的 verify 块。缺少可用 baseUrl 或必要头的自定义项会被跳过,不致拖垮整页。

暴露给模型的工具

工具 作用
apikey_call 对指定 platform 发 API 请求;path 相对 base;可带 query/body;返回状态、解析后的 body(有长度上限)、限速与分页信息。
apikey_platforms 列出平台与账户:是否已配置 Key、来源;不返回 Key 值。
apikey_key get / set / clear 单条凭证。

请求失败或传输失败(状态 0 并带 hint)以正常工具结果返回,便于模型读取并调整策略,而不是直接打断一轮对话。

安装与启用

资料中的安装方式如下。

命令行(将 <your-profile> 换成你的 profile 名):

dsh plugin --profile <your-profile> add dsh-apikeys-plugin

或在 DSH Web UI:Plugins → Add → dsh-apikeys-plugin。若 profile 未开 HMR,安装后需重启 DSH。

随后在 Settings → API Keys 选择平台、粘贴 Key 并 Verify。

运行环境要求(来自 package.json):Node.js >= 20。

典型用法与配置

在界面中管理 Key

安装并打开 Settings → API Keys 后,为各平台或自定义平台录入 Key 并验证。也可在启用 envFallback(默认 true)时,让各平台 default 账户回退到上表中的环境变量。

通过 cordis.patch.yml 调整行为

配置项均可选;在 profile 的 cordis.patch.yml 中修改插件 apikeys 段,例如限制平台、禁止模型读取明文 Key:

- id: apikeys
  config:
    exposeKeys: false
    enabledPlatforms: [github, cloudflare]

常用字段(摘自 README,默认值以仓库 cordis.patch.yml 为准):

字段 默认 含义
defaultPlatform github 未指定平台时的默认平台
defaultAccount default 未指定账户时的默认账户
enabledPlatforms 全部内置 暴露哪些内置平台
exposeKeys true 是否允许 apikey_key get 返回 Key
envFallback true default 账户是否回退环境变量
maxResponseChars 20000 单次响应 body 上限
requestTimeoutMs 30000 单次请求超时(毫秒)
migrateGitHub true 是否采纳旧版仅 GitHub 插件留在 dsh-github/<account> 的 Key

自定义平台示例结构(节选):

customPlatforms:
  - id: acme
    label: Acme API
    baseUrl: https://api.acme.example/v1
    envName: ACME_API_KEY
    verify:
      path: /me
      identity: data.login
    auth:
      kind: bearer
      scheme: Bearer

模型侧调用思路

  1. 用 apikey_platforms 查看已配置的平台与账户。
  2. 用 apikey_call 对目标 platform 发相对路径请求(例如 GitHub GET 类操作用对应 path)。
  3. 仅在确需明文时使用 apikey_key;生产环境可将 exposeKeys 设为 false,把 Key 留在 Host 内。

适用场景与注意

适合谁: 经常在 DSH 里让模型操作 GitHub、Cloudflare、Vercel、npm、Docker Hub、Hugging Face 等已内置平台,或自有 HTTP API,且希望凭证与配置、对话分离的开发者。

安全边界(插件自述): Key 不会默认写入配置或在工具结果里泄露;apikey_call 不能将凭证发到平台定义之外的主机。但 DSH 本地凭证文件对该 OS 用户可读,工具进程也以同一用户运行——这不是沙箱。exposeKeys: false 主要防误泄露;若 Key 可能已外泄,应在平台侧撤销,仅从插件删除不能「撤回」泄露。

安装前: 插件以当前 DSH 进程权限运行。SkillHub 为社区目录,与 DeepSeek / 幻方无官方从属关系;安装前建议阅读 仓库源码 与 MIT 许可证,自行判断风险。

若你曾使用仅 GitHub 的旧插件,开启 migrateGitHub 时可一次性采纳 dsh-github/<account> 下的旧记录,且不会覆盖已有新记录。

结尾

dsh-apikeys-plugin 把多平台 API Key 收进 DSH 凭证存储,用 apikey_call 等工具把「模型懂 API、缺的是你的身份」这一缺口补上,同时尽量把明文 Key 挡在 Host 一侧。需要安装与配置说明时,以 GitHub README 为准;浏览社区条目可打开 SkillHub 目录页。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜