Bundle
dsh-plugin-llm-proxy
DSH 自定义厂商适配器:为 OpenAI 兼容的私有/公司模型端点提供可选的 HTTP(S) 代理转发,并在设置页提供可视化配置表单。
- Source
- hddwbd
- License
- MIT
- Updated
- Updated 2 days ago
Readme
# dsh-plugin-llm-proxy
一个 DeepSeek Harness **自定义厂商**适配器:让你把公司自建 / 私有的
OpenAI 兼容模型(chat/completions 协议)接入 DSH,并让该厂商的请求流量
**通过一个指定的 HTTP(S) 正向代理**转发。
典型场景:公司模型网关只能通过内网代理访问(`http://proxy.company.example:8080`)。
## 能力
- 注册一条 provider 路由 `openai-proxy`(显示名「OpenAI 兼容(代理)」)。
- 完整走 harness 的流式协议:文本、推理(`reasoning_content`)、工具调用、usage、finish。
- 配置项:`baseURL`(端点)、`apiKeyEnv`(可选,API Key 的环境变量名)、
`proxy`(可选,正向代理地址)、`models`(模型目录)、`streamIdleTimeoutMs`、`retryPolicy`。
## 安装
```bash
dsh plugin --profile web add file:./dsh-plugin-llm-proxy
```
(`dsh plugin` 会把 `dsh.profile.bundles` 里补上本包;`cordis.patch.yml` 负责把
`llm-proxy` 这一行插进组合。)
装完后**重启** `dsh web` 使新 bundle 生效。
## 配置
**推荐:在界面里配。** 装好并重启后,打开「设置」,左侧会出现一个新页面
**「公司模型(代理)」**,直接在上面填 `baseURL`、`API Key`、`代理地址`、`模型列表`
并点保存即可,无需编辑任何配置文件。
> 兼容:以下两种 YAML 方式仍然可用(属于你自己的 patch 层 / 用户设置层,
> 升级不被覆盖;界面里填写的值最终也写进 `settings.yaml` 的 `llm-proxy` 段):
### 方式一:写进 profile 的 `cordis.patch.yml`
编辑 `$DSH_HOME/profiles/web/cordis.patch.yml`,在末尾追加:
```yaml
- id: llm-proxy
config:
baseURL: https://llm.company.example/v1 # 公司模型网关
apiKeyEnv: COMPANY_LLM_API_KEY # 可选;删掉则不带鉴权头
proxy: http://proxy.company.example:8080 # 可选;正向代理地址
models:
- id: company-model
name: Company Model
contextWindow: 32768
maxTokens: 8192
```
### 方式二:写进 `$DSH_HOME/settings.yaml`
```yaml
llm-proxy:
baseURL: https://llm.company.example/v1
apiKeyEnv: COMPANY_LLM_API_KEY
proxy: http://proxy.company.example:8080
models:
- id: company-model
name: Company Model
contextWindow: 32768
maxTokens: 8192
```
然后在「设置 → 模型」页能看到名为「OpenAI 兼容(代理)」的厂商卡片;它属于
未知适配器族,UI 只提示「高级配置在 settings.yaml(llm-proxy)」,字段请按上面
两种方式之一填写。
## 使用
- 配置并重启后,在对话上方的模型选择器里选择 `OpenAI 兼容(代理)` →
`Company Model` 即可。
- API Key:把密钥写到环境变量 `COMPANY_LLM_API_KEY`,或到「设置 → 模型」卡片里
输入(会通过 credentials 服务保存为该引用)。
## 说明 / 边界
- 代理只作用于**本插件注册的 `openai-proxy` 厂商**,不影响官方 DeepSeek 或其他厂商。
- 代理地址支持 `http://` / `https://`;如代理需要账号密码,可写成
`http://user:pass@host:port`(undici `ProxyAgent` 原生支持)。
- 请求通过 Node 全局 `fetch` + undici `ProxyAgent` 发出(Node 的 `fetch` 不会
自动读取 `HTTP_PROXY`/`HTTPS_PROXY` 环境变量,这正是需要显式配置 `proxy` 的原因)。
Install
dsh plugin --profile web add github:hddwbd/dsh-plugin-llm-proxy#40626c610fa3b3cd9bfc5e8e1b36e82cf2a164d5
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-plugin-llm-proxy from the hub