前言¶
在 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 / 幻方无官方从属关系)。
核心功能¶
-
OAuth 登录,无 API Key
使用 Sign in with ChatGPT 流程;凭证以 owner-only 方式保存在配置的stateDir(默认在 DSH 状态目录下的chatgpt-subscription)。设置页展示授权 URL、支持复制;若浏览器无法访问 loopback,可把最终 redirect URL 粘贴回卡片完成授权。登出时会向授权端撤销可续期会话(若服务端未确认也会提示)。 -
一条 provider 路由
chatgpt
模型元数据优先来自账号的GET /v1/modelslisting;在 Settings → Models 选中模型后,会进入 DSH 的 model selector,无单独 picker。 -
可选上下文预算
默认跟随各模型在 catalog 中公布的 context window。可在插件配置里用contextWindowLimit设全局上限,或用modelContextWindowLimits按精确 model ID(大小写敏感)单独覆盖;优先级为单模型 → 全局 → 账号默认。这些设置独立于 Codex,且 DSH 仍会预留 compaction 余量。 -
无头环境
可通过ChatGptAuth(见仓库src/auth/manager.ts)在无浏览器场景下走同一套会话:打印授权 URL,必要时attempt.submit(完整 redirect URL),再auth.adopt(credential)。 -
实现约束(与订阅路由一致)
请求不会携带订阅路由拒绝的字段(如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 里登录并选模型¶
- 打开 Settings → Models,找到 ChatGPT 行。
- 点击 Sign in with ChatGPT,按卡片提示在浏览器完成授权;无法回环 localhost 时,粘贴浏览器最终的 redirect URL。
- 卡片会显示账号计划、token 下次刷新时间、可用模型数量;在此页为各模型勾选启用。
- 在 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。