基于Ollama和LangChain使用embeddings模型进行文档检索

在LLM基于本地或外部知识库的问答机器人应用开发中,当模型外部知识的索引需要通过语义匹配而非基于正则表达式实现的精确匹配时,我们往往会借助基于深度学习训练得到的embeddings模型对文本进行向量化(当然也可以使用基于词频的算法,如TF-IDF、BM25等),然后通过相似度检索的方式得到与用户提问(user query)相关度最高的外部知识内容。

本篇博客将介绍如何通过 Ollama 本地化使用embedding模型,并结合 langchain 该框架中提供的 langchain_ollamalangchain_core.vectorstores 来实现一个非常简单的基于用户提问索引相关文档内容的 Retriever。

embeddings 模型选择

在 Ollama 介绍 embeddings 模型的官方网页中,列举了三个模型作为example,分别是 mxbai-embed-largenomic-embed-textall-minilm 。大家可以根据自己实现场景的需求去选择合适的embeddings model,因为不同模型对语言的支持程度(有些只支持英文)和可一次处理的文本长度等会有所不同,如果有很明确的需求,如必须支持中英文双语等等,那可以现在 Hugging Face 上根据每个embeddings模型 Model Card 里介绍的详细信息进行需求匹配,确定了模型名称后,再去 Ollama 官网上去检索,如果支持的话就可以直接 pull下来了(如果不支持则可以选择其他非Ollama的方式去使用)。

本篇博客选择的是功能强大、支持超100种语言且单次处理文本tokens数可达8k的模型 BGE-M3,该模型的使用在之前介绍混合检索的博客中也有出现,感兴趣可以阅读 BGE-M3模型结合Milvus向量数据库强强联合实现混合检索

选择好之后就可以使用 ollama pull 命令对模型进行拉取了。

# 安装在 macOS 上的ollama,版本是 0.5.9
ollama --version
ollama version is 0.5.9

拉取模型(bge-m3 模型有~1.2G大小)

ollama pull bge-m3
pulling manifest 
pulling daec91ffb5dd... 100% ▕██████████████████████████████▏ 1.2 GB                         
pulling a406579cd136... 100% ▕██████████████████████████████▏ 1.1 KB                         
pulling 0c4c9c2a325f... 100% ▕██████████████████████████████▏  337 B                         
verifying sha256 digest 
writing manifest 
success 

下载完成后,可以通过 ollama list 命令查看

NAME             ID              SIZE      MODIFIED           
bge-m3:latest    790764642607    1.2 GB    About a minute ago 

embeddings 使用

Ollama网页 上介绍了基于REST API、 python第三方库(基于ollamachromadb )和 Javascript 库对embeddings模型的使用方式,有需要可以自行了解。

接下来介绍搭载langchain框架对Ollama管理的emb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值