首页 > 其他分享 >从零学习大模型——使用GLM-4-9B-Chat + BGE-M3 + langchain + chroma建立的本地RAG应用(三)——将BGE-M3接入langchain

从零学习大模型——使用GLM-4-9B-Chat + BGE-M3 + langchain + chroma建立的本地RAG应用(三)——将BGE-M3接入langchain

时间:2024-07-10 14:41:23浏览次数:7  
标签:embeddings M3 text self langchain embedding model BGE

BGE-M3 是第一个具有多功能、多语言和多粒度特性的文本检索模型。

  • 多功能:可以同时执行三种检索功能:单向量检索、多向量检索和稀疏检索。
  • 多语言:支持100多种工作语言。
  • 多粒度:它能够处理不同粒度的输入,从短句子到长达8192个词汇的长文档。

为了构建RAG应用,我们需要用到向量数据库和embedding模型进行数据集的向量化存储和后续用到的相似度检索。

本文介绍如何将BGE-M3接入LangChain。

下载BGE-M3

运行以下命令:

git lfs install

git clone https://www.modelscope.cn/Xorbits/bge-m3.git

注意:安装时为了方便后续统一管理,执行克隆命令时要先将目录切换到/root/autodl-tmp

embedding模型——BGE-M3的搭建(以算力云平台为例)

安装lfs时若遇到问题可参考上方链接 ↑

与LLM模型一样,Embedding模型也需要继承langchain.embeddings.base的一个子类并实现相关函数。

/root/autodl-tmp目录下新建textEmbeddings.py并输入以下语句:

from transformers import AutoTokenizer, AutoModel
import torch
from langchain.embeddings.base import Embeddings

class BGEM3Embeddings(Embeddings):
    def __init__(self, model, tokenizer):
        self.model = model
        self.tokenizer = tokenizer

    def embed_text(self, text: str) -> list:
        inputs = self.tokenizer(text, return_tensors="pt")
        with torch.no_grad():
            outputs = self.model(**inputs)
        embeddings = outputs.last_hidden_state.mean(dim=1).squeeze().tolist()
        return embeddings

    def embed_documents(self, texts: list) -> list:
        embeddings = [self.embed_text(text) for text in texts]
        return embeddings

    def embed_query(self, text: str) -> list:
        return self.embed_text(text)

同样我们再新建一个测试文件测试是否接入成功

from transformers import AutoTokenizer, AutoModel
import torch
from testEmbeddings import BGEM3Embeddings

model_name = "bge-m3" 
save_directory = "/root/autodl-tmp/bge-m3"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)
embedding = BGEM3Embeddings(model, tokenizer)

# 生成文本嵌入
text = "这是一个示例文本"
embedding = embedding.embed_text(text)
print(embedding)

# 生成多个文档的嵌入
documents = ["文档1", "文档2", "文档3"]
document_embeddings = embedding.embed_documents(documents)
print(document_embeddings)

# 生成查询的嵌入
query = "这是一个查询文本"
query_embedding = embedding.embed_query(query)
print(query_embedding)

输出了很多向量构成的数组说明运行正常。

标签:embeddings,M3,text,self,langchain,embedding,model,BGE
From: https://www.cnblogs.com/tarorat/p/18294004

