1.2 多模型与自定义端点
本节目标
除了 DeepSeek,学会接入更多模型提供智能的大模型服务,dsh 负责调度它来思考与生成。提供商,以及把 dsh 接到任意 OpenAI 兼容的服务上,比如本地的模型或者公司内部的网关。
两种接法
0.1.7-alpha.1 起,模型提供智能的大模型服务,dsh 负责调度它来思考与生成。页合并成了一个添加模型提供商按钮,点开一张卡片,顶部用分段开关选模式,两种场景都在这张卡里:
- 第三方模型提供商:从 dsh 自带的提供商列表里选,填个密钥就能用,最省事
- 自定义模型 API:手动填一个服务地址,适合本地模型、中转网关、公司内部服务
开关下面有一行说明各自是干嘛的;两个模式各记各的草稿,来回切不会丢已填的内容。
这一节两种都讲。
方式一:从内置列表添加
打开设置 → 模型
点添加模型提供商,模式选第三方模型提供商
在弹出的列表里选择你用的服务。列表以英文标识(Provider ID)列出各家平台,内置有
anthropic(Anthropic)、openai(OpenAI)、moonshotai(Kimi)、zai(GLM/智谱)、qwen(通义千问)、minimax、xiaomi、nvidia、together等二十多家选中后会进入该提供商的配置表单,填上对应的 API 密钥访问模型服务的凭据,通常以 sk- 开头,需妥善保管。,点保存
0.1.5-rc.1 起,内置目录默认以 DeepSeek V41 Flash 为首选模型,旧 V4 系列(含 V4 Flash Vision Exp)一并保留;0.1.6-alpha.1 起,DeepSeek 内置提供商默认走 Anthropic Messages 协议,API 地址默认是
https://api.deepseek.com/anthropic,模型选择器里 V41 Flash 显示为 Messages Flash。密钥不用换:新协议复用同一个DEEPSEEK_API_KEY。想切回 OpenAI 兼容的 Chat Completions,在$DSH_HOME/settings.yaml的llm-deepseek段把protocol改成chat-completions即可
每个提供商的表单都长得差不多,都是密钥加可选的模型列表,和 1.1 节 DeepSeek 的编辑表单一致。协议下拉里的选项会显示各协议的产品名,没起名字的协议直接显示协议标识。
OAuth 提供商
通过 OAuth 登录的提供商(例如 Codex)暂不支持在表单里直接配置,后续会逐步开放。
拿不到某家的密钥?
各家平台都有自己的开放平台,去对应官网注册申请即可。填完后和 DeepSeek 一样,模型立即可用。
方式二:添加自定义提供商
这个入口是给"标准 OpenAI 兼容接口"准备的。你的服务只要实现了 OpenAI 的接口协议,就能被 dsh 识别。典型的场景有三个:
- 本地跑的模型,比如 Ollama、vLLM、LM Studio
- 第三方中转服务,统一转发到多家大模型
- 公司内部网关,只对员工开放
点添加模型提供商,模式切到自定义模型 API,弹出下面的表单:

