前言¶
在 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
模型侧调用思路¶
- 用
apikey_platforms查看已配置的平台与账户。 - 用
apikey_call对目标platform发相对路径请求(例如 GitHubGET类操作用对应 path)。 - 仅在确需明文时使用
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 目录页。