dsh-connect-modelscope-token-plan
ModelScope (modelscope.cn) connect bundle for the DeepSeek Harness: a local-usage quota panel for the free API-Inference tier plus optional provider registration.
- Stars
- 0
- Language
- JavaScript
- Created
- Oct 4, 2026
- Updated
- Oct 6, 2026
Introduction
dsh-connect-modelscope-token-plan
把魔搭社区(modelscope.cn)API-Inference 免费额度的本地用量面板接入 DeepSeek Harness 的 Plugins 页(插件卡内联,三个 tab:额度 / 模型 / 接入),并可选把魔搭注册成 DSH 的 LLM provider(id modelscope-token-plan,直连 apiBase,OpenAI 兼容)——注册后魔搭模型进入 DSH 模型选择器,可直接对话调用。见 docs/PROVIDER-M4.md。
姊妹插件:dsh-connect-sensenova-token-plan、dsh-connect-agnes-token-plan(同族结构,受控复制)。
状态:M4 已落地(provider 注册 + 面板「接入为 DSH 模型」),离线测试与 typecheck/build 全绿。
面板长什么样
三个 tab:额度 / 模型 / 接入。
「额度」tab——头条是官方魔粒余额(真实值),下面接本地调用分布:

「模型」tab——一行一个魔搭模型,可勾选启用;开关打开即把魔搭注册为 DSH provider:

