Hugging Face Inference API 指南
Hugging Face 的推理入口现在不该只理解成“一个旧的 Serverless API”。更接近官方当前文档的理解是三条路:
- Inference Providers
- Inference Endpoints
- Local endpoints / 自托管推理服务
这三条路的区别,不是接口名字,而是你要什么控制权、稳定性和成本结构。
1. Inference Providers
官方当前文档主推的是 Inference Providers。它的价值在于,你可以通过统一入口访问多个推理提供商,而不是每接一家都重新学一套 SDK。
获取 API Token
- 登录 Hugging Face 账号。
- 前往 Settings > Access Tokens。
- 创建一个带有
read权限的 token。
Python 调用示例
使用标准的 requests 库或官方的 huggingface_hub 库。
import requests
# 模型地址
API_URL = "https://api-inference.huggingface.co/models/mistralai/Mistral-7B-Instruct-v0.2"
headers = {"Authorization": "Bearer hf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
def query(payload):
response = requests.post(API_URL, headers=headers, json=payload)
return response.json()
output = query({
"inputs": "Can you please explain what is Hugging Face?",
"parameters": {"max_new_tokens": 100}
})
print(output)
推荐使用官方 SDK
from huggingface_hub import InferenceClient
client = InferenceClient(model="mistralai/Mistral-7B-Instruct-v0.2", token="hf_xxx")
# 文本生成
response = client.text_generation("The capital of France is")
print(response)
# 图像生成 (Text-to-Image)
image = client.text_to_image("An astronaut riding a horse on mars")
image.save("astronaut.png")
2. 向量提取 (RAG 常见入口)
对于构建 RAG (检索增强生成) 系统,这是获取文本向量(Embeddings)最便捷的方式。
client = InferenceClient(model="BAAI/bge-small-zh-v1.5", token="hf_xxx")
embedding = client.feature_extraction("这是一段需要向量化的中文文本")
print(len(embedding)) # 对于 bge-small,维度通常是 512
3. Inference Endpoints (生产级专用端点)
如果你需要更稳定、可控、可隔离的生产部署,就看 Inference Endpoints。这类服务更像正式托管推理,而不是公共共享入口。
主要特点
- 独享资源:你可以选择专用的 CPU 或 GPU(如 A10G, T4, A100)。
- 完全控制:支持设置自动休眠、私有连接和安全选项。
- 自定义框架:支持加载自定义推理代码。
- 按量计费:根据硬件使用时长按小时计费。
创建流程
- 在 Hub 上选择一个模型。
- 点击模型页面右上角的 Deploy > Inference Endpoints。
- 选择云服务商(AWS/Azure)和硬件。
- 部署完成后,你将获得一个私有的 URL,调用方式与 Serverless API 基本一致。
4. Local endpoints / 自托管
Hugging Face 官方 InferenceClient 也支持连本地或自托管的 OpenAI-compatible 推理服务,比如 llama.cpp、vLLM、TGI 一类。这对已经有自己推理基础设施的团队很有用,因为客户端心智可以保持一致。
5. 常见问题与局限性
共享推理入口的常见限制
- 会有速率限制或吞吐波动
- 冷启动仍可能存在
- 热门模型和冷门模型的体验差异会比较明显
性能建议
- Batching:如果可能,将多个输入合并为一个请求以提高效率。
- Caching:在客户端对常见查询的结果进行缓存。
官方参考
- Inference Providers: https://huggingface.co/docs/inference-providers/en/index
InferenceClientdocs: https://huggingface.co/docs/huggingface_hub/package_reference/inference_client