dsh-model-think-level
在官方「模型」页为第三方模型补上思考等级、图片输入与生图;一个供应商可配多把密钥,按模型分流、失败自动换密钥重试,并可配置按路由的请求头、查看余额。
安装
dsh plugin --profile web add dsh-model-think-level
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
DSH Model Think Level



给 DSH 里的每一个第三方模型补齐思考等级、图片输入与生图能力。
DSH 自带的 Models 页只认得它自己目录里的模型。中转站、自建网关、聚合 API 上的模型往往没有推理档位、不能声明图片输入、更不能生图;一个供应商只能填一把密钥,配好的请求头还会被适配层自己的归属头盖掉。这个插件把这四件事一次补齐,而且全部长在官方页面上——官方的模型页、官方的供应商编辑卡、官方的输入框菜单,只是多出了本来该有的控件,没有第二套设置界面。
功能一览
- 思考等级 — 每个模型行一个开关和一份档位表(
off/minimal/low/medium/high/xhigh/max),每一档都能改真正发出去的取值。输入框菜单里一条滑杆随时切档,也能给新会话定默认档位,不设则跟随记忆。 - 自动识别 — 内置 87 条模型知识库,叠加端点输出模态和模型名启发式,自动补上思考档位、图片输入、上下文容量;容量在模型行右侧显示为
128K/1M。 - 模型选择器 — 供应商 → 模型两栏、搜索、图片输入徽章、拖拽排序、按供应商启停。只列对话模型,生图模型不进切换器,也不计入模型数。
- 多密钥 — 一个供应商放 N 把密钥,按把启停、按把圈定模型范围、按把指定协议;保存后自动探测每把密钥能服务哪些模型。
- 自动重试 — 401/403/408/429/5xx 和「分组里没有这个模型」自动换下一把密钥,配冷却排序,把还在冷却里的密钥排到最后;请求一旦开始输出内容就不再重放。
- 自定义请求头 — 每个路由可配任意请求头(含
user-agent),在 fetch 层按请求重新盖回去;同源冲突、与官方适配器或同类插件的争抢都会被检出。 - 请求伪装 — 每个路由可选 Codex / Claude 两种官方 CLI 身份:客户端请求头,以及 Claude 的 Messages 请求体身份段一并补齐;默认关闭,与自定义请求头同一区块。
- 生图 — 勾一下「生图」就能把任意模型变成生图模型,对话模型调用原生工具
generate_image出图,支持参考图改图、多图并出、默认参数与超时。 - 自动继续 — 会话因为断线、超时、撞上输出上限停住时,替你补一条「继续」,可展开配置等待秒数和最多重试次数。
- 余额 — 每个供应商可选配一个只读余额接口,模型页直接显示余额,支持手动刷新。
选择模型与思考等级
输入框的模型切换器只列对话模型:被标记为「生图」的模型不出现在这里,供应商计数也不含它们。同一个菜单里,模型行下面是思考等级:
- 每个模型行右侧显示已声明的上下文窗口(
128K、1M;K/M/B/T都是简写,也接受纯数字和千分位),留空则不显示。 - 插件编辑器所在的行会隐藏官方自带的「推理等级」编辑区——同一个字段只留一份控件。
- 支持图片输入的模型带视觉徽章;档位表来自模型行配置,也可以点模型页的「自动获取思考等级」让插件补齐。
安装
在插件市场里填包名 dsh-model-think-level 安装,或者用命令行:
dsh plugin add dsh-model-think-level
从源码安装:
git clone <repo> && cd dsh-model-think-level npm ci && npm run build dsh plugin add .
装完重启 DSH。运行环境需要 Node.js ^22.19.0 || >=24。
配置页面
官方供应商编辑卡原本是一根长列表,插件把它改成四个页签:供应商配置、模型配置、高级配置、指纹检测。生图的默认参数和自动继续不在卡片里,而在模型页标题行的「高级设置」浮层里。
供应商配置:多密钥、地址与余额
密钥列表。 官方那把「API 密钥」输入框被换成卡片式列表,每行一把密钥:
- 行首圆点是对勾开关,亮起表示参与路由,灰色表示暂停;停用只把密钥移出分流池,别名、模型范围、协议指定全部保留。行尾是「启用」。
- 「+ 添加另一个密钥」继续加。最后一把启用中的密钥不允许停用——否则请求会回落到适配器自己的单密钥路径,仍然用刚被停用的那把签名。
- 悬停某一行可展开该密钥的模型范围:该供应商已添加模型的多选胶囊,留空(「全部模型」)表示不做限制。
- 同一行还能指定这把密钥的协议,见下文「按密钥切换协议与多地址」。
- 新建供应商时也可以先攒草稿密钥:点「创建」落库后才真正写入,第一把自动启用;刷新页面丢弃草稿。挂载前已经敲进官方输入框的值留在原处。供应商 id 撞上已存在的供应商时,草稿不会写进对方。
端点。 「API 地址」是主地址;「更多端点」里可以按地址家族各配一条:一个 OpenAI 系(Chat Completions / Responses 共用)、一个 Anthropic 系。
余额。 「API 地址」下方、「更多端点」展开区里多一行余额:填一个只读的余额接口地址(http(s)://…),该供应商在模型页列表的启用开关前会显示「余额 12.34」。没填不显示、也不占位;清空地址即撤下。
- 请求由宿主发起(浏览器直连会撞 CORS),带该路由密钥列表里的第一把密钥:OpenAI 系协议用
Authorization: Bearer,Anthropic 系用x-api-key。多把密钥只查第一把。超时 30 秒,不跟随重定向,密钥只发往填写的地址本身。 - 地址保存在
key-index.json的balances字段,与协议地址互不覆盖;改完立即生效,不用重启。 - 响应支持 JSON 或纯数字,按键名认余额:
balance、total_balance、available_balance、remaining、total_available、credit/credits、amount、left、remain、*_quota(大小写、下划线、连字符不敏感),同层的currency/unit决定$/¥;OpenRouter 风格的total_credits/total_usage按两者之差算。认不出余额按读取失败处理,不显示金额。 - 只在打开模型页时读一次,不轮询:每次打开、每家读一次;留在页面上不会反复请求;在配置卡里改完地址会立即重读。
- 读取失败(超时、接口报错、认不出余额)时继续显示上一次成功的金额;从未成功过才显示「余额 —」,悬停可看宿主返回的原因。行尾刷新图标可以随时手动重取,刷新期间保留当前金额,失败仍沿用旧值。
模型配置
- 页签顶部是「模型目录」「恢复默认模型」「获取可用模型」「自动获取思考等级」。
- 每个模型行从左到右:模型名、上下文容量、思考档位编辑入口、输入模态(文本 / 图片 / 生图)。
- 输入模态三档互斥。 勾「生图」即把模型标记为图像生成模型(写入该行的
inputImageGen标记,同时清掉文本/图片声明),并把它从输入框切换器里隐藏;勾文本或图片则回到普通对话模型。「自动获取思考等级」与后台自动补全同样会识别生图模型:端点的输出模态(如output_modalities: ["image"])、知识库与模型命名(gpt-image、dall-e、flux、seedream等)都会被打上标记。 - 「获取可用模型」是宿主的一次普通目录读取,插件不替你探测、也不会自动把模型写进供应商:读到的模型进官方勾选列表,你勾选后才写入。插件只是顺带观察每把密钥各自返回了什么,并在多把密钥合并时做一次保守过滤——只有每一把启用中的密钥都成功给出了目录、且没有任何一把列出某模型时,该模型不出现在合并结果里(有密钥没读到=情况未知,不过滤)。
高级配置:自定义请求头
一张「名称 / 值」表,加一行就是加一个请求头,user-agent 也在这里改。
- 请求头存在官方供应商档案的
headers字典里,换机器、换配置都跟着走。 - 真正生效点在全局 fetch 接缝:每个请求都会重新盖一遍,包括列模型、探测这类请求,不只是对话请求。
user-agent最长 512 字符。- 冲突会被检出并提示:同源上别的路由已占用同名请求头、官方
dsh-llm-pi-ai的transformHeaders已经在处理这组头、或者别的同类插件也在写同一个头。
高级配置:请求伪装
「请求头」下面是同一个表单里的第二个区块:请求伪装。默认关闭,按路由保存,可选 Codex 或 Claude——让该路由的请求以对应厂商官方 CLI 的身份发出,而不是以 SDK 的默认身份。
- 两个区块之间有一条分割线,取消 / 保存只有一组,放在最下面:它提交的是整个高级配置(请求头 + 伪装)。伪装是草稿——点选项只是改了表单,按保存才写入;按取消回到已保存的值。
- 存的是插件自己的文件
<DSH_HOME>/dsh-model-think-level/camouflage.json,不写进官方供应商档案;换了版本、删了文件就回到关闭。 - Codex:改
user-agent为codex_cli_rs/<版本>,补originator: codex_cli_rs和一个稳定的x-codex-session-id;请求体不动。 - Claude:改
user-agent为claude-cli/<版本>,补x-app: cli、anthropic-version、anthropic-beta,并在/v1/messages的请求体里补上校验要看的身份 system 段与metadata.user_id——tools、图片、签名块一律原样保留。请求体的改动会同步重算content-length。 - 与自定义请求头的优先级:伪装先落,请求头表里的同名项最后生效——你在表里显式写了
user-agent,就以你的为准;anthropic-version只有缺失时才补,已有值保留。 - 只影响这个路由真实发出的请求。探测密钥、余额、生图这类旁路请求不带伪装。
高级设置:生图默认参数与自动继续
模型页标题行的按钮打开「高级设置」浮层,目前有两张卡。浮层高度固定(折叠、展开都不变,内容超出时才在浮层内部滚动),两张卡都能点卡片名或右侧箭头展开:
生图。 卡片头一行是总开关,默认折叠;展开后:
- 第一行选默认参数:尺寸 / 质量 / 张数,以及超时——下拉 5 / 10 / 15 / 30 / 60 分钟,默认 5 分钟。一次调用的凭据读取、参考图读取、参数回退、响应体与图片下载和附件保存共享这个总预算,重试不重新计时。
- 第二行用下拉选默认生图模型,未设时显示「未设置」。没点名的工具调用就用这里的模型。
- 下面列出所有被标记的模型,每行保留「测试」和「试一张」两个动作;尺寸/质量/张数只在第一行选一处生效。
- 卡片只负责默认值和默认模型,没有独立的工具状态卡;工具注册失败时卡片顶部直接显示宿主给的那句原因(
GET /dsh-model-think-level/image-config的tool.error),成功注册不显示任何提示。
自动继续。 默认关闭,细节见下文「自动继续」。
<!-- TODO(截图): 这一屏(高级设置:生图 + 自动继续)和「指纹检测」页签还没有截图,补上后插在上面两个小节里。 -->
指纹检测
每个检测结果卡可以逐行折叠/展开,默认收起:点行头的箭头或模型名展开,徽章、证据行与检测按钮始终在场。行头只留「N / 3 题」的进度,相似度等明细放在展开的结果卡里。
多密钥路由与自动重试
同一个供应商可以登记多把密钥,请求进来时按「模型 → 密钥」自动分流。
什么时候换密钥。 密钥按列表顺序排队,一个模型如果多把密钥都能访问,先走靠前的那把。命中这些情况自动换下一把能服务该模型的密钥:
- 状态码 401 / 403 / 408 / 429 / 5xx;
- 响应体说明「这个模型(或这个分组)没有它」——
model_not_found、Model "…" is not supported by any configured account in this group、no available channel,以及中
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:31,最后更新 2026-11-06