DeepSeek Harness 插件:使用 Codex 订阅模型

前言

DeepSeek Harness (DSH) 支持通过插件扩展功能。针对 Codex CLI 用户,如果希望在 DSH 中直接使用 Codex 的订阅模型(如 gpt-6-astra),需要解决后端接口不兼容的问题。dsh-codex-provider 插件通过适配器层,将 DSH 与 ChatGPT 的订阅后端连接起来,复用 OAuth 会话凭证。

插件介绍

这是一个由 HaydenSmith1121 维护的插件,旨在为 DeepSeek Harness 提供对 Codex 模型的支持。它不依赖 API Key,而是读取 Codex CLI 登录后的会话信息(~/.codex/auth.json),通过 OAuth 认证访问订阅模型。

核心价值在于:不需要购买 OpenAI API Key 即可使用 Codex 的模型,且不产生额外的按 token 计费账单,仅消耗 ChatGPT 订阅额度。

安装与启用

Web Profile

安装插件:

dsh plugin --profile web add dsh-codex-provider

安装完成后,重启 dsh web,进入 设置 → 模型,即可看到 Codex (ChatGPT) 选项。

Headless Profile

dsh plugin --profile headless add dsh-codex-provider

安装后,需要在 headless.patch.yml 中配置默认模型:

- id: agent-default-model
  config:
    provider: codex
    model: gpt-6-astra

核心能力

插件实现了以下功能:

  • 流式输出:支持 SSE 逐帧转换,边生成边显示。
  • 工具调用:支持 function_call / function_call_output 与 DSH 的 tool-call / tool-result 映射。
  • 推理档位:支持 low 到 ultra 等档位,不支持该档位时会明确报错。
  • 思考内容:支持展示 reasoning_summary 事件。
  • 图片输入:支持上传图片并转换为 input_image。
  • 多轮历史:支持助手轮次与工具结果的回放。
  • 用量显示:读取订阅剩余额度。

工作原理与网络

认证与会话

插件必须依赖 Codex CLI 已登录的会话。它读取 ~/.codex/auth.json 中的 access/refresh token。插件仅读取该文件,不会写回数据,也不会影响 codex 命令本身的登录态。

网络与代理

由于 Codex 后端接口不在 api.openai.com,且后端在受限网络下无法直连,插件自行实现了 HTTP CONNECT 隧道:

export HTTPS_PROXY=http://127.0.0.1:7897
  • NO_PROXY 生效(支持域名后缀匹配)。
  • 本机地址(127.0.0.1、localhost)永不走代理。
  • 不使用 Node 全局 fetch,而是自己实现传输层。

源站容灾

Codex 后端有两个等价源站,插件在主源站(https://chatgpt.com/backend-api/codex)连接失败(TRANSPORT / TIMEOUT)时会自动切换至备用源站(https://chat.openai.com/backend-api/codex)。

模型探测

模型目录并非硬编码,而是从后端 /models 接口实时获取。插件会从本地 Codex 安装中探测 client_version,确保请求头与第一方客户端一致。

已知限制与错误码

已知限制

  • 依赖订阅:依赖 ChatGPT 订阅的可接受使用政策。
  • 接口变动:后端接口不是公开契约,可能随时变化。
  • Stop 序列:不支持 stop 序列,会报 UNSUPPORTED_OPTION。
  • 用量面板:用量显示依赖未文档化的后端接口,解析失败时会静默降级。

错误码说明

DSH 按路由码恢复策略,以下是插件定义的错误分类:

场景 Code 说明
没有可读的 Codex 会话 MISSING_CREDENTIAL 提示运行 codex login
凭证被拒绝 AUTH 401/403,作废缓存 token
订阅额度耗尽 QUOTA usage_limit_reached,需等待重置
请求频率限制 RATE_LIMIT 瞬时 429,可重试
超出上下文 CONTEXT_WINDOW_EXCEEDED
后端不提供该模型 UNKNOWN_MODEL
模型不支持图片 UNSUPPORTED_CONTENT
不支持 stop 序列 UNSUPPORTED_OPTION 明确拒绝
模型不支持该推理档位 UNSUPPORTED_REASONING_EFFORT
连接/超时/代理拒绝 TRANSPORT / TIMEOUT / PROXY_REJECTED
模型返回空回复 EMPTY_RESPONSE 可安全重试

参考资源

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

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

Xiaoye