当前位置:首页 > 技术分享

0 元搭一个自己的大模型 API:免费 Instabox + OpenCode 免费模型池,全流程手把手,免费用 deepseek-v4.1-flash,glm-5.3-flash,mimo-v2.6

admin5小时前技术分享6

一台免费档的 4 核 8G 云电脑,一个开源项目,九个限时免费模型,一个 OpenAI 兼容地址。这篇文章不谈概念,只给能复现的步骤和我踩过的边界。

先亮结果。下面是我自己部署实例的健康检查地址与返回:

https://41980-agqy7jma5cbmmxzhlafbss33gm.instabox.tech/health

返回是这样的:

{"status":"ok","stage":"ready","runtime":{"base":"http://127.0.0.1:40099","pid":303377},"models":{"total":12,"usable":9},"uptime":286.0}

stage: ready,12 个模型里 9 个探测可用。这意味着支持 OpenAI 协议的客户端,把 base_url 换成这个域名就能调模型——不用先充值,也不用单独购买模型额度。runtime.base 是隔离启动的 OpenCode 运行时本地地址,后面会用到。

先把话说在前面:这里的"免费"有三层边界。Instabox 免费档是 beta 政策、会休眠、有运行时长上限;OpenCode 的 -free 模型是限时免费、共享限流、提示词可能被用于改进模型;整套东西没有任何 SLA。它适合个人折腾、原型验证、给自己的小工具当后端,不适合生产服务,不适合放任何敏感数据,也不适合承载对外的正式服务。后面第七节会把这些坑逐条摊开。



ScreenShot_2026-11-11_094358_002.png


一、先看清这套东西是怎么串起来的

三层,别混在一起理解:

你的客户端 (OpenAI SDK / curl / 任意兼容工具)
        │  HTTPS + Bearer API_KEY
        ▼
Instabox 公网端口  ←── 把机器内的 41980 映射成一个 HTTPS 域名
        │
        ▼
opencode-to-api (Express, 监听 0.0.0.0:41980)
        │  OpenAI 协议 ↔ OpenCode 协议转换、API Key 鉴权、请求队列
        ▼
OpenCode 运行时 (隔离启动在 127.0.0.1:40099 这类本地随机端口)
        │
        ▼
OpenCode Zen 免费模型池 (cost.input = 0 且 cost.output = 0)
  • Instabox:给一台完整的 Linux 虚拟机,不是容器、不是函数。免费档 1 台、4 vCPU / 8 GiB / 20 GiB 磁盘、5 个快照、每月 100 GiB 出流量、最多 16 个公网端口。

  • opencode-to-api:Gitee 上的开源项目(MIT),把 OpenCode 的免费模型池包装成 /v1/models 和 /v1/chat/completions,支持 SSE 流式。它要求 Node.js ≥ 22、内存 256 MB 起。

  • 公网端口:让本机服务有了一个能被外网访问的 HTTPS 地址。

为什么这三层能凑到一起?因为 Instabox 默认的 agent-browser 模板预装了 Node.js 22.23.3、OpenCode 1.19.5、Docker 与 Docker Compose,正好卡在 opencode-to-api 的环境要求上。8 GiB 内存对它 256 MB 的起步门槛属于富余,20 GiB 磁盘也够放运行时和日志。


二、准备三样东西

1. 注册并建机

打开 instabox.sh,用 GitHub 或 Google 账号登录。据社区反馈,注册需要审核,新账号可能进 waitlist 等邀请码,一般 1–2 天——这不是官方承诺的时效,控制台界面也可能调整,以当下页面为准。

激活后进 Machines → Create machine,模板选默认的 agent-browser(控制台里也可能显示为 standard,带桌面环境),确认免费规格是 4 vCPU / 8 GiB / 20 GiB。列表显示 Running 就成了。它就是第一节说的那个预装环境,依赖不用另装。

2. 记下 Machine ID

打开机器 Details,浏览器地址栏里 open= 后面、& 之前那串 m_xxxxxx 就是机器 ID(社区教程中常见的取法,以当前控制台为准)。后面保活脚本要用。

3. 创建 API Key