逐个字段解释:
| 字段 | 填什么 | 例子 |
|---|---|---|
| Provider ID | 小写字母开头的唯一标识,用于派生凭据名 | my-gateway |
| 显示名称 | 界面上显示的名字 | 我的网关 |
| API 地址 | 服务的完整地址 | https://gateway.example/v1 |
| API 协议 | 接口协议,三种可选 | openai-completions |
| API 密钥访问模型服务的凭据,通常以 sk- 开头,需妥善保管。 | 该服务的密钥 | sk-... |
| 模型目录 | 列出可用的模型 ID | 见下方说明 |
0.1.5-alpha.2 起,API 地址会先校验协议(必须 http:// 或 https://)并自动归一化尾斜杠,填错会立即报错提示,不用等服务返回 404 才知道坏了。
API 协议选哪个
- openai-completions:标准 OpenAI 对话补全协议,绝大多数服务都兼容,默认选这个
- openai-responses:OpenAI 新版 Responses 协议,只有 OpenAI 自家最新服务用
- anthropic-messages:Anthropic(Claude)的消息协议,0.1.2-rc.1 起 dsh 能直接拉取 Claude 官方的模型列表
不确定就选第一个。
模型目录怎么填
表单里有一个模型目录区域,两种填法:
- 点获取可用模型,dsh 会自动请求服务把模型列表拉下来。请求使用表单当前的 API 地址、协议和密钥;已保存的提供商则用已存储的密钥。拉取成功后会弹出一个可搜索的选择框,搜索、勾选想要的模型,再点添加所选
- 如果服务不支持列举模型,点添加模型手动填:先填模型 ID(请求里用的原始 ID,比如
qwen2.5-7b),再填显示名称(界面下拉里看到的)
填完点创建提供商就完成了。
探测模型的局限
探测读取的是常见网关公开的列表格式,但并非每个端点都用这些格式作答,所以它只是便利手段而非保证:探测失败或列表为空时,手动添加模型 ID 即可,效果完全一样。内置提供商一律由已安装目录作答,即使其 API 地址指向网关也是如此;要查看网关实际提供的模型,请通过自定义提供商探测。
哪些协议能自动列举模型
获取可用模型 走 dsh 内部的 model discovery,0.1.2-rc.1 起支持 OpenAI 兼容协议(openai-completions / openai-responses)和 Anthropic Messages 协议两家。Anthropic 用自己的 GET /v1/models 端点配 x-api-key + anthropic-version 请求头,所以官方 Claude 接口、AWS Bedrock 这类 Anthropic 兼容网关点一下就能拉下模型列表。Azure、Codex 等走非 Bearer 认证的协议不在此列,仍需手动填模型 ID。
让自定义模型支持图片
如果自定义提供商背后是个多模态模型,dsh 默认把它当纯文本。表单里没有"是否支持图片"的勾选项,需要在 $DSH_HOME/settings.yaml 里给这个模型声明输入模态:
llm-pi-ai:
providers:
my-gateway:
apiKeyEnv: GATEWAY_API_KEY
api: openai-completions
baseURL: https://gateway.example/v1
models:
- id: vision-preview
input: [text, image]input 只对该模型生效;如果该提供商下所有模型都支持图片,可以写到路由级的 defaultInput: [text, image] 作为兜底。声明了图片模态,你在对话里粘贴图片它才会接收,否则会在发送前拒绝。
0.1.6-alpha.2 起,这件事也可以在设置界面里做:打开模型编辑表单,模型选项下有图片输入一项,三档可选,支持(声明文本 + 图片)、不支持(仅文本)、默认(移除显式声明,回到继承规则:自定义模型继承已安装目录或提供商默认值,DeepSeek 目录里没写模态就当仅文本)。不用再手改 settings.yaml。注意 DeepSeek 模型选了不支持图片后,它名下的图片请求限制字段会被一并清掉,想再开图片得重新配。
网关总拒绝请求?检查兼容性
有些 OpenAI 兼容网关地址通、密钥也对,却每条请求都报错。原因是 dsh 的 pi-ai 适配器会按端点推断请求形态:带推理的模型会把系统提示以 developer 角色发送、输出上限用 max_completion_tokens 字段,而很多网关只认 max_tokens、不认 developer 角色。同样在 settings.yaml 里修正路由:
llm-pi-ai:
providers:
my-gateway:
apiKeyEnv: GATEWAY_API_KEY
api: openai-completions
baseURL: https://gateway.example/v1
compat:
supportsDeveloperRole: false
maxTokensField: max_tokens
models:
- id: my-model最常见的两步就是 supportsDeveloperRole: false 加 maxTokensField: max_tokens。开关名都要给值,留空会被拒绝;具体支持哪些开关以配置目录里的 PiAiCompatProfile 为准。
给自定义模型加推理等级
对于声明了推理等级的模型,模型选择器会提供推理等级菜单。内置提供商的模型从已安装目录继承其等级。手动录入的模型不声明任何等级,因此模型菜单里不会出现推理等级项,由端点自身的默认值决定模型是否思考。
在 $DSH_HOME/settings.yaml 中用 reasoningEfforts 声明等级:
llm-pi-ai:
providers:
my-gateway:
apiKeyEnv: GATEWAY_API_KEY
api: openai-completions
baseURL: https://gateway.example/v1
reasoning: high
models:
- id: my-reasoner
reasoningEfforts:
off:
high: high
max: max每个键都是菜单提供的一个等级,其值是在协议上以 reasoning_effort 发送的写法,因此 max: xhigh 可以为自有一套词汇的网关重命名某个等级。只有 off 可以留空,因为对多数端点来说,不思考就是不传该参数。路由的 reasoning 是会话尚未选择等级时采用的等级;在选择器中选定某个等级后,它会与模型一起保存为新会话的默认值。
DeepSeek 模型不用配
DeepSeek 自身的路由不需要以上任何配置:其模型已经提供 off、low、high 和 max,llm-deepseek.reasoningEffort 设置选择器的起始默认值即可。1.1 节配好的 DeepSeek 提供商开箱即用。
实战:接一个本地 Ollama
拿最常见的本地模型场景举例。假设你装了 Ollama 并跑起了 qwen2.5:7b:
- 模型页点添加模型提供商,模式切到自定义模型 API
- Provider ID 填
ollama-local - 显示名称填
本地 Ollama - API 地址填
http://localhost:11434/v1 - API 协议选
openai-completions - API 密钥随便填一个占位(本地服务通常不校验)
- 点获取可用模型,或手动添加模型 ID
qwen2.5:7b - 点创建提供商
之后就能在主界面的模型选择器里看到本地 Ollama了。
本地服务的地址
本机服务用 localhost 就行。如果 Ollama 跑在另一台机器上,地址要换成那台机器的局域网 IP,并确认服务监听了非本机端口。
常见问题
问:填完自定义提供商,模型选择器里看不到模型?
先确认模型目录里有没有模型。用获取可用模型拉一次,不行就手动添加。另外确认 API 地址和协议没选错,地址末尾的路径(比如 /v1)要和服务要求一致。
问:保存时报"无法连接"?
地址不对或者服务没起来。先在浏览器里直接访问 API 地址试试,能通再回来填。
小结
- 一个添加模型提供商入口管两种接法(0.1.7 起),卡内分段切换第三方与自定义模式,草稿互不丢失
- 内置支持二十多家提供商,选完填密钥即可
- 自定义提供商适合本地模型、中转、公司网关,关键是填对地址 + 协议 + 模型
- 模型目录可以用获取可用模型自动拉取(弹出可搜索选择框),也可以手动添加
- 推理等级、图片模态、网关兼容性等进阶字段在
settings.yaml里配,表单只管最基本的字段
模型配好了,接下来选一个工作区,告诉 dsh 在哪个地盘干活。