掘金 人工智能 05月30日 16:08
LangChain(二) 数据连接封装
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了如何使用Langchain加载不同类型的数据源,并将其存储到向量数据库中以进行高效检索。文章首先展示了如何加载PDF和CSV文件,并提供了更多加载器的官方文档链接。接着,详细讲解了文档切分的方法,包括设置分段大小和重叠度。最后,演示了如何将切分后的文档灌入FAISS向量数据库,并使用OpenAI Embeddings进行向量化,从而实现基于文本相似度的检索功能。文章强调Langchain提供的只是向量数据库的接口封装,具体操作可参考官方文档。

📄**文档加载器**: Langchain提供了多种文档加载器,例如PyMuPDFLoader用于加载PDF文件,CSVLoader用于加载CSV文件。用户可以根据需要选择合适的加载器,并参考官方文档获取更多信息。

✂️**文档切分**: 使用RecursiveCharacterTextSplitter可以将文档切分成更小的块,以便更好地进行向量化和检索。可以设置chunk_size(分段数量)和chunk_overlap(重叠度)等参数来控制切分效果。

🗄️**向量数据库与数据检索**: 通过Langchain将文档灌入FAISS向量数据库,并使用OpenAI Embeddings进行向量化。然后,可以使用检索器(retriever)根据文本相似度检索相关文档。文章展示了如何检索与“deepseek-v3代码能力怎么样”相关的内容。

上一篇文章我们说了如何与模型进行交互,下面要处理的问题就是如何获取数据,并在向量数据库中进行检索。同样,Langchain也提供了一系列的工具

文档加载器

加载PDF

 pip install langchain-community pymupdf
from dotenv import load_dotenvload_dotenv('../.env')from langchain_community.document_loaders import PyMuPDFLoaderdef load_pdf():    loader = PyMuPDFLoader('../data/deepseek-v3-1-4.pdf')    pages = loader.load_and_split()    print(pages[0].page_content)if __name__ == '__main__':    load_pdf()

输出:

加载csv

def load_csv():    loader = CSVLoader('../data/test.csv')    data = loader.load()    for record in data[:2]:        print(record)

输出:

更多加载器可参考官方文档

文档切分

pip install --upgrade langchain-text-splitters
def split_doc():    pages = load_pdf()    text_splitter = RecursiveCharacterTextSplitter(        chunk_size=200, # 分段数量        chunk_overlap=100, # 重叠        length_function=len,        add_start_index=True,    )    paragraphs = text_splitter.create_documents([pages[0].page_content])    for para in paragraphs:        print(para.page_content)        print('-------')

写入向量数据库与数据检索

from dotenv import load_dotenvload_dotenv('../.env')from langchain_openai import OpenAIEmbeddingsfrom langchain_text_splitters import RecursiveCharacterTextSplitterfrom langchain_community.vectorstores import FAISSfrom langchain_community.document_loaders import PyMuPDFLoader# 加载文档loader = PyMuPDFLoader("../data/deepseek-v3-1-4.pdf")pages = loader.load_and_split()# 文档切分text_splitter = RecursiveCharacterTextSplitter(    chunk_size=300,    chunk_overlap=100,    length_function=len,    add_start_index=True,)texts = text_splitter.create_documents(    [page.page_content for page in pages[:4]])# 灌库embeddings = OpenAIEmbeddings(model="text-embedding-ada-002")db = FAISS.from_documents(texts, embeddings)# 检索 top-3 结果retriever = db.as_retriever(search_kwargs={"k": 3})docs = retriever.invoke("deepseek-v3代码能力怎么样")for doc in docs:    print(doc.page_content)    print('===============')

输出:

需要注意的是,LangChain提供的只是向量数据库的接口封装,参考:python.langchain.com/docs/integr…

关于这一部分没有太多需要特殊说明的,参考官方文档操作即可

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Langchain 向量数据库 数据加载 文本切分 FAISS
相关文章