三条事实(写代码前先认清)
-
官方有「魔粒」余额端点:
GET {siteBase}/openapi/v1/magicubes/balance(Bearer 访问令牌,匿名 401),返回{success, data:{total_balance, available_balance, frozen_amount}}(2026-10-04 实测,见 docs/SPIKE.md)。推理响应本身仍不带任何额度头。 -
本地计数是辅助口径:面板头条是官方魔粒余额;本地计数只回答官方余额答不了的问题——按模型分布、本地趋势、429 事件流(只统计经本插件的调用,直连魔搭的其它客户端不计入)。次数口径的「推算剩余/参考上限」已从面板移除(官方改魔粒计费后两个单位并排是误导),相应的
dailyQuotaTotal/dailyQuotaPerModel两个社区快照常数也从配置里一并删除了——面板不消费它们,留着只会让人以为能算「还剩几次」。 -
凭据只有一把静态钥匙:魔搭访问令牌(个人中心生成,形如
ms-…),无 OIDC、无密码、无 refresh。默认读 DSH 凭据服务已有的MODELSCOPE_API_KEY引用;MODELSCOPE_API_KEY环境变量只在启动时读一次,且优先级高于存储值(坑见下段);令牌永不入日志、永不进插件目录。凭据分层有个坑(2026-10-05 实测):DSH 凭据服务的优先级里,启动时的环境快照压过存储文件,而那个快照在启动时冻结(不是活的
process.env)。两个后果:①在 DSH 启动之后改环境变量——包括 Windows 用户级变量——不会被看见,改完必须完全重启 DSH(退出全部DeepSeek Harness进程,不只是关窗口)才进快照;②重启让环境变量生效后,它会反过来压过面板里保存的值,而面板仍显示「已保存」。最省事的做法是直接在面板里保存令牌(立即生效,且不依赖重启)。
免费额度怎么算(2026-10 快照,以官方为准)
- 每日免费调用次数按账户计(当前约 2000 次/天,需绑定阿里云 + 实名;规则多次调整过);
- 单模型另有每日上限(社区数据约 500 次/天)与每分钟限频;
- 额度按天重置;耗尽返回 429。
/v1/models免认证可读,不消耗额度。
上面这些数字来自社区公开信息,非官方数据,官方调整后需手动更新本节;它们只用于解释 「额度怎么算」,不参与任何计算——面板不消费次数上限,「还剩几次」算不出来(见下节)。
文档地图
| 何时 | 查 |
|---|---|
| 「上游到底有没有额度信号」 | docs/SPIKE.md(实测记录 + 结论) |
| provider 怎么接入(写代码前) | docs/PROVIDER-M4.md(实现契约) |
| 这版是怎么做出来的、踩过什么坑 | docs/IMPLEMENTATION.md(0.1.0 / M4 实施过程档案) |
| v0.2.0 的十二轮修复细节(已冻结,非入门路径) | docs/archive/2026-10-05-closeout.md |
| 上游端点全景 / 第三方方案对比 | docs/REFERENCES.md、docs/REFERENCE-modelsdev.md |
| v1 要做什么、做到哪了 | docs/ROADMAP.md |
| Host/Client 两半怎么分 | docs/PROVIDER-M4.md(§14 红线)+ docs/IMPLEMENTATION.md;本仓库暂无独立的 ARCHITECTURE.md |
| 开发者校验工具(变异测试 / 覆盖率) | tools/dev/README.md;发布流程见 RELEASING.md |
诚实声明
- 面板头条是官方魔粒余额(真实值);本地计数只统计经本插件的调用——它回答的是分布/趋势/429 事件流,不是余额,直连魔搭的其它客户端不计入。注册 provider 之后,DSH 的全部魔搭调用都经本插件,所以本地计数覆盖全部 DSH 魔搭调用。次数口径的「推算剩余」已从面板移除(官方改魔粒计费后两单位并排是误导),相应地
quota.daily只剩usedLocal一个数——没有limit,也没有推算出的「剩余」。 - 本地计数的口径与 harness 全局账本不同,且刻意不合并。DSH 自己有
@linxin666/dsh-usage,按days→provider→model记成功调用的 token;它只订阅 session 的assistant/message,失败调用一次都不记。所以本插件只做两件全局账本答不了的事:①「经本插件的调用分布与趋势」;②429/错误事件流——这是本插件的独家数据(官方只给总额度余额,不给「哪个模型刚才在限频」)。成功的 token 总量不在此重复记账(详见src/host/usage-observer.ts文件头)。 - 429/错误事件的分类读的是
llm-error-fix重分类之后的 code:被误判成 QUOTA 的 rpm 限频在事件流里记作rate_limit,与退避策略说同一件事。观察层套在重分类层之外,顺序不可反。 - 计数口径:每次流结束记一次 call,含失败、含用户中断(魔搭按次数计费,限频掉的请求同样是一次调用);token 数上游没给时是
null而非 0。偏差方向是按流计次:重试不在流内部发生,而是在流消费完后由agent/request-error瀑布决定重发,因而每次重试各记一次——按「魔搭按次数计费」的口径这反而是对的(每次重发都真打了一次上游)。 - provider 默认关(opt-in,与姊妹插件一致):面板「模型」tab 的「接入为 DSH 模型」开关翻转即生效,面板保存值优先于
cordis.patch.yml的registerProvider默认。 - 已知限制:
reasoning恒为 false。魔搭 API-Inference 是多模型代理,是否吃reasoning_effort取决于背后那个模型,本插件保守默认不发该参数(模型用自己的默认),也不提供思考强度选择器。原理由「发错档位会整条请求 400」已在 2026-10-05 真机探测中证伪:reasoning_effort传"bogus"同样返回 200,值不被校验。真实障碍是无法区分「生效」与「静默忽略」(都是 200),且该端点会在真响应与空壳 200 之间摇摆——档位表做不出来,不是没做。见 docs/PROVIDER-M4.md §4。 - 429 响应形状未实测(不值得烧额度去触发),解析按 OpenAI 惯例兼容,漂移时面板会给
shapeWarnings。 - 面板「模型」tab 的每个模型都外链到其魔搭详情页(
https://www.modelscope.cn/models/{owner}/{model}):魔粒单价只在网页展示、不在官方 API,所以这只是一个人工核对用的跳转,不是数据源(「为什么没有按模型消耗 API」见 docs/REFERENCES.md)。