大家好,我是何三,独立开发者

7MB。

包含引擎、模型、分词器,全塞在一个 WASM 包里。跑语义搜索,不需要 GPU,不需要调 API,浏览器里就能跑。

没错,我说的是 ternlight,一个刚在 GitHub 上火起来的项目,515 Star(约 500+)。它做的事很纯粹——把语义嵌入(semantic embeddings)做到极致的小、极致的快。

ternlight 封面

这东西解决什么问题?

做过语义搜索、RAG、向量数据库的都知道,传统嵌入模型有多痛苦。

拿最常用的 all-MiniLM-L6-v2 来说,模型文件几百 MB。你部署到生产环境,要么租个 GPU 实例(烧钱),要么调 OpenAI 的 Embeddings API(每次调用都在滴血)。想在前端浏览器里跑?想都别想。

ternlight 的作者显然也被折磨过。他搞了个骚操作——三元量化

啥意思?

传统模型的权重参数是浮点数(比如 0.12345,-0.67890),计算量巨大。ternlight 把所有权重压缩成 -10+1 三个值。

对,就这么粗暴。

权重只有三个可能的值,那推理就变成了简单的加法和减法——没有乘法,没有除法,没有任何复杂运算。

说实话,这块细节我刚开始也没完全搞懂——量化感知训练(QAT)这东西挺深的。但原理大概是这样:模型在训练阶段就「假装」自己是三元模型,等训练完,它已经学会了用这三个值来表达语义信息。

三元量化示意图

效果怎么样?

他们测过,Spearman 相关系数 0.844(base 版本),跟原始 teacher 模型差距不大,但体积缩小了 几十倍

说到这个三元权重,让我想起一个事

前几年 BitNet b1.58 论文出来的时候,圈内一片「这不可能」。结果微软研究院真就搞出来了,权重只用 -1、0、+1,效果还没崩。ternlight 就是站在这个肩膀上做的。

你看,技术圈就是这样——大家都在卷参数量、卷浮点精度,突然有人站出来说:「要不我们试试用整数?不对,试试用三个数?」然后居然跑通了。

这感觉就像——大家开车都在比排量大,结果有人搞了辆自行车,骑得还挺快。

上手体验:真的就一行代码

装 ternlight 很简单,npm 装一下:

npm install @ternlight/base

然后你就可以写:

import { embed, cosineSim, similar } from '@ternlight/base';

// 两句话的语义相似度
cosineSim(embed('我忘了密码'), embed('如何重置密码')); 
// → 0.88(非常高)

// 在一堆文档里找最相关的
similar('我想退款', [
  '退款流程:如何把钱拿回来',
  '查看物流状态',
  '修改收货地址',
]);
// → 第一个结果相似度 0.70

注意,这段代码跑在 CPU 上。服务器端能用,浏览器里也能用。Cloudflare Workers、Deno、Bun,全支持。

性能数据也挺猛:

版本 体积(gzip) 每次嵌入耗时 单线程吞吐
@ternlight/mini 5.0 MB 2.5 ms ~400 emb/s
@ternlight/base 7.2 MB 5.1 ms ~195 emb/s

5 毫秒一次嵌入,这速度——怎么说呢,你打字的速度都没它快。

体积与性能对比

我自己试了一下,在浏览器里跑了一个搜索 2000 篇文档的 Demo,输入第一个字符结果就出来了,真的是边打边搜。

Vite 里用的话注意加一行配置:

// vite.config.js
export default {
  optimizeDeps: {
    exclude: ['@ternlight/base'],
  },
};

Next.js 用户开个 asyncWebAssembly 就完事。具体配置官方文档写得很清楚,这里不展开了——这个压缩率——算了先不说这个,你先装上看效果。

这种嵌入式嵌入模型的思路,我之前还关注过两个方向:

  • Ollama 跑的是大语言模型,重在对话生成,本地跑 LLM 的标杆
  • Llama.cpp 纯 CPU 推理,追求极致优化,社区活跃度极高
  • ternlight 专注语义嵌入,体型是最小的那个,而且能跑在浏览器里

说白了,如果你需要做本地语义搜索、离线 RAG、或者隐私敏感的应用(比如 Obsidian 插件、浏览器扩展),ternlight 是目前最优雅的方案。之前我也整理过一份《2026 年 GitHub 高性能神器排行榜》,这类小体积高性能的工具越来越多了。

项目地址:https://github.com/soycaporal/ternlight

说点大实话

ternlight 不是万能的。

128 tokens 的输入限制(大概 95 个英文单词),处理长文本得切块。三元量化在极端场景下精度会有损失,特别是领域术语很偏的任务。

但这个方向真的有意思。

5-7MB 的一个包,塞进了引擎 + 模型 + 分词器,还能跑在浏览器和边缘设备上。想想以前要在前端搞语义搜索,基本是天方夜谭。现在 npm install 一下就行了。

我觉得这代表了一个趋势——AI 推理正在从「云端集中」走向「端侧分布」。小模型、本地运行、隐私保护,这些关键词会越来越火。

本文使用 MGO 编辑并发布

关注"何三笔记",回复"mgo" 免费下载使用