Ternlight: 基于浏览器的语义搜索,配备 7 MB 嵌入模型
Ternlight: 基于浏览器的语义搜索,配备 7 MB 嵌入模型
Ternlight 通过利用通过 WebAssembly (WASM) 在 CPU 上运行的高度压缩嵌入模型,实现了直接在 Web 浏览器中进行高性能语义搜索。通过消除对服务器端 API 调用进行的需求,它允许实现具有毫秒级延迟和增强用户隐私的“边输入边搜索”功能。
技术实现与架构
Ternlight 不是大语言模型 (LLM),而是一个旨在将文本转换为 384 维向量的句子编码器。这些向量允许系统使用余弦相似度来确定两段文本之间的语义关系,从而实现基于含义而非关键词重叠的匹配(例如,将“重置我的密码”与“我忘记了我的密码”进行匹配)。
关键技术规格包括:
- 模型来源:使用三元量化感知训练从 MiniLM 蒸馏而来。
- 推理引擎:使用 Rust 从零开始编写并编译为 WASM SIMD,以获得最佳 CPU 性能。
- 硬件要求:仅需 CPU;不需要 GPU。
- 性能:嵌入向量生成时间约为 2.5ms 至 5ms。
模型层级与部署
Ternlight 以 npm 包的形式分发,无需单独的模型下载步骤或后端基础设施。它提供两个尺寸层级以平衡能力与性能:
| Tier | Package | Size | Inference Speed |
|---|---|---|---|
| Base | @ternlight/base |
7 MB | ~5 ms |
| Mini | @ternlight/mini |
5 MB | ~2.5 ms |
开发者可以使用极少的代码实现语义搜索:
import { embed, similar } from '@ternlight/base';
similar('easy weeknight dinner ideas', recipes, { topK: 3 });
// Returns ranked matches in ~5 ms with zero network latency
使用场景与实际应用
在设备端运行嵌入向量的能力为多个特定的技术机会提供了可能:
- 语义搜索:为文档(如 React 文档演示中所示)或产品目录实现快速、本地搜索。
- FAQ 与意图匹配:将用户查询映射到预定义的答案,而无需将数据发送到服务器。
- 聚类:在客户端本地对相似文本进行分组。
- 隐私保护搜索:确保用户查询永远不会离开本地设备,这对于敏感数据至关重要。
社区洞察与考量
社区讨论突出了分布式搜索的潜力以及对客户端资源使用的担忧。
集成潜力
用户建议将 Ternlight 与其他“本地优先”技术集成,以创建完全静态的向量搜索生态系统。一位用户建议将其与 Astro 插件结合使用,以自动解析 HTML 文件并生成嵌入向量,而另一位用户建议将其与便携式 HNSW (Hierarchical Navigable Small World) 搜索结合,通过对 Parquet 文件进行 HTTP range queries,从而创建一个不受中央机构控制的分布式搜索系统。
资源与隐私担忧
虽然隐私方面的益处是显而易见的,但一些用户对系统资源的影响表示了担忧:
"it's a bit startling to hear my fans go crazy when opening a webpage."
此外,对于自动将模型下载到浏览器中的安全影响也存在担忧,一些用户指出,如果处理不当,这可能会被用来占用大量内存或分发恶意代码。