为什么是 Spaces,而不是再注册一个平台
大多数「免费 Token」方案的第一步都是注册新账号、绑卡、等审核。Spaces 路线反过来:你用的是已经存在的 Hugging Face 账号,把别人(或自己)已经部署好的开源模型页面,当成一个 HTTP 推理后端来调用。它不产生新的计费主体,因此没有「试用金过期」问题,代价是延迟和并发都不如商业 API。
适用前提:
- 已有 Hugging Face 账号(免费注册即可,无需信用卡)。
- 模型是开源权重、Space 作者允许 API 访问(页面右侧有「Use via API」入口的才可用)。
- 任务能容忍秒级到十几秒的冷启动延迟。
操作步骤
第一步:筛出「可 API 调用」的 Space
在 Space 搜索页按任务筛选(Text Generation、Image-to-Text、Automatic Speech Recognition 等),逐个打开,只看页面底部是否有 API 使用说明。有 Use via API 折叠面板的,说明作者开启了 Gradio API;没有的(多为纯前端 Demo 或需要登录的私有 Space)直接跳过。
第二步:用 gradio_client 直接打
Hugging Face 官方的 gradio_client 库可以把 Space 当函数调用,不需要自己写 HTTP:
```python
from gradio_client import Client
client = Client("作者名/space名")
result = client.predict("你的输入", api_name="/predict")
print(result)
```
api_name 与参数顺序以该 Space 的 API 面板为准,不同 Space 差异很大,建议先用面板里给出的示例代码跑通一次。
第三步:把「休眠」变成省额度的手段
免费 CPU Space 在无人访问一段时间后会进入休眠,再次访问触发重建(冷启动)。这既是缺点也是优点:
- 优点:不占用你的任何配额,闲置时零成本。
- 缺点:第一次调用可能等十几秒到一分钟。
做法是把「唤醒」与「业务调用」分开:写一个定时预热脚本,在你需要使用的时段前几分钟发一次空请求把 Space 叫醒,正式请求就不会撞上冷启动。
第四步:用 Gradio 队列控制并发
Space 页面上的 queue 设置决定了同时能排多少请求。作为调用方,你要做的是串行化:本地加一个简单的队列(queue.Queue 或 asyncio.Semaphore(1)),保证同一时刻只有一个请求在飞,失败就退避重试。免费 Space 的并发能力通常很有限,并发打过去只会换来 429 或超时。
第五步:私有 Space + 访问令牌
如果不想依赖别人的公开 Space,可以自己建一个 Space,把模型和推理脚本放进去,设为 Private,然后用 Hugging Face 的 access token 调用。这样:
- 调用入口稳定,不会被作者改接口。
- 可以自己控制模型版本与提示词模板。
- 免费 CPU 额度通常够跑小模型(数亿参数级)的短文本任务,大模型在免费 CPU 上基本不可用。
注意事项
- 额度不承诺:免费 Space 的 CPU 时长、GPU 时长与队列长度由平台策略决定,且会调整,文中不给出具体数字;以 Space 页面显示的资源类型为准。
- 延迟不可控:冷启动、排队、共享 CPU 都会拉长响应时间,不适合实时对话产品。
- 合规:只调用作者明确开放 API 的 Space;批量抓取、绕过队列、伪造请求头都可能导致账号受限。
- 数据:公开 Space 的输入会经过第三方运行环境,不要传敏感数据;需要保密就用私有 Space。
- 不要把它当生产后端:这条线的定位是「开发测试、批处理小任务、原型验证」的 Token 补充,不是 SLA 保障。
适用场景
- 个人项目、脚本化批处理(文本清洗、分类、摘要、翻译小段落)。
- 原型阶段验证提示词,不想为每次试验付钱。
- 作为商业 API 的降级备份:主线路限流时切到 Space 线路。
一条最小可用的组合
- 选 2–3 个稳定的 Text Generation Space 作为文本后端。
- 本地写一个
client.predict封装,带超时、重试与串行锁。 - 定时预热脚本负责唤醒。
- 自己的私有 Space 作为主用,公开 Space 作为备用。
- 记录每次调用的耗时与失败率,超过阈值就换 Space。