🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

模型网关 pigman18/dsh-openai-gateway

DeepSeek Harness
pigman1811 天前有提交已提供中文文档扫描:含敏感能力

把已配置的全部模型暴露为 OpenAI 兼容接口

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add pigman18/dsh-openai-gateway
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · browser
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 11 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 10 处,展示前 10 条)
  • 发起网络请求
    index.js:666
    const response = await fetch(url, { signal: AbortSignal.timeout(30000) })
  • 读取本地文件
    index.js:1577
    const parsed = JSON.parse(readFileSync(path, 'utf8'))
  • 读取本地文件
    index.js:1603
    const value = readFileSync(join(dir, KEY_FILENAME), 'utf8').trim()
  • 写入本地文件
    index.js:1616
    mkdirSync(store.dir, { recursive: true })
  • 写入本地文件
    index.js:1617
    writeFileSync(store.path, `${JSON.stringify({ port: store.port, apiKey: store.apiKey }, null, 2)}\n`, {
  • 写入本地文件
    index.js:1621
    chmodSync(store.path, 0o600)
  • 写入剪贴板
    client.js:215
    await navigator.clipboard.writeText(text);
  • 发起网络请求
    client.js:305
    const response = await fetch(force ? `${STATUS_PATH}?refresh=1` : STATUS_PATH, {
  • 发起网络请求
    client.js:338
    const response = await fetch(SETTINGS_PATH, {
  • 发起网络请求
    client.js:371
    const response = await fetch(KEY_PATH, {
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

把 DeepSeek Harness 里配置的每个服务商的每个模型都暴露成 OpenAI 兼容端点,监听固定的回环端口,侧边栏页面显示端口、密钥和模型 id。

README

由 DeepSeek 最新模型翻译生成
dsh-openai-gateway 把 DeepSeek Harness 里已配置的全部 provider、全部模型,暴露成一个固定的 OpenAI 兼容接口 —— 端口与密钥都固化在本地,重启不变。 English ·安装 ·兼容的 provider 插件 ·工作原理 ·端口与密钥 ·更新日志 一个独立的 DeepSeek Harness (DSH) bundle 插件。它在本地回环上监听一个固定端口,把所有已注册 provider 的模型按 provider/model 暴露为 OpenAI 兼容接口;同时往左侧边栏加一个 模型网关 页面,用来查看地址与密钥、改端口、换密钥、以及逐个复制模型 ID。 没有任何按厂商重写的转发逻辑。 请求走宿主的 ctx.llm 服务,因此每个请求进入的正是该 provider 已有的那个 adapter —— 它自己的凭据、请求头、重试与账号池行为、模型门禁都原地保留。这也是它能「顺带」支持所有 provider 插件的原因:只要有插件把 provider 注册进 ctx.llm,它就自动出现在网关里,不需要任何适配。
展开完整文档(README 剩余 1 节)
dsh-openai-gateway

把 DeepSeek Harness 里已配置的全部 provider、全部模型,暴露成一个固定的 OpenAI 兼容接口 —— 端口与密钥都固化在本地,重启不变。

English ·安装 ·兼容的 provider 插件 ·工作原理 ·端口与密钥 ·更新日志

一个独立的 DeepSeek Harness (DSH) bundle 插件。它在本地回环上监听一个固定端口,把所有已注册 provider 的模型按 provider/model 暴露为 OpenAI 兼容接口;同时往左侧边栏加一个 模型网关 页面,用来查看地址与密钥、改端口、换密钥、以及逐个复制模型 ID。

没有任何按厂商重写的转发逻辑。 请求走宿主的 ctx.llm 服务,因此每个请求进入的正是该 provider 已有的那个 adapter —— 它自己的凭据、请求头、重试与账号池行为、模型门禁都原地保留。这也是它能「顺带」支持所有 provider 插件的原因:只要有插件把 provider 注册进 ctx.llm,它就自动出现在网关里,不需要任何适配。

功能特性

- 一个入口,全部模型 —— /v1/models 列出所有 provider 的所有模型,ID 为 provider/model(如 workbuddy/deepseek-v4.1-flash、opencode2dsh/deepseek-v4.1-flash-free、local/qwen3.5:4b)。当某个裸 ID 只被一个 provider 提供时也接受;多个 provider 撞名时明确报错并列出候选,不做猜测。
- 端口固化 —— 网关自己监听 127.0.0.1:8787,与界面端口无关(界面端口每次启动都可能变,网关的地址不会)。端口被占用时自动落到系统分配的随机端口继续服务,页面会标明「随机(8787 被占用)」,而不是起不来。
- 密钥固化 —— 首次启动生成 sk-dsh-… 并写入 $DSH_HOME/openai-gateway/settings.json(0600),跨重启不变;页面上的 生成 按钮可换新(两步确认,旧钥立即失效)。旧版本的 api-key 文件会被自动迁移,已配置的客户端不受影响。
- 侧边栏模型网关页 —— 打开即见接口地址、密钥(打码 / 显示 / 复制)、端口(可直接改,回车即应用),以及按 provider 折叠分组的完整模型清单:每个模型 ID 一个复制按钮,每组可整组复制,也可一键复制全部。
- 流式与非流式都支持 —— "stream": true 返回标准 SSE(data: … 逐帧,[DONE] 收尾),非流式返回完整 chat.completion。
- 工具调用 —— tools 正常转发,结果以 tool_calls 返回,arguments 的分片会被拼装完整,finish_reason 为 tool_calls;tool 消息按其 tool_call_id 回到对应调用。
- 推理内容与用量 —— 模型产出思考时以 reasoning_content 单独返回;usage 映射为 prompt_tokens / completion_tokens / total_tokens,有 reasoning / cache 细分时一并带上。
- reasoning_effort 按目标模型真实档位映射 —— 映射到该模型自己声明的档位集合;不支持的档位降到最接近的或直接丢弃,不会因此拒掉整个请求。
- 对 stop 被拒的上游自动降级 —— 某些 adapter 不接受 stop,会先返回 UNSUPPORTED_OPTION;网关识别该情况后去掉 stop 重试一次,而不是把请求判死。
- 浏览器直连 —— /v1/ 自带 CORS 预检(OPTIONS 无需鉴权即答 204),前端项目可以把它当普通 OpenAI 端点用。
- 只绑回环 —— 仅监听 127.0.0.1,不是网络服务。页面用的控制接口还额外要求同源、POST 与 JSON Content-Type。

兼容的 provider 插件

网关不认识任何厂商,只读宿主已注册的 provider。以下是真实环境里跑通过的组合,也就是 1.0.0 的实测范围:

| provider ID | 由谁提供 | 说明 |
| workbuddy / workbuddy-global | dsh-connect-workbuddy | 国内版与国际版 WorkBuddy,含账号池换号 |
| workbuddy-xdpool | dsh-workbuddy-xdpool | WorkBuddy 账号池插件 |
| opencode2dsh | @opencode2dsh/dsh-plugin | 免费额度模型(如 deepseek-v4.1-flash-free、glm-5.3-flash-free) |
| local | @deepseek-ai/dsh-llm-pi-ai 的本地路由 | 例如指向 Ollama(http://127.0.0.1:11434/v1) |
| deepseek-official / deepseek-account | DSH 内置 DeepSeek provider | 官方通道与账号通道 |

任何其它把 provider 注册进 ctx.llm 的插件(自建 OpenAI 兼容后端、其它厂商连接器)同样自动可用;上表只列出实测过的。转发时不需要你手动补任何 header:上游需要的请求头由各自 adapter 负责,网关只把 OpenAI 形状的请求翻译成 adapter 的调用。

安装

从 GitHub 安装:

dsh plugin --profile <profile> add github:pigman18/dsh-openai-gateway

开发时直接链本地目录:

dsh plugin --profile <profile> add link:/path/to/dsh-openai-gateway

安装或更新后重启 DSH:宿主侧插件在启动时装载,浏览器前半段也只在启动时装配。

使用

1. 侧边栏点 模型网关,页面顶部就是接口地址(默认 http://127.0.0.1:8787/v1)与 API Key。
2. 把它当普通 OpenAI 端点填进任意客户端:

curl http://127.0.0.1:8787/v1/chat/completions \
-H "Authorization: Bearer <key>" \
-H "Content-Type: application/json" \
-d '{"model":"workbuddy/deepseek-v4.1-flash","messages":[{"role":"user","content":"hi"}]}'

3. 模型名直接从页面复制,或在 /v1/models 里查。

接口

/v1/ 由网关自己的固定端口提供;/plugins/… 三条控制接口挂在宿主 web server 上(页面同源、回环校验)。

| 方法 | 路径 | 用途 |
| GET | /v1/models | 所有 provider 的所有模型(?refresh=1 跳过 60 秒缓存) |
| GET | /v1/models/<provider>/<model> | 单个模型 |
| POST | /v1/chat/completions | 对话补全,流式或非流式 |
| POST | /v1/completions | 同一处理器,兼容只认旧路径的客户端 |
| OPTIONS | /v1/ | CORS 预检,无需鉴权 |
| GET | /plugins/dsh-openai-gateway/status | 页面读取的状态文档,附带完整模型清单(超过 60 秒缓存会先重建;?refresh=1 强制重建)与 recent:最近 20 次请求的耗时、首字节、尝试次数与结束原因 |
| POST | /plugins/dsh-openai-gateway/settings | {"port": 8787} 改端口,端口被占返回 409 |
| POST | /plugins/dsh-openai-gateway/key | {"action":"regenerate"} 换密钥 |

鉴权为 Authorization: Bearer <key>,比较使用常量时间比较。

工作原理

OpenAI 客户端 ──▶ http://127.0.0.1:8787/v1 ──▶ ctx.llm ──▶ provider adapter ──▶ 上游 │ (workbuddy / opencode2dsh / │ pi-ai 本地路由 / …)
└── /v1/models 把它们全列出来

- 请求体被翻译成 ctx.llm.prepareCall(config, signal, configure) 的调用:system / developer 消息折进 system 提示,user / assistant / tool 转成 LLM 消息块,tools 转成函数声明。
- 响应流(text-delta / reasoning-delta / tool-call-delta / usage / finish)再拼回 OpenAI 的 chat.completion 或 SSE 帧。
- 一个准备好的调用只允许派发一次,这点由宿主保证;网关对每个请求单独准备。

端口与密钥

两者都持久化在一个插件自有文件里,重启后无需任何配置:

$DSH_HOME/openai-gateway/settings.json # 默认 ~/.dsh/openai-gateway/settings.json { "port": 8787, "apiKey": "sk-dsh-…" } # 权限 0600

- 端口:优先 8787;启动时若已被占用,落到系统分配的随机端口继续服务(页面显示被占用的原端口)。页面改端口立即生效;改到被占用端口返回 409 且继续在原端口服务,不会把自己搞挂。
- 密钥:首次启动生成;生成 之后旧钥立刻失效。删掉 settings.json 即回到默认(会重新生成密钥)。
- 密钥不写进 profile,只能通过回环状态接口读回。

配置

bundle 行上可选:

| 键 | 默认 | 含义 |
| enabled | true | 设为 false 时插件空转:页面显示未启用,/v1/ 返回 503 |
| port | 已存值 / 8787 | 首选监听端口,显式值优先于已存值 |
| apiKey | 已存值 | 固定密钥,优先于已存值 |
| bodyLimitBytes | 8388608 | 请求体上限 |
| catalogTtlMs | 60000 | /v1/models 缓存时长 |
| retryMaxRetries | 5 | 瞬时失败(RATE_LIMIT/SERVER/TIMEOUT/TRANSPORT/EMPTY_RESPONSE)的重试次数,与宿主 llm-retry 默认一致 |
| retryInitialDelayMs | 500 | 退避起始间隔 |
| retryMaxDelayMs | 10000 | 退避上限;上游给出的重置点超过它就按「请稍后再来」直接失败 |
| silentFlushMs | 10000 | 流式响应静默多久后提交响应头并开始保活 |
| keepAliveMs | 15000 | 保活 : keep-alive 注释的间隔 |
| maxInputTokens | 0(关) | 估算输入超过它就回 413 CONTEXT_WINDOW_EXCEEDED;0 时改用模型声明的 contextWindow(provider 没声明就不拦) |
| maxMessages | 0(关) | 历史超过这么多条就丢弃最早的若干条,且保证保留部分从 user 开始 |

已知边界

- 外部客户端不能传图片与文件:会话之外的调用方拿不到可持久化的附件引用,因此这部分会被丢弃,只转发文本。
- provider 注入的提示会原样透传:例如账号池换号时上游返回的一行说明,会作为普通 assistant 文本出现,不会被网关吞掉或改写。
- 没有 web server 的 profile(headless):没有页面与控制接口,但 /v1/* 仍按固定端口提供服务。
- 长任务建议用 stream: true:非流式请求在整段生成期间不会写出任何字节,任何读超时都会命中。
- 超过 silentFlushMs 才失败的流式请求,错误以流内事件到达:响应头一旦提交(为了保活),首字之前的失败只能写成 data: {"error": …} + data: [DONE],不再有 HTTP 状态码。
- 只绑定 127.0.0.1,不要把它转发到网络上。

许可

MIT · 见 LICENSE
预览分享卡片长什么样 ↓pigman18/dsh-openai-gateway
分享 · DeepSeek Harness Hub
pigman18/dsh-openai-gateway

把已配置的全部模型暴露为 OpenAI 兼容接口

这是你的仓库?认领条目

回到顶部