控制台 → API Keys → Create API Key。权限建议选 Restricted,只开 Machines 的 Read + Write,关掉 Delete(续租不需要删机器)。Key 格式为 ibk_...,只在创建时显示一次,立即存好。

这个 Key 不是给 opencode-to-api 用的,是给 Instabox 的控制面 API 用的(保活脚本调 api.instabox.sh)。两个 Key 别搞混:一个管机器,一个管你自己的模型接口。


三、部署 opencode-to-api

SSH 或网页终端进机器。推荐 Docker Compose,一条命令收工:

git clone https://gitee.com/web/opencode-to-api.git
cd opencode-to-api
docker compose up -d --build
docker compose logs -f | grep "Generated initial"

日志里那行 Generated initial admin API key: xxxxx 就是你自己的接口密钥,同时会持久化到 ~/.opencode-to-api/api-keys.json。把它存进密码管理器,不要贴进任何截图、文章或仓库。

不用 Docker 也行:

npm install
npm start          # 监听 0.0.0.0:41980

其他方式还有 PM2(pm2 start ecosystem.config.js)和 systemd,仓库 README 里都有。

首次启动别慌:程序会先自动下载对应平台的 OpenCode 二进制(npmmirror 优先、npmjs 兜底,SHA-512 校验),然后逐个探测模型,每个约 10 秒。这期间 API 可能还没开始监听,等探测跑完就会自动起来。全部探测失败也不用手动重启,调度器 30 分钟后会重试。

本地先验一遍:

curl http://127.0.0.1:41980/health
curl -H "Authorization: Bearer $KEY" http://127.0.0.1:41980/v1/models

几个默认参数值得记住,都在 config/default.json,可用 CONFIG_PATH 覆盖:

配置项

默认值

作用

server.port

41980

对外监听端口

rateLimit.perMinute

120

每分钟请求上限

rateLimit.concurrent / queueSize

8 / 200

并发与排队,超出返回 429

probe.interval

*/30 * * * *

每 30 分钟重探模型可用性

probe.okTtlMinutes

360

探测成功结果缓存 6 小时

probe.transientTtlMinutes / rejectTtlMinutes

10 / 60

临时故障与永久失效的缓存时长

另外两个设计我挺喜欢:一是权限围栏,启动时注入隔离配置,禁用所有 native tool 调用,让后端只当纯推理引擎;二是分级探测缓存,跨重启复用结果,不会每次启动都把 12 个模型轮一遍。


四、把 41980 发布到公网

在机器里执行(dev 换成你的机器名或 ID):

instabox port publish dev 41980 --name 'OpenCode API'
instabox port ls dev

会拿到一个形如下面的 URL:

https://<端口>-<机器ID去掉m_前缀>.<域名>/

我这次拿到的是 https://41980-agqy7jma5cbmmxzhlafbss33gm.instabox.tech/。看懂这个域名很有用:41980 是发布的端口,agqy7jma5cbmmxzhlafbss33gm 就是我的 Machine ID 去掉 m_。以后看到这类长域名,一眼就知道是哪台机器的哪个端口。

⚠️ 官方文档原话:公网 URL 不是秘密。默认的 public 端口意味着任何人拿到地址都能访问你的整个服务,直到你 unpublish。所以第三步生成的 API Key 必须保留,别为了图方便关鉴权。想再收一层,可以改用 --private,访问要带 ?_token=ibp_... 或 Authorization: Bearer ibp_...;脚本调用还得额外带这层 token,自己权衡。


五、验证,然后接进任何 OpenAI 客户端

四条命令走完:

BASE="https://41980-agqy7jma5cbmmxzhlafbss33gm.instabox.tech"

# 1. 根路径
curl "$BASE/"
# {"name":"OpenCode To API","version":"0.1.0","docs":"/v1/models","health":"/health"}

# 2. 健康检查(无需鉴权)
curl "$BASE/health"

# 3. 模型列表(需要 Key;不带 Key 应返回 401)
curl -H "Authorization: Bearer $KEY" "$BASE/v1/models"