相关文章

  • STM32系统嘀嗒Systick定时器
    目录STM32系统嘀嗒Systick定时器基本概念基本应用时钟分析时钟选择(1) 内部时钟(2) 外部时钟原理分析控制方式STM32系统嘀嗒Systick定时器基本概念定时器是STM32中常用的外设,一般定时器的基本功能就是定时,而在CortexM3/M4内核中也包含一个简单的定时器,就是系统嘀嗒定时器(Sy......
  • 基于STM32的气体检测系统--有上位机小程序
            毕设搞完了,来分享一下,第一次搞,多包涵!设计要求:        技术要求:1、原始数据:采集的气体浓度数据,包括CO2、可燃气体、有毒气体等;系统运行时的各种状态数据。2、选择合适的气体传感器,并进行性能测试和评估;设计稳定且精确的模拟信号采集电路;嵌入式程......
  • 从零学习大模型——使用GLM-4-9B-Chat + BGE-M3 + langchain + chroma建立的本地RAG应
    第一篇介绍了如何配置最基本的环境并下载了GLM-4-9B-Chat到本地,接下来我们试着将GLM-4-9B-Chat接入LangChain。LangChain 是一个基于大型语言模型(LLM)开发应用程序的框架。LangChain简化了LLM应用程序生命周期的每个阶段:开发:使用LangChain的开源构建模块和组件构建应用程序......
  • 从零学习大模型——使用GLM-4-9B + BGE-M3 + langchain + chroma建立的本地RAG应用(一)
    本项目基于DataWhaleChina的self-llm教程与llm-universe及Langchain官方文档等资料开发,旨在实现全部本地化的RAG应用。本项目使用AutoDL的云服务器进行开发。在 AutoDL 平台中租一个3090等24G显存的显卡机器,如下图所示镜像选择 PyTorch-->2.1.0-->3.10(ubuntu22.04)-->12.......
  • stm32时钟源
    stm32时钟源目录stm32时钟源MCU提供5种时钟源(1) HSE高速外部时钟(2) HSI高速内部时钟(3) LSE低速外部时钟(4) LSI低速内部时钟(5) PLL倍频锁相环定时器是挂载在总线下,而不同的总线的频率是不同的,而总线的频率是由时钟提供,而时钟的提供者又各不相同,所以必须要提前了解时钟源的......
  • 移植stm32库函数应对不同形式或者不同的时钟源
    移植stm32库函数应对不同形式或者不同的时钟源如果是stm32F407ZET6,晶振是8MHZ,时钟是168MHz修改system_stm32f4xx.c的316行,需要把PLL_M的值从25修改为8修改stm32f4xx.h的123行,需要把宏HSE_VALUE的值从25修改为8MCU主频的计算=(HSE_VALUE/PLL_M*PLL_N)/PL......
  • 使用langchain与你自己的数据对话(三):检索(Retrieval)_langchain 数据收集
    今天我们来继续讲解deepleaning.AI的在线课程“LangChain:ChatwithYourData”的第四门课:检索(Retrieval)。Langchain在实现与外部数据对话的功能时需要经历下面的5个阶段,它们分别是:DocumentLoading->Splitting->Storage->Retrieval->Output,如下图所示:在上一篇博客......
  • 拆解LangChain的大模型记忆方案
    之前我们聊过如何使用LangChain给LLM(大模型)装上记忆,里面提到对话链ConversationChain和MessagesPlaceholder,可以简化安装记忆的流程。下文来拆解基于LangChain的大模型记忆方案。1.安装记忆的原理1.1.核心步骤给LLM安装记忆的核心步骤就3个:在对话之前调取之前的历史消息。......
  • 单片机知多少之STM32F103-GPIO输出应用篇
    示例:选择GPIOB做流水灯控制逻辑将8个发光二极管的负端分别接入PB0~PB7,正端接5V电源,当配置GPIO为低电平时,回路导通,二极管开始工作,亮灯;当配置GPIO为高电平时,回路等电位断开,二极管不工作,灭灯,使GPIO输出按一定顺序执行,即流水灯。编写代码变量定义:GPIO_InitTypeDefGPIO_InitSt......
  • STM32中的DMA:解锁高效数据传输的秘密武器(内附实例)
    目录引言理解DMA:数据的高效搬运工DMA的主要特性多优先级请求事件标志数据对齐多样化的数据传输路径广泛的数据源与目标最大数据长度DMA寄存器详解增量与循环模式DMA中断机制​编辑小实验:DMA-ADC串口发送引言在现代嵌入式系统设计中,数据传输速度和效率是关键......