把本机 OpenCodex 代理(http://127.0.0.1:10100,LaunchAgent com.opencodex.proxy 常驻)的模型
(GPT-5.x / Claude / Grok / Gemini / DeepSeek)以 provider 形式接入 DeepSeek Harness(DSH)。
这是一个正式的 DSH 插件(Cordis 插件包,模式同官方 @deepseek-ai/dsh-llm-deepseek):
以 provider 适配器注册路由 opencodex,自带模型目录,开箱即用。
| 路径 | 说明 |
|---|---|
dsh-llm-opencodex/ |
插件包:package.json + lib/index.js(适配器 + 插件入口) |
install-local.sh |
一键安装脚本(链接插件包 + 写入 profile patch 行,幂等) |
LICENSE |
MIT |
插件能力:OpenAI 兼容 chat-completions 适配器 —— 流式、工具调用、reasoning_effort、
reasoning_content 透传、图片输入(走 DSH 附件服务)、usage、错误映射、空闲看门狗、重试策略。
# 一键(默认 web profile;其它 profile:./install-local.sh <profile>)
./install-local.sh
# 然后重启 DSH Web 使插件加载:
# kill $(lsof -tiTCP:3080 -sTCP:LISTEN) && dsh --profile web手动安装等价于三步:
# 1) 让 profile 能解析插件包
ln -sfn $PWD/dsh-llm-opencodex ~/.dsh/profiles/node_modules/dsh-llm-opencodex
# 2) 在 ~/.dsh/profiles/web/cordis.patch.yml 末尾追加(注意必须是 insert: 形式):
# - insert:
# - id: llm-opencodex
# name: 'dsh-llm-opencodex'
# 3) 重启 DSH Web重要:如果你之前用设置文件方式配过 opencodex(
~/.dsh/settings.yaml里的llm-pi-ai.providers.opencodex节),必须先删除该节 —— 否则 pi-ai 与插件会重复注册opencodex路由,启动失败(DUPLICATE_ADAPTER)。
默认值已开箱可用(baseURL: http://127.0.0.1:10100/v1,authHeader: Bearer opencodex-local,
30 个模型的目录)。需要覆盖时,在 ~/.dsh/settings.yaml 写 llm-opencodex: 节,改完即生效:
llm-opencodex:
baseURL: "http://127.0.0.1:10100/v1" # 必须带 /v1(见下方「关键点」)
authHeader: "Bearer opencodex-local" # 本机代理不校验 token;静态占位即可
# apiKeyEnv: "OPENCODEX_API_KEY" # 可选:改用真实凭据(Bearer <key> 覆盖 authHeader)
models:
- id: "gpt-5.6-sol" # 只覆盖需要改的模型,其余沿用内置默认
contextWindow: 372000
input: ["text", "image"]
reasoningEfforts: {low: low, medium: medium, high: high, xhigh: xhigh, max: max}
defaultReasoningEffort: low环境变量 OPENCODEX_BASE_URL 可覆盖 baseURL(仅受信任的启动层)。
BASE=http://127.0.0.1:3080 # 按实际 DSH Web 端口改
# provider 已激活(settingsNs 应为 llm-opencodex,证明来自插件)
curl -s -X POST $BASE/api/llm.providers -H 'content-type: application/json' \
-d "{\"type\":\"client-request\",\"rpcId\":\"$(uuidgen|tr A-Z a-z)\",\"method\":\"llm.providers\",\"payload\":{}}"
# 模型目录(应有 id="opencodex" 的分组,约 30 个模型;failures 为空)
curl -s -X POST $BASE/api/llm.models -H 'content-type: application/json' \
-d "{\"type\":\"client-request\",\"rpcId\":\"$(uuidgen|tr A-Z a-z)\",\"method\":\"llm.models\",\"payload\":{}}"之后在 Web 的模型选择器 / 设置 → Models 里选「OpenCodex (local proxy)」下的模型即可。
rm ~/.dsh/profiles/node_modules/dsh-llm-opencodex # 删符号链接
# 从 ~/.dsh/profiles/web/cordis.patch.yml 删除 insert 块,重启 DSH Web| 现象 | 原因 | 处理 |
|---|---|---|
Stream ended without finish_reason |
baseURL 缺 /v1,请求打到 dashboard HTML |
改 llm-opencodex.baseURL 为 .../v1 或设 OPENCODEX_BASE_URL |
启动报 DUPLICATE_ADAPTER |
与 llm-pi-ai.providers.opencodex 设置节冲突 |
删除该设置节后重启 |
401 Not logged in to anthropic |
上游 Claude 未登录 OAuth | ocx login anthropic(无需改 DSH) |
gpt-5.3-codex-spark 报 400 |
模型已被上游下线 | 从 models: 里删掉该条目 |
偶发 502 upstream_server_error |
opencodex 上游瞬时故障 | 重试;持续失败看 ~/.opencodex/service.log |
| 改了设置没生效 | YAML 语法错 / 设置路径不对 | 校验 YAML;确认 $DSH_HOME;看 llm.models 的 failures |
- baseURL 必须带
/v1:适配器请求<baseURL>/chat/completions,缺/v1会打到 opencodex 的 dashboard HTML 而不是 API。 - 插件与
llm-pi-ai设置节二选一,不要同时启用。 - 模型走 OpenCodex 背后的真实上游账号,使用消耗对应配额(ChatGPT / Claude / Grok 等)。
- 目录随 OpenCodex
/v1/models变化:改models:节即可覆盖,无需改插件。