# 4. 对话补全,改成 stream:true 即 SSE 流式
curl -X POST "$BASE/v1/chat/completions" \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "opencode/glm-5.3-flash-free",
    "messages": [{"role": "user", "content": "用一句话解释什么是活动租约"}],
    "stream": false
  }'

第 3 条不带 Key 时,我实测返回的是:

{"error":{"message":"Invalid or missing API key","type":"auth_error","code":"invalid_api_key"}}

说明鉴权确实在生效——这一步值得亲自验一次。

接 SDK 只需改两个参数:

from openai import OpenAI

client = OpenAI(
    base_url="https://41980-agqy7jma5cbmmxzhlafbss33gm.instabox.tech/v1",
    api_key="你的opencode-to-api-key",
)
resp = client.chat.completions.create(
    model="opencode/glm-5.3-flash-free",
    messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)

我这次实测探测通过的 9 个模型(total 12 / usable 9):

模型 ID

备注

opencode/glm-5.3-flash-free

第三方汇总里评分靠前(非统一口径)

opencode/deepseek-v4.1-flash-free

—

opencode/minimax-m3.1-flash-free

—

opencode/mimo-v2.6-flash-free

—

opencode/beam-free

—

opencode/big-pickle

名称无 -free 后缀,仍在本次探测通过名单内

opencode/iceman-free

—

opencode/inkling-2-small-free

—

opencode/nemotron-3.5-super-vl-free

名称带 VL,属多模态类

这张表是我某一时刻的探测结果,不是承诺。项目筛选规则是「输入/输出成本均为 0 + 支持文本输出 + 未废弃」,OpenCode 那边随时可能上下架、限流或改价;一切以 /v1/models 的当前返回为准。另外还有 3 个模型没通过探测,属于正常波动。

如果自己再套一层 Nginx 反代,stream: true 记得加 proxy_buffering off; 和较长的 proxy_read_timeout,否则流式会被缓冲成一次性返回。


六、保活:让机器别"睡着"

先讲规则(来自官方 Auto-pause and max-run 文档):免费档空闲 30 分钟自动暂停,该值固定、免费用户不可调整;单次连续运行最长 480 分钟。暂停会保留内存和进程,下次使用时唤醒。

官方给的应对接口叫活动租约(activity-lease):

PUT    /v1/machines/{id}/activity-leases/{taskID}    body {"ttlSeconds": 300}   范围 30–3600
DELETE /v1/machines/{id}/activity-leases/{taskID}    释放

关键一句:续租必须从机器外部发起。机器一旦被暂停,内部的 cron、systemd timer 全冻住,自己叫不醒自己。

国内较省事的"外部常开"环境是金山文档 AirScript + 外部 cron,全程零成本、无需海外网络条件。Gitee 仓库 web/wps_airscript 里的 instabox.js 已经写好了,六步配完:

  1. 打开 kdocs.cn 微信扫码登录,新建一个空白表格(建议一个脚本一张表,凭证别混)。

  1. 菜单 效率 → 高级开发 → AirScript 脚本编辑器 → 创建脚本 → 选「文档共享脚本」。

  1. 左侧 服务 → 添加服务 → 添加「网络API」。漏了这步 HTTP.get / HTTP.put 不存在,是常见的翻车点。

  1. 表格里填:B1 = Instabox API Key,B2 = Machine ID,B3 留给脚本写执行结果。粘贴 instabox.js 全部代码,点「运行」试跑,B3 应显示「续租成功|状态=running|过期=…|TTL=900s」。

  1. 脚本编辑器左侧找到脚本,点三个点 → 复制 webhook 链接,同时拿到 AirScript-Token。

  1. 打开 console.cron-job.org 建任务:cron 表达式 */10 * * * *,HTTP 方法 POST,目标 URL 填 webhook,请求体 {"Context":{"argv":{}}},Headers 加 AirScript-Token: 你的token 和 Content-Type: application/json,超时至少 30 秒。

为什么是 10 分钟?脚本里 TTL 设的是 900 秒(15 分钟),留 5 分钟余量给网络抖动和排队。WPS 内置定时任务每天只能触发一次,所以必须借外部 cron。

