把已配置的全部模型暴露为 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
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 11 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
pigman18/dsh-openai-gateway
把已配置的全部模型暴露为 OpenAI 兼容接口
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,967已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这是你的仓库?认领条目