| 属性 | 内容 |
|---|---|
| 项目名称 | Transformers.js |
| 开发团队 | Hugging Face (Xenova/Joshua Lochner 主导) |
| 项目定位 | 浏览器端机器学习库 - Python Transformers 的 JavaScript 等价物 |
| 技术栈 | TypeScript + ONNX Runtime Web + WebAssembly/WebGPU |
| 开源协议 | Apache 2.0 |
| GitHub | https://github.com/huggingface/transformers.js |
| 官网 | https://huggingface.co/docs/transformers.js |
| NPM 包 | @huggingface/transformers (v3.x) |
| 状态 | 活跃维护,v4 已发布 |
"Run 🤗 Transformers directly in your browser, with no need for a server!"Transformers.js 是 Hugging Face Transformers Python 库的官方 JavaScript 移植版,让开发者能够在浏览器中直接运行预训练的 AI 模型,无需服务器支持。
核心价值:
┌─────────────────────────────────────────────────────────────────────┐
│ APPLICATION LAYER 应用层 │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Web App │ │ Browser │ │ Node.js/ │ │
│ │ (Vanilla JS) │ │ Extension │ │ Deno/Bun │ │
│ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │ │
│ └────────────────────┴────────────────────┘ │
│ │ │
└──────────────────────────────┼───────────────────────────────────────┘
│
┌──────────────────────────────▼───────────────────────────────────────┐
│ TRANSFORMERS.JS LAYER │
│ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Pipeline API (高层抽象) │ │
│ │ • sentiment-analysis │ │
│ │ • text-generation │ │
│ │ • automatic-speech-recognition │ │
│ │ • image-classification │ │
│ │ • ... 30+ 任务类型 │ │
│ └──────────────────────────┬───────────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────▼───────────────────────────────────┐ │
│ │ Model API (底层控制) │ │
│ │ • AutoModel │ │
│ │ • AutoTokenizer │ │
│ │ • AutoProcessor │ │
│ └──────────────────────────┬───────────────────────────────────┘ │
└─────────────────────────────┼────────────────────────────────────────┘
│
┌─────────────────────────────▼────────────────────────────────────────┐
│ ONNX RUNTIME WEB LAYER │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ WebGPU │ │ WebGL │ │ WASM │ │
│ │ (GPU) │ │ (GPU) │ │ (CPU) │ │
│ │ 最快 │ │ 兼容性好 │ │ 兼容所有 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ ↑ ↑ ↑ │
│ └────────────────┴────────────────┘ │
│ Backend 自动选择 │
└──────────────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────▼────────────────────────────────────────┐
│ MODEL STORAGE LAYER │
│ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Hugging Face Hub (模型下载) │ │
│ │ • ONNX 格式模型 │ │
│ │ • 自动缓存 (IndexedDB/Cache API) │ │
│ │ • 量化模型支持 (fp16, int8, q4, etc.) │ │
│ └──────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────┘
| 技术 | 用途 | 说明 |
|---|---|---|
| TypeScript | 开发语言 | 类型安全 |
| ONNX Runtime Web | 推理引擎 | 跨平台 ML 推理 |
| WebGPU | GPU 加速 | 现代浏览器,性能最佳 |
| WebGL | GPU 回退 | 较老浏览器支持 |
| WebAssembly (WASM) | CPU 回退 | 所有浏览器支持 |
| IndexedDB | 模型缓存 | 本地存储模型文件 |
| Transformers | 模型生态 | Hugging Face 模型库 |
| 后端 | 性能 | 兼容性 | 适用场景 |
|---|---|---|---|
| WebGPU | ⭐⭐⭐⭐⭐ 最快 (100x WASM) | Chrome/Edge 最新版 | 大模型、实时推理 |
| WebGL | ⭐⭐⭐⭐ 快 | 大多数浏览器 | 中等模型 |
| WASM | ⭐⭐⭐ 基准 | 所有现代浏览器 | 小模型、兼容性优先 |
| WASM (non-SIMD) | ⭐⭐ 慢 | 所有浏览器 | 极老设备 |
设计哲学: 与 Python Transformers 保持一致
// JavaScript (Transformers.js)
import { pipeline } from '@huggingface/transformers';
const classifier = await pipeline('sentiment-analysis');
const result = await classifier('I love Transformers.js!');
// [{label: 'POSITIVE', score: 0.9998}]
# Python (Transformers)
from transformers import pipeline
classifier = pipeline('sentiment-analysis')
result = classifier('I love Transformers!')
# [{'label': 'POSITIVE', 'score': 0.9998}]
| 类别 | 任务 | 示例模型 |
|---|---|---|
| NLP | text-classification | bert-base-uncased |
| token-classification (NER) | dslim/bert-base-NER | |
| question-answering | distilbert-base-cased-distilled-squad | |
| summarization | facebook/bart-large-cnn | |
| translation | t5-base | |
| text-generation | gpt2, llama | |
| fill-mask | bert-base-uncased | |
| CV | image-classification | google/vit-base-patch16-224 |
| object-detection | facebook/detr-resnet-50 | |
| image-segmentation | facebook/detr-resnet-50-panoptic | |
| depth-estimation | Intel/dpt-large | |
| Audio | automatic-speech-recognition | openai/whisper-tiny |
| audio-classification | superb/wav2vec2-base-superb-er | |
| text-to-speech | Xenova/speecht5_tts | |
| Multimodal | zero-shot-image-classification | openai/clip-vit-base-patch32 |
| zero-shot-object-detection | google/owlvit-base-patch32 | |
| embeddings | sentence-transformers/all-MiniLM-L6-v2 |
自动缓存机制:
// 首次下载 → 缓存到 IndexedDB
// 后续使用 → 从本地缓存加载
const pipe = await pipeline(
'sentiment-analysis',
'Xenova/distilbert-base-uncased-finetuned-sst-2-english',
{
revision: 'main', // 模型版本
quantized: false, // 是否使用量化模型
cache_dir: './cache' // 缓存目录 (Node.js)
}
);
量化选项:
fp32 - 全精度 (最大、最慢)fp16 - 半精度int8 - 8位量化q4 / q4f16 - 4位量化 (最小、最快)<script type="module">
import { pipeline } from 'https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.0.0';
const classifier = await pipeline('sentiment-analysis');
const result = await classifier('Hello World!');
console.log(result);
</script>
npm install @huggingface/transformers
import { pipeline } from '@huggingface/transformers';
// worker.js
import { pipeline } from '@huggingface/transformers';
self.addEventListener('message', async (e) => {
const { text } = e.data;
const classifier = await pipeline('sentiment-analysis');
const result = await classifier(text);
self.postMessage(result);
});
为何使用 Worker:
onnx-community 组织:
Hugging Face 上的专门组织,自动将 PyTorch/TensorFlow 模型转换为 ONNX 格式:
原始模型: meta-llama/Llama-2-7b-hf
↓
转换工具: Optimum + 自动化脚本
↓
ONNX 模型: onnx-community/Llama-2-7b-ONNX
↓
Transformers.js 直接使用
转换命名规范:
{creator}-{model-id}-ONNXXenova/distilbert-base-uncased-finetuned-sst-2-english| 运行时 | 支持状态 | 说明 |
|---|---|---|
| Browser | ✅ 完全支持 | 主要目标平台 |
| Node.js | ✅ 支持 | 服务端推理 |
| Deno | ✅ 支持 | 现代 JS 运行时 |
| Bun | ✅ 支持 | 快速 JS 运行时 |
Firefox AI Runtime (2025):
Mozilla 将 Transformers.js 集成到 Firefox 浏览器:
import { env } from '@huggingface/transformers';
// 自动检测最佳后端
// 优先级: WebGPU > WebGL > WASM
// 手动指定后端
env.backends.onnx.webgpu = true;
env.backends.onnx.wasm = false;
条件检查:
if (navigator.gpu) {
const adapter = await navigator.gpu.requestAdapter();
if (adapter) {
// WebGPU 可用,使用 GPU 加速
}
}
性能对比:
// 使用量化模型大幅减少体积
const pipe = await pipeline(
'text-generation',
'onnx-community/Llama-2-7B-ONNX',
{
quantized: true, // 启用量化
dtype: 'q4', // 4位量化
device: 'webgpu' // GPU 加速
}
);
量化效果:
| 精度 | 模型大小 | 速度 | 质量 |
|---|---|---|---|
| fp32 | 100% | 1x | 最佳 |
| fp16 | 50% | 1.5x | 优秀 |
| int8 | 25% | 2x | 良好 |
| q4 | 12.5% | 3x | 可接受 |
使用场景:
架构:
浏览器: Transformers.js 计算嵌入
↓
API: 发送向量到 Qdrant
↓
Qdrant: 向量相似度搜索
↓
返回: 最相关文档
优势: 无需独立推理服务器
应用场景:
| 特性 | Transformers.js | TensorFlow.js | ONNX Runtime Web | OpenAI API |
|---|---|---|---|---|
| 运行位置 | 浏览器 | 浏览器 | 浏览器 | 云端 |
| 模型生态 | Hugging Face | TensorFlow Hub | ONNX Zoo | OpenAI |
| 模型数量 | 10000+ | 1000+ | 100+ | 10+ |
| 隐私 | ✅ 完全本地 | ✅ 完全本地 | ✅ 完全本地 | ❌ 上传数据 |
| 成本 | 免费 | 免费 | 免费 | 按 token 付费 |
| GPU 加速 | WebGPU/WebGL | WebGL/WebGPU | WebGPU/WebGL | 服务器 GPU |
| 易用性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| NLP 能力 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
小模型 (适合移动端):
Xenova/distilbert-base-uncased - 文本分类Xenova/whisper-tiny - 语音识别Xenova/all-MiniLM-L6-v2 - 文本嵌入onnx-community/Llama-2-7B-ONNX - 文本生成onnx-community/mistral-7b-v0.3 - 对话import { pipeline, env } from '@huggingface/transformers';
// 允许本地模型 (开发环境)
env.allowLocalModels = true;
// 禁止远程模型 (某些企业环境)
env.allowRemoteModels = false;
try {
const pipe = await pipeline('sentiment-analysis');
} catch (e) {
if (e.message.includes('out of memory')) {
// 尝试量化模型
}
}
// 加载本地 ONNX 模型
const pipe = await pipeline(
'text-classification',
'./path/to/local/model',
{ local: true }
);
✅ 隐私优先 - 数据永不离开设备
✅ 零服务器成本 - 纯客户端推理
✅ 丰富模型 - 10000+ Hugging Face 模型
✅ 易于使用 - 与 Python API 几乎一致
✅ 多平台 - Browser/Node/Deno/Bun
✅ GPU 加速 - WebGPU/WebGL 支持
✅ 活跃生态 - 自动模型转换流水线
✅ 量化支持 - 大模型也能在浏览器运行
⚠️ 首次加载慢 - 需要下载模型 (MB~GB)
⚠️ 内存限制 - 浏览器内存有限
⚠️ 设备性能差异 - 移动端性能受限
⚠️ 模型格式限制 - 仅支持 ONNX
⚠️ 冷启动问题 - WASM 初始化需要时间
⚠️ 浏览器兼容性 - WebGPU 需要最新浏览器
| 场景 | 适用性 | 说明 |
|---|---|---|
| 隐私敏感应用 | ⭐⭐⭐⭐⭐ | 医疗、金融、个人数据 |
| 离线应用 | ⭐⭐⭐⭐⭐ | PWA、无网络环境 |
| 实时交互 | ⭐⭐⭐⭐ | 低延迟需求 |
| 大规模并发 | ⭐⭐⭐⭐⭐ | 无服务器成本 |
| 大模型推理 | ⭐⭐ | 受限于浏览器内存 |
| 训练 | ⭐ | 仅支持推理,不支持训练 |
研究时间: 2026-03-07
研究者: 小凯
标签: #Transformers.js #HuggingFace #ONNX #WebAI #浏览器ML #WebGPU
还没有人回复