这个脚本最值得学的是它的"先检查再续租":它先 GET /v1/machines/{id},确认同时满足 state=running、desiredState=running、operationId=null、autoSuspendedAt 为空,才发起 PUT;任一条件不满足就直接跳过,还会校验返回的 expiresAt 晚于当前时间。重启中、已挂起、有操作进行中的机器,盲目续租毫无意义甚至有副作用。写完保活脚本,照这个思路自检一遍不亏。

也可换成任意支持定时 HTTP 触发的外部服务,把 API Key 放进密钥或环境变量,逻辑完全一样。


七、比保活更该知道的 5 件事

这一节最值得看。网上多数"防休眠教程"止步于第六节,但有几件事不说清楚,你迟早会踩。

1. 租约挡不住 480 分钟硬上限。 官方写得很直白:maxRunMinutes 到点就暂停,即使机器正忙,activity 和 leases 都不会延长它。免费档固定 480 分钟,且连续触发 max-run 暂停会进入递增冷却:第 1 次 5–20 分钟,第 2 次 60–75 分钟,第 3 次起 120–135 分钟(空闲暂停则没有冷却)。不建议尝试任何规避运行时长限制的做法:既不稳定,也可能与平台条款相冲突。

2. 其实低频自用,可能根本不需要保活。 官方文档明确:对公网端口的一次 HTTP 请求就会唤醒因空闲而自暂停的机器,请求会等待恢复(最多 45 秒);若还在恢复中,返回带 Retry-After 的 503 (Sandbox is waking up)。也就是说,配好客户端重试,第一次调用慢半拍,之后照常用。注意区分:只有"机器自己暂停"(autoSuspendedAt 有值)才会被唤醒,你手动 pause / stop 的机器不会自动醒,得回去 resume。保活的价值在于把首次延迟压掉、让监控和数字好看,而不是"不保活就用不了"。

3. 免费模型不免费在"稳定"和"私密"上。 -free 是限时免费口径,公开资料提示:部分免费模型的提示词可能被用于改进模型、Nemotron 系列走试用条款且会记录使用、免费模型共享全局速率限制,长 agent 任务后容易撞 Rate limit exceeded。所以别传公司代码、客户数据、任何不想外泄的内容,也别把它当付费 API 的平替写进生产链路。底层模型在境外,涉及境内数据的需评估数据出境合规。

4. 公网端口 = 暴露面。 再强调一次:URL 不是秘密。至少做到——API Key 保持开启,用 /admin/keys 给不同客户端发子 Key 而不是到处复用 admin Key;控制台能改 private 就改 private;rateLimit 别调大;定期看 logs/app.log。另外 Instabox API Key 和 AirScript-Token 都等同账号密码,含凭证的金山表格不要分享,token 不要 commit 到仓库,泄露立即去控制台吊销重建。密钥只读不写、结果不回显,这个原则值得抄。

5. 其余物理边界。 免费档出站带宽约 50 Mbit/s(≈6 MB/s),别拿它传大文件;starts / minute 限 3 次,别写激进的唤醒轮询;免费政策仍是 beta,官方没承诺长期存在,重要数据和配置在本地留一份。

一句话总结这节:把平台规则当设计输入,而不是当需要绕过的障碍。


八、到底适合拿它做什么

场景

是否合适

说明

个人原型、脚本、AI Agent 玩具

✅ 很合适

挂了重试一次即可,无直接费用

学习 OpenAI 协议 / 调试 SDK

✅ 很合适

有 /v1/models 和流式,够练手

给自己的小工具站做后端

⚠️ 可用

客户端务必带重试,接受偶发 503

博客、群里演示"我有自己的 API"

✅ 合适

/health 就是现成的证据页

生产服务 / 对外承诺 SLA

❌ 别用

休眠、480 分钟上限、beta 政策三重不确定

敏感数据、合规业务

❌ 别用

免费模型的数据条款与限流均不可控

高并发、长稳在线、大文件

❌ 别用

并发 8、队列 200、出站约 6 MB/s


写在最后

所谓"token 自由",不是找到一个无限量的水龙头,而是把「免费算力」和「免费模型池」用一段开源代码接起来,再老实接受它的边界。

