langchain框架的进一步应用

上一篇文章使用langchain建立了很多提示词模板并调用FAISS进行了 向量检索

接下来使用langchain进行外部文件的解析并利用Retriever检索

首先,需要创建一个langchain的Embedding        可以如下创建方式

embeddings = DashScopeEmbeddings(
    model="text-embedding-v3",  # 阿里云支持的模型
    dashscope_api_key=os.getenv("DASHSCOPE_API_KEY"),
)

如果是自己的本地模型则需要连接自己本地这里用的自己本地的nlp_gte_sentence-embedding_chinese-large  需要封装成langchain需要的如下代码


from transformers import pipeline

from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks

from dotenv import load_dotenv

# 加载 .env 文件
load_dotenv()

# 直接加载 Hugging Face 的句子嵌入模型
model_id = "iic/nlp_gte_sentence-embedding_chinese-large"
embed_model = pipeline(Tasks.sentence_embedding,
                       model=model_id,
                       sequence_length=512
                       )

# 自定义一个简单的嵌入器类(适配 LangChain 接口)
class HuggingFaceEmbedding:
    def __init__(self, pipeline):
        self.pipeline = pipeline

    def embed_documents(self, texts):
        return [self.pipeline(text)[0][0].tolist() for text in texts]

    def embed_query(self, text):
        return self.embed_documents([text])[0]

# 初始化自定义嵌入器
custom_embedder = HuggingFaceEmbedding(embed_model)

def getEmbedding():
    return custom_embedder

具体情况具体封装

使用langchain对pdf进行解析并切片

PyPDFLoader = PyPDFLoader("异地测试安排 20230424.pdf")
pySplitCat = PyPDFLoader.load_and_split()

转换成document数据保存在数据库

pages = text_splitter.create_documents([pySplitCat[0].page_content])

ChromaVectorDB = Chroma.from_documents( pages, embeddings)

这里如果需要持久化可以在数据库后面添加持久化地址的参数

最后,转化成检索器检索信息  检索器可以通过优先级进行排序,比直接使用向量检索效果更好

DBRetriever = ChromaVectorDB.as_retriever(search_kwargs={"k": 2})
retrieverInfo =  DBRetriever.invoke("帮我查找一下关于异地测试安排的信息")

代码如下

import os

from langchain_community.embeddings import ModelScopeEmbeddings, DashScopeEmbeddings, HuggingFaceEmbeddings
from modelscope import Tasks
from modelscope.pipelines import pipeline
from dotenv import load_dotenv
from langchain.vectorstores import Chroma
from langchain_community.document_loaders import  PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

from AI.LangChain import LangChainEmbedding

load_dotenv()
#创建自己的向量检索(原生)
# model_id = r"C:\Users\86173\.cache\modelscope\hub\models\iic\nlp_gte_sentence-embedding_chinese-large"
# pipeline_se = pipeline(Tasks.sentence_embedding,
#                        model=model_id,
#                        sequence_length=512
#                        )
# 使用HuggingFaceEmbeddings加载本地模型
embeddings =  LangChainEmbedding.getEmbedding()
# embeddings = DashScopeEmbeddings(
#     model="text-embedding-v3",  # 阿里云支持的模型
#     dashscope_api_key=os.getenv("DASHSCOPE_API_KEY"),
# )
text_splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=30)
PyPDFLoader = PyPDFLoader("异地测试安排 20230424.pdf")
pySplitCat = PyPDFLoader.load_and_split()
print(len(pySplitCat))
pages = text_splitter.create_documents([pySplitCat[0].page_content])
print(len(pages))
ChromaVectorDB = Chroma.from_documents( pages, embeddings)
DBRetriever = ChromaVectorDB.as_retriever(search_kwargs={"k": 2})
print(DBRetriever)
retrieverInfo =  DBRetriever.invoke("帮我查找一下关于异地测试安排的信息")
print(retrieverInfo)
pageContent = [i.page_content for i in retrieverInfo]
print(pageContent)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值