dsh-multi2api
Verifieddsh-multi2api · v0.1.8 · MIT · Web UI
Multi2API 账号池:把多个 WorkBuddy 账号变成 DSH 里一个个互不干扰的模型。
Install
dsh plugin add dsh-multi2api Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
dsh-multi2api
把多个 WorkBuddy(腾讯 CodeBuddy)账号变成 DeepSeek Harness 里一个个互不干扰的模型: 一个账号一个模型,用哪个号就切到哪个模型,不会串号、不会自己换号。
它做了什么
- 自带程序:包里带好了各个平台编译好的
multi2api程序(Linux / macOS / Windows,x64 与 arm64), 装上就能跑,机器上不需要装 Go。 - 进程托管:插件启动时自动拉起
multi2api,崩了会自动重启;点"重启服务"手动重启。 - 一账号一模型:账号池里每个账号都会变成 DSH 里的一个模型, 切模型 = 切账号,互不影响。
- 自动检测上游模型:直接问上游要可用模型清单(模型名、上下文长度、能力、积分倍率都是上游实时给的), 不用手动维护。上游有几个模型,面板里就能看到几个。
- 模型名 + 账号名:每个账号 × 每个上游模型都会拼成一条, 名字形如「GLM-5.3 · 13800138000」,一眼就知道用哪个号跑哪个模型。
- 积分倍率可见:面板里有一张表,列出每个模型的倍率(比如
x0.11 credits),花多少心里有数。 - 自动模式:另有一个
auto模型,走"积分最高的健康账号",适合不想管号的时候。 - 选择启用:上游模型和账号都能单独开关。没启用的模型不会出现在聊天界面的模型列表里, 关掉的账号也不会占位置——只留你要用的那几条,清清爽爽。
- 网页管理面板:在「设置 → 插件」里多一个页签,可以开关模型、开关账号、看倍率、看余额、加号、删号、导号、看日志、重启。
安装
这是一个 DSH 插件,用 DSH 自带的插件命令装:
dsh plugin --profile web install dsh-multi2api
把 web 换成你要装的 profile 名字(比如 tui、headless)。装完重启 DSH 就能用。
也可以直接在 DSH 网页端左侧栏的 插件(Plugins) 页面里,点「添加插件」填包名 dsh-multi2api 安装。
npm install dsh-multi2api也能下载到这个包,但它只是把包装进普通node_modules, 不会挂进你的 profile,还得自己改dsh.profile.bundles,所以推荐用上面的命令。
使用
- 打开「设置 → 插件 → Multi2API 账号池」。
- 点「添加账号」,浏览器会打开登录页,用手机号登录 WorkBuddy;面板会自动把账号存下来。
- 也可以点「导入账号文件」,一次选多个别的机器导出的凭证 JSON,批量加号。
- 在面板的模型表里给要用的模型打勾、在账号卡片上开关账号。只有打勾的模型和开着的账号, 才会出现在聊天界面的模型列表里;没打勾的一律不显示,列表不会被塞满。
- 回到会话,在模型选择里挑「模型名 · 账号名」的那条(模型 ID 形如
glm-5.3-13800138000, 前面是上游模型,后面是账号别名)。 - 想不管号的时候,选
auto。
数据放在哪
默认 ~/.dsh/multi2api/:
auths/—— 各账号的登录信息(权限 600)config.json—— 被托管程序的配置(插件自动生成)api_key—— 本地接口密钥(插件自动生成)selection.json—— 哪些模型启用、哪些账号关掉auto_checkin.json—— 自动签到开关data/state.json—— 运行状态
可以在插件设置里改「数据目录」。
注意事项
- 账号的增删需要重启被托管程序才会生效,面板会自动帮你重启。
- 默认本地端口 7864,被占用时会自动往后找空闲端口。
- 如果之前手动跑过
multi2api,把它的auths/*.json复制到本插件的数据目录, 或者在面板里用「导入账号文件」导入即可。
更新日志
0.1.8
修「发图就报 pi-ai image input requires the durable attachment service」,外加一处一直没生效的设置。
- 图片发不出去:
dsh-llm-pi-ai在处理含图请求前会问适配器要 DSH 的 durable attachment 服务,拿不到就直接抛错、请求根本不发出去。本插件构造PiAiAdapter时漏了这两个字段,所以任何带图的请求都必然失败。现在按 DSH 自己那个 pi-ai provider 的写法补上resolveAttachments与resolveImageAccess(resolveImageAttachmentAccess本就是@deepseek-ai/dsh-llm的公开导出)。 - 输出上限可能一直没生效:pi-ai 决定「最大输出」字段用哪个拼写时,未显式声明就退回
detectCompat(),而它只看 provider 名和 baseUrl。本插件的路由是provider=multi2api+http://127.0.0.1:<端口>/v1的本地代理,一个特征都匹配不上, 于是回落到 OpenAI 新拼写max_completion_tokens—— 对 DeepSeek 系上游是错的, 模型上声明的maxTokens(上游默认 128000)会被上游忽略(不报错,只是不生效)。 现在钉死为max_tokens。已知同类问题作者此前已手动改对 4 个 (thinkingFormat/supportsDeveloperRole/supportsStore/requiresReasoningContentOnAssistantMessages),这是第 5 个。 - 回放降级不再静默:补上
onReplayDegrade,历史里的图片被降级成占位符时会记一条 warning(DSH 自己的 provider 也这么做)。只增加可观测性,不改变行为。
没动的:supports_tool_call(上游会报,但 pi-ai 里没有对应的模型字段,
插件无处声明);credits → cost(上游给的是倍率如 x0.29,而 cost 是"每 token 多少美元",
量纲不同,硬映射只会显示假数字)。
0.1.7
修「刚配好的账号,在聊天界面的模型选择器里看不见」:
- 原因不在刷新,在通知。 服务端的模型清单其实一直是新的 —— 启动时、加/删/导入账号后、
每 30 秒、以及面板点「刷新模型」时都会重拉一遍。查下来是 multi2api 更新完自己的快照,
却从来没有告诉客户端:聊天界面那个模型选择器(
dsh-client-ui-model-selection)持有一份 客户端缓存,只有收到llm/adapters-updated才会重新拉清单。 - 改法:模型清单的指纹一变(也就是那处已经在做的
runtime.invalidate()), 就顺手ctx.emit("llm/adapters-updated")。这个事件名取自 DSH 自己的 Host→客户端转发白名单,所以根 ctx 上 emit 就能送到每个已打开的界面。 - 附带效果:删号、改名、白名单开关导致的模型变化,界面也会立刻跟上, 不用再"先点一下别的模型"来触发重算。
0.1.6
修了三个会让你用不下去的毛病:
- 桌面端(DSH Desktop / Electron)加不上账号:管理接口的写操作守卫原来要求请求必须带
Origin头,而桌面端经 Electron 网络层转发出来的请求不带这个头,于是加号、签到、删号、 保存设置、重启全部 403origin-required。现在去掉了这条硬性要求,改成 「Host 必须是回环地址」+「Origin 一旦出现就必须也是回环」+「必须Content-Type: application/json」, 防跨站伪造和防 DNS rebinding 的能力不变。 - 点了「添加账号」两秒后自己中断:上游在"还没登录完"时返回的是
HTTP 200 + code=11217 (login ing...),旧代码把它当成致命错误抛出去,直接掐断了整个登录流程, 账号永远加不上(那个可以手动复制的登录链接也跟着一起消失了)。现在未完成会被正确识别为 "继续等待"。 - 改成手动确认登录:不再后台自动轮询(它容易判断错)。现在点「添加账号」会立刻显示完整 登录链接并提供「复制链接」按钮——浏览器拉不起来也能自己粘到浏览器里打开。你在浏览器里 登录完成后,回到面板点「我已登录完成」即可。没检测到会提示"再点一次",不会把面板关掉。
许可
MIT
致谢
包里自带的 multi2api 程序基于 itamzxm/ai-multi-platform-proxy(MIT 许可)修改后编译,
按其许可要求在此声明。本插件包内不含任何账号凭证。