九个随时可能换人的免费模型,一个你自己掌握的兼容地址——不完美,但够你今晚把想法跑起来。

先去把 /health 跑绿,剩下的交给重试。


资料来源与声明

  • 资料来源:Instabox 官方文档(Auto-pause and max-run、Pricing、Limits、Public and private ports、API 说明与 llms.txt)、Gitee 仓库 web/opencode-to-api 的 README 与配置文件、Gitee 仓库 web/wps_airscript 的 README 与 instabox.js 源码、OpenCode Zen 免费模型的第三方公开整理资料,以及本人部署实例的实测返回。

  • 文中 /health、401 响应、total 12 / usable 9 及模型清单为撰写时本人实例的真实返回,属时点数据;模型可用性、免费政策与平台规则均可能变动,以官方页面和你自己账户内的实际状态为准。

  • 注册邀请码等待时长、社区保活实践等来自社区公开分享,非官方承诺。

  • 本文为技术教程,不含购买链接、返佣入口或二维码;平台与项目名称仅作客观指代,不代表授权、合作或背书,商标归各自权利人所有。

  • 文中实例仅供个人技术验证,未开放模型调用能力;底层模型在境外,勿提交个人信息或重要数据。接口若对外开放,需自行履行相应合规义务。本文不涉及批量注册、额度转售或规避平台限制。

    扫描二维码推送至手机访问。

    版权声明:本文由小刚刚技术博客发布,如需转载请注明出处。

    本文链接:https://blog.bitefu.net/post/776.html

    分享给朋友:

    “0 元搭一个自己的大模型 API:免费 Instabox + OpenCode 免费模型池,全流程手把手,免费用 deepseek-v4.1-flash,glm-5.3-flash,mimo-v2.6” 的相关文章

    php高效检测远程图片是否存在

    php高效检测远程图片是否存在function img_exits($url){     $ch = curl_init();    &…

    [教程] WTG备份新方法——FFU镜像格式

    [教程] WTG备份新方法——FFU镜像格式

    FFU(Full Flash Update) 格式是一种基于扇区的磁盘镜像文件格式,默认使用快速哈夫曼压缩(Xpress-Huffman)算法压缩,在捕获和部署时会生成哈希表进行校验,并可以使用DISM修改捕获的镜像。FFU格式很适合WTG…

    系统小技巧:微软版“Ghost” Windows FFU 系统安装还原

    系统小技巧:微软版“Ghost” Windows FFU 系统安装还原

    在日常的维护中,系统的备份和还原是大家经常需要操作的事情。虽然Windows 10已经提供很多的工具,如系统还原、WIM备份/还原,VHD备份等。不过这些工具大多是基于文件的备份/还原。我们以前经常的使用的Ghost则是基于扇区的备份/还原…

    VirtualXposed 不支持32位应用 32位无法安装问题解决办法

    VirtualXposed 不支持32位应用 32位无法安装问题解决办法

    VirtualXposed 是基于VirtualApp 和 epic 在非ROOT环境下运行Xposed模块的实现(支持5.0~10.0)。与 Xposed 相比,目前 VirtualXposed 有…

    贾氏鸣天鼓健耳养肾操

    贾氏鸣天鼓健耳养肾操

    《贾氏鸣天鼓健耳养肾操》鸣天鼓是健耳强肾治耳病的古法,贾氏越云自创的鸣天鼓健耳养肾操是在古法的基础上创建。顺序:1静坐挺胸。2双手放心脏位置的胸口,左手掌盖住右手掌。3闭目静心,深呼吸19下。4双手相互搓揉,让手掌发热。5用发热的双手手掌严…

    PHP AES加解密 (ECB模式/sha1prng算法/PKCS5Padding和PKCS7Padding补码) ECB 模式不需求设置 iv

    php7+ 版本/**  * [AesSecurity aes加密,支持PHP7+]  * 算法模式:ECB  * 密钥长度:128  * 补…

    发表评论

    访客

    看不清,换一张

    ◎欢迎参与讨论,请在这里发表您的看法和观点。