dsh-plugin-chatgpt:用 ChatGPT 订阅在 DSH 里当模型提供方

前言

在 DeepSeek Harness(DSH)里接 OpenAI 系模型,常见做法是填 API Key,按 token 计费。若你本身有 ChatGPT 订阅,更自然的期望是:登录账号后,模型列表跟订阅计划一致,推理走账号额度而不是单独买 Key。

下面介绍社区插件 dsh-plugin-chatgpt(维护者 ckanner)。它在 DSH 里增加一条名为 chatgpt 的 provider 路由(不用 openai,因为内置 pi-ai 已占用该名),通过 OpenAI 公开的 Sign in with ChatGPT OAuth 完成登录,无需 API Key;账号下的模型、上下文窗口与 reasoning 档位来自账号侧 listing,而不是写死的模型表。

这是什么

dsh-plugin-chatgpt 是发布在 npm 上的 DSH 插件(MIT 许可证),分类上属于模型推理类能力。安装后会在 Settings → Models 出现 ChatGPT 一行;在该行卡片上完成登录,即可在模型选择器里按 ChatGPT 分组选用订阅可用的模型。

插件以当前 DSH 进程权限运行;安装前建议自行查看 GitHub 仓库 源码与许可证。社区目录页:skillhub.cn 插件条目(独立站点,与 DeepSeek / 幻方无官方从属关系)。

核心功能

  1. OAuth 登录,无 API Key
    使用 Sign in with ChatGPT 流程;凭证以 owner-only 方式保存在配置的 stateDir(默认在 DSH 状态目录下的 chatgpt-subscription)。设置页展示授权 URL、支持复制;若浏览器无法访问 loopback,可把最终 redirect URL 粘贴回卡片完成授权。登出时会向授权端撤销可续期会话(若服务端未确认也会提示)。

  2. 一条 provider 路由 chatgpt
    模型元数据优先来自账号的 GET /v1/models listing;在 Settings → Models 选中模型后,会进入 DSH 的 model selector,无单独 picker。

  3. 可选上下文预算
    默认跟随各模型在 catalog 中公布的 context window。可在插件配置里用 contextWindowLimit 设全局上限,或用 modelContextWindowLimits 按精确 model ID(大小写敏感)单独覆盖;优先级为单模型 → 全局 → 账号默认。这些设置独立于 Codex,且 DSH 仍会预留 compaction 余量。

  4. 无头环境
    可通过 ChatGptAuth(见仓库 src/auth/manager.ts)在无浏览器场景下走同一套会话:打印授权 URL,必要时 attempt.submit(完整 redirect URL),再 auth.adopt(credential)。

  5. 实现约束(与订阅路由一致)
    请求不会携带订阅路由拒绝的字段(如 temperature、max_output_tokens、top_p 等);流式响应必须以 response.completed 作为唯一成功终止,否则视为错误。

安装与启用

插件通过 npm 安装,无需本地 build。整包安装为一行命令(资料原文):

dsh plugin --profile <name> add dsh-plugin-chatgpt

安装后需重启 harness:profile 在启动时组装。若要固定版本,资料示例为:

dsh plugin --profile <name> add dsh-plugin-chatgpt@0.1.9   # pin a version, or omit it for the latest

卸载:

dsh plugin --profile <name> remove dsh-plugin-chatgpt

包声明了 dsh.bundle,添加后会写入 profile 的 dsh.profile.bundles 并插入 composition 层。不启动即可核对是否生效:

dsh --profile <name> --dump-config   # shows a "# == dsh-plugin-chatgpt" layer

说明:从 GitHub URL 直接 add 会走源码构建,且 pnpm 可能因 git 依赖的 build scripts 未列入 onlyBuiltDependencies 而失败(资料中的 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED);常规用法是 npm 包名安装。

运行环境要求(package.json):Node ^22.19.0 || >=24.0.0。

典型用法

在 UI 里登录并选模型

  1. 打开 Settings → Models,找到 ChatGPT 行。
  2. 点击 Sign in with ChatGPT,按卡片提示在浏览器完成授权;无法回环 localhost 时,粘贴浏览器最终的 redirect URL。
  3. 卡片会显示账号计划、token 下次刷新时间、可用模型数量;在此页为各模型勾选启用。
  4. 在 DSH 模型选择器的 ChatGPT 分组下选用已启用的模型。

订阅侧可在 ChatGPT 设置里按应用限制本安装可使用的计划份额(插件 README 中有相关截图说明)。

配置上下文上限(可选)

全局默认预算示例:

contextWindowLimit: 1000000

按 model ID 分别限制示例(键名须与 listing 中 ID 完全一致):

contextWindowLimit: 500000
modelContextWindowLimits:
  gpt-6-astra: 1000000
  gpt-6.1-sol: 800000

修改在下次 DSH 解析模型时生效;删除某 model 条目则回退到全局或账号默认。

无头登录(脚本)

import { ChatGptAuth } from 'dsh-plugin-chatgpt/src/auth/manager.ts'

const auth = new ChatGptAuth({
  stateDir: `${process.env.DSH_HOME ?? `${process.env.HOME}/.dsh`}/chatgpt-subscription`,
  agentNameHint: 'DeepSeek Harness',
})

const attempt = await auth.begin()
console.log('Open this URL in your browser:\n' + attempt.authorizationUrl)

// 若 redirect 无法到达 loopback,可粘贴完整 URL:
// await attempt.submit('<the full redirect URL from your browser>')

const credential = await attempt.result
auth.adopt(credential)

适用场景与注意

适合谁: 已有 ChatGPT 订阅、希望在 DSH 里用同一账号模型 roster 做 agent 开发或日常推理,且接受 OAuth 与订阅路由参数限制(不能指望随意传 OpenAI API 的全部采样字段)的用户。

需要注意:

  • 费用与配额由 ChatGPT 账号与计划在 ChatGPT 侧重;插件 README 还列出了已知限制与 deferred work,升级前可扫一眼仓库文档。
  • 插件进程权限即 DSH 权限;OAuth 凭证存于本地 stateDir,部署在共享机器上时要考虑目录权限与备份策略。
  • DSH 生态是「一切皆插件」;本包是社区维护的 npm 插件,安装命令以 dsh plugin --profile … add dsh-plugin-chatgpt 为准,不要凭仓库名臆造 github:owner/repo 一类未在资料中出现的写法。

结尾

dsh-plugin-chatgpt 把 ChatGPT 订阅接进 DSH 的模型栈:一条 chatgpt 路由、Settings 里登录、模型列表跟账号走。若你要在 harness 里复用订阅而不是 API Key,可按上文安装、重启后在 Models 页完成 Sign in。

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

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

Xiaoye