咱web端也能跑本地知识库,RAG(傲娇)-篇章1-核心技术方案

96 阅读2分钟

不废话,直接干货,先上结论

核心技术方案如下

transfomerjs + indexdb

知识库与RAG介绍

可能有些小伙伴对这两玩意不太清楚,大致介绍下

知识库(偏狭义上或特定领域下的知识库)

知识库我觉得算是一个赛道方向,现在有很多家如dify,openai等等,包括阿里等平台,都有提供这类功能服务,通过将用户文本向量化(将文本变成数字),存储到数据库中,最后在搜索时,可通过文本再向量化,达到语义化搜索(向量相似度计算),最后将相应匹配的文本交给AI回答.

这样做的好处就是,当你存储的文本如果是 "我想吃苹果", 而你搜索的文本是"我吃苹果"或者"我超级tm的想吃苹果"时,是能够搜索到的.

RAG

而RAG,则是实现这样知识库的一个手段,如向量化,分片文本,文本预处理,巴拉巴拉的

划重点,圈起来,要考的地方

向量化,向量化,向量化

回归正题

向量化

通过transfomerjs来处理文本向量化,这样咱就完成了最基础也是最核心的地方,参考代码如下

import { env, pipeline } from '@huggingface/transformers';
// Create a pipeline for feature extraction, using the full-precision model (fp32)
const pipe = await pipeline('feature-extraction', 'your-model-name', {
    dtype: "fp32",
});
const output = await pipe(inputTexts, { pooling: 'mean', normalize: true })

文档链接: huggingface.co/docs/transf…

存储与搜索

而由于是在web端,要能存储大量数据的方案,也只有indexdb了(好像是可以存储电脑总硬盘量百分之五十哦,记不太清楚了)

但这有个问题,向量化的数据怎么存储到indexdb并保证搜索呢???

要知道,大部分服务端存储向量数据方案,是有专门的向量数据库的,而indexDB是类似于Mongodb的JSON存储,这咋玩???

咱们不妨把心思放野一点, 自己实现个最基础的向量数据库试下呢

思路也有,而我,采用了LSH方案,细节太多了,后续可以单开篇章来讲,感兴趣的可以直接看源码

啥,你觉得这个技术栈不靠谱,看下面!!!

成果

代码已开源(有帮助的话来个star吧)

github.com/Yoan98/Ncur…

想看实际演示?这里

www.ncurator.com

有啥能证明这个玩意靠谱呢?这里

1.上了阮一峰的周刊 科技爱好者周刊(第 337 期):互联网创业几乎没了

2.上了DeepSeek的集成推荐 github.com/deepseek-ai…