上一篇文章使用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)