在本机跑一个 OpenAI 兼容反代,把 DSH 的对话请求转给 grok.online,无需 API key 即可在模型选择器里用它的两个对话模型。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:cc1104666/dsh-plugins#path:/packages/dsh-grok-online
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
把 grok.online 的免费对话额度接进 DSH 的模型选择器。
不需要 API Key、不需要登录、不花钱。 代价是它的免费额度很小:每个出口 IP 每天 4 条, 用完还能领 5 条奖励,合计 9 条,UTC 零点(北京时间 08:00)重置。
它做了什么
DSH 模型选择器 ──OpenAI──▶ 本机反代 127.0.0.1:43690/v1
│ 翻译:messages → {model, role, messages}
▼
grok.online POST /api/chat (SSE)
│ OpenRouter → x-ai/grok-4.20 / grok-4.3
▼
反代把上游 chunk 重新包装成标准 OpenAI chunk
为什么必须反代(和 dsh-lightvela 相反):LightVela 的网关本身就是 OpenAI 兼容的,
填个 baseURL 就行;grok.online 只有一个自定义接口,请求体、响应流都是它自己的一套。
模型
| id | 上游 | 说明 |
|---|---|---|
grok-4-20 |
x-ai/grok-4.20 |
快,日常对话 |
grok-4-3 |
x-ai/grok-4.3 |
带 reasoning,慢一点 |
grok-4-7 |
x-ai/grok-4.7 |
不注册:站点菜单里有,但网页 API 一律 403 model_locked |
模型名写法宽容:x-ai/grok-4.20、grok-4.20、Grok 4.20 都会被收成 grok-4-20。
额度
| 项 | 值 |
|---|---|
| 免费 | 4 条/天 |
| 奖励 | 用完后再领 5 条(POST /api/chat?unlock=1) |
| 合计 | 9 条/天 |
| 记账 | 按出口 IP,不种 cookie |
| 重置 | UTC 零点 = 北京时间 08:00 |
| 用完的报错 | 429 {"error":{"code":"limit"}} |
额度用完时,反代会自动替你领一次奖励再重试(只做一次,不循环)。领完还是 0,就只能等重置或换出口 IP。
因为 DSH 的一轮工具调用可能连着消耗好几条,这个插件适合「问一句答一句」,不适合跑长任务。
出口池(额度用完自动换 IP)
额度既然是按出口 IP 记的,那「从哪个 IP 出去」就可以做成一个池子:一发请求被限流,就换下一个出口重试。
面板 ② 里粘贴代理,一行一个,支持这些写法:
http://1.2.3.4:8000 明文代理(CONNECT 隧道)
http://user:pass@1.2.3.4:8000 带 Basic 认证
socks5://user:pass@5.6.7.8:1080 SOCKS5(域名交给代理解析)
1.2.3.4:8000:user:pass 国内代理商常见的四段格式
http://gate.proxy.cn:15818 #rotating
http://acct-lite-country_SG-r_1m-s_{session}:pw@gate.nstproxy.io:24125 住宅代理(见下)
行尾加 #rotating(或 #动态)表示它是动态/隧道代理 —— 每次连接换一个出口 IP。
住宅代理:账号里写 {session} 才是真·按请求换 IP
住宅代理商的「动态」不是靠重连,而是靠换会话名:同一个账号 + 不同 s_xxxSuffix = 不同出口 IP。
有的代理商一个会话是 120 分钟粘性的 —— 这种情况下你重连一百次,IP 也不会变。
所以账号里可以写占位符,插件每次建连时换一个随机串:
http://账号-country_SG-r_1m-s_{session}:密码@gate.nstproxy.io:24125
^^^^^^^^^^ 每发请求换一个随机 10 位串
{session} / {s} / {sid} 三种写法都认;写在密码里也行(有些代理商把参数放密码)。
带占位符的行自动按动态代理处理,不用再写 #rotating,面板上标「自换 IP」。
实测(nstproxy 住宅,5 个国家各 3 发):每个新会话都是干净 IP,?credits=1 一律回 5 条 ——
也就是每次请求都是一份新额度,配额上限由代理商的流量/并发决定,而不是站点的 9 条。
关于 r_ 和 country_ 这两个参数怎么选:
| 参数 | 建议 | 原因 |
|---|---|---|
r_120m → r_1m |
改短 | 既然每发请求都换会话,r_ 只决定"同一个会话能活多久"。120 分钟等于把 IP 攥两小时,没必要。实测 1 分钟够了:粘性会话名 75 秒后再连就换 IP,而会话到期不会掐断已经在跑的连接(拿维基媒体实时流压 82 秒,3 次里 2 次完整跑满,剩下 1 次是出口本身的抖动) |
country_CN → 海外 |
改掉 | CN 池子小(6 个随机会话只出现 4 个不同 IP)、而且要先出海再回源,单发 8–12 秒;SG 5.0s / JP 5.7s / 中国香港 6.0s。CN 留作最后兜底即可 |
改短
r_的真正好处是降级也安全:万一哪天占位符被删掉、或者代理商复用会话名,r_1m下的出口仍然每分钟自己滚一次 IP;写r_120m就会把同一个 IP 攥两个小时。
| 类型 | 一天大概能拿多少 | 说明 |
|---|---|---|
| 直连 | 9 条 | 就是你自己的宽带出口 |
| 静态代理 × N | ≈ 9N 条 | 每个出口各记各的 9 条,用完就没了 |
| 动态隧道代理(#rotating) | 看代理商 | 每次连接换 IP;如果是 120 分钟粘性会话,等于没换 |
住宅代理(带 {session}) |
看代理商流量 | 每发请求一个新 IP、一份新额度,实测稳定 |
它不是"无限":换 IP 绕开的是站点的免费额度设计,站点风控真要拦(403、加验证码、封段)的时候插件没办法。 别拿它当主力模型刷长任务。
轮换规则(lib/rotate.js):
- 只对跟 IP 有关的失败换出口:
limit/network/rate;model_locked、too_long换多少 IP 都一样,不浪费请求。 - 已经开始吐字就不换了 —— 否则会拼出两段半截回答,宁可报错。
- 排序:已知有额度的(多的优先)→ 未探测的 → 冷却中的 → 今天已确认用完的;
动态代理 / 带
{session}的住宅代理始终排最前,多个国家之间按「最久没用」轮着来。 - 单发请求最多试
proxyMaxAttempts(默认 10)个出口,防止池子写错时打一串 429; 同一个动态出口还会再打proxyRerollRotating次(默认 2)—— 住宅出口的 TLS 抖动大约 10~20%, 重试一次就换一个新 IP,比直接跳到下一个国家便宜。 - 账本按 UTC 日清零,和站点重置对齐;网络类失败进 8–120 秒冷却,避免连续撞同一个坏代理。
面板
输入框下方「Grok」胶囊 / 插件页卡片,四块:
- 今日额度 —— 剩几条、奖励领没领、规则说明;「刷新」「领取 +5」
- 出口池 —— 粘贴代理、开关自动换出口、每个出口的状态(剩几条 / 出口 IP / 延迟 / 已用完 / 冷却中,
带
{session}的标「自换 IP」);「测」「删」 - 模型 —— 两个可用模型 + 一个被锁的说明;「注册进 DSH」;反代地址与「重启反代」
- 试一句 —— 真打一发(会走出口池),分辨「模型不行」还是「没注册上」
接口
宿主半区挂在 /plugins/dsh-grok-online:
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /status |
额度、模型、反代端口、provider 注册状态、出口池 |
| POST | /credits/refresh |
打上游 ?credits=1 |
| POST | /credits/unlock |
打上游 ?unlock=1 领 5 条 |
| POST | /models/register |
把 provider 写进 llm-pi-ai |
| POST | /relay/restart |
换端口重启反代并重注册 |
| POST | /proxy/save |
{text, mode?} 保存出口池({clear:true} 才是清空) |
| POST | /proxy/mode |
{mode:'auto'|'off'} 自动换出口开关 |
| POST | /proxy/test |
{id?} 探测出口额度 + 出口 IP(不消耗额度,不传 id 测全部,最多 12 个) |
| POST | /proxy/remove |
{id} 删一个出口 |
| POST | /test |
{model, text} 真打一发(走出口池) |
本机反代只监听 127.0.0.1,两个端点:
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /v1/models |
OpenAI 形状的模型列表 |
| POST | /v1/chat/completions |
支持 stream,chunk 是标准 OpenAI chunk,结尾 data: [DONE] |
注册进 DSH 的方式
settings.mutate('llm-pi-ai', [{
op: 'set',
path: ['providers', 'grok-online'],
value: {
displayName: 'Grok.online',
apiKeyEnv: 'GROK_ONLINE_API_KEY', // credentials 里放一个常量 local-relay,反代不校验
api: 'openai-completions',
baseURL: 'http://127.0.0.1:43690/v1',
models: [{ id: 'grok-4-20', name: 'Grok 4.20', input: ['text'] }, ...],
},
}])
开机就写一遍,所以插件重装、profile 重建后模型还在。
故障对照
| 现象 | 原因 / 处理 |
|---|---|
| 选择器里没有「Grok.online」组 | 宿主半区没加载。面板点「注册进 DSH」,然后刷新页面;仍没有就重启 DSH |
| 面板报 404 / 405 | 宿主还是旧代码(浏览器半区热读、宿主不热更)。重启 DSH |
| 发消息报 429「额度用完了」 | 今天 9 条用尽。等北京时间 08:00,或换出口 IP;面板可先「领取 +5」,或开出口池 |
| 出口池全「已用完」 | 这一批 IP 今天的额度都打光了。等 UTC 零点,或补新出口 |
| 出口一直「冷却中」 | 网络层就不通(ECONNREFUSED / 超时 / 407)。用「测」看具体报错,407 是代理账号密码不对 |
| 报「代理要认证(407)」 | 代理地址里的账号密码不对,或缺认证 |
| 换了很多出口还是不行 | 站点的风险控制在拦(同一 UA 高频换 IP)。停一会儿,别继续刷 |
报 403 model_locked |
选了 Grok 4.7。换成 grok-4-20 / grok-4-3 |
| 报「上下文太长」 | 站点单轮只吃约 1 万字符,插件会从最早的开始裁;清会话再发 |
| 回复很慢或 502 | 上游 OpenRouter 忙。重试或换模型 |
| 反代端口冲突 | 会自动顺延到下一个端口;面板点「重启反代」可重新分配并重注册 |
开发
node scripts/smoke.mjs # 62 项:store / 模型名归一 / 请求翻译 / 路由 / 反代真起真应答 /
# 出口池排序与记账 / 轮换策略(含"吐字后不换")/
# 真穿 CONNECT+SOCKS5 代理(本地自签证书)/
# {session} 每发换会话名(起一个记账代理真收报文)/ 面板渲染
提醒
这是把网页端的免费额度接到个人使用环境里。额度限制是站点自己定的,出口池只是 「把同一个免费额度的规则换个 IP 再用一遍」,本质上绕过了它的限额设计: 换得太凶可能被风控(403 / 验证码 / 封出口段),也可能连累你用的代理服务商。 插件这边做了冷却、预算上限、失败不重复撞同一个出口,但那只是减少浪费,不是"保证不被发现"。
别拿它跑批量任务,也别指望它替代真 API —— 它的价值是「偶尔想问问 Grok 时不用切浏览器」, 出口池的价值是「今天那 9 条用完之后,不用等到明早」。
链接
同类插件
Ebony-Vinyl/dsh-our-free-model★ 55971
为 dsh 接入免费模型车道(含 DeepSeek V4.1 Flash、Kimi K3 等),无需登录、注册或填写 API Key,并提供本地 OpenAI 兼容网关、降级路由与用量看板。
dingminhua/dsh-connect-workbuddy★ 993
将本机登录的 WorkBuddy 模型(国内版与国际版)接入 DSH,每次刷新按上游目录读取每个模型的积分倍率,支持逐模型图片输入开关、带自动换号的账号池、手动每日签到,以及卡片与输入框里的只读积分胶囊读数。
Alice-Marx/dsh-model-router★ 603
为 DeepSeek Harness 规划有依赖的工作包,将其分配给已配置的模型 API 或支持的厂商 CLI,并提供费用预览。
V1ki/dsh-plugin-subscriptions★ 546
把 ChatGPT(Codex)、Claude、Grok 订阅当作 DeepSeek Harness 的 LLM 提供方:设置页登录、模型目录、用量展示,以及 image_generate、video_generate 与 x_search 工具。
Mars-Sea/dsh-commandcode-provider★ 446
非官方 Command Code 模型接入插件:注册 `commandcode` 路由,带实时模型目录与推理强度支持。
FishBottle7/opencode2dsh★ 384
将 OpenCode Zen 免费模型接入 DeepSeek Harness,无需 API Key。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。