LangChain的数据检索
LangChain的数据检索LangChain为RAG应用程序提供了从简单到复杂的所有构建块例如数据的获取、切分、向量化、向量存储、向量检索等模块文档加载模板LangChain封装了一系列类型的文档加载模块例如PDF、CSV、HTML、JSON、Markdown、File Directory等。下面以PDF文件夹在为例看一下用法其它类型的文档加载的用法都类似。# pip install pypdf # pip install unstructured 开启科学上网下载 from langchain_community.document_loaders import PyPDFLoader, UnstructuredWordDocumentLoader loader PyPDFLoader(rPDF文件路径) page loader.load_and_split() print(page[0].page_content) # 处理word locale UnstructuredWordDocumentLoader(rword文件路径) page locale.load() print(page[0].page_content)文档分割LangChain提供了许多不同类型的文本切分器具体见下表这里以Recursive为例展示用法。RecursiveCharacterTextSplitter是LangChain对这种文档切分方式的封装from langchain_community.document_loaders import PyPDFLoader from langchain_text_splitters import RecursiveCharacterTextSplitter loader PyPDFLoader(pdf文件) pages loader.load_and_split() print(f第0页\n{pages[2].page_content}) # print(pages) text_splitter RecursiveCharacterTextSplitter( chunk_size200, chunk_overlap100, length_functionlen, separators[] ) # print([i.page_content for i in pages]) page_data text_splitter.create_documents([i.page_content for i in pages]) for da in page_data: print(da.page_content) print(---, len(da.page_content))文本向量化模型封装LangChain对一些文本向量化模型的接口做了封装例如OpenAI, Cohere, Hugging Face等。 向量化模型的封装提供了两种接口一种针对文档的向量化embed_documents一种针对句子的向量化embed_query。import os from dotenv import load_dotenv from langchain_community.embeddings import DashScopeEmbeddings load_dotenv() embeddings_model DashScopeEmbeddings( dashscope_api_key os.getenv(DASHSCOPE_API_KEY), ) embeddings embeddings_model.embed_documents( [ 这是第一段文档, 这是第二段文档, 这是第三段文档, 这是第四段文档, ] ) print(len(embeddings),len(embeddings[0]),embeddings[1])向量存储LangChain官方提供了三种开源、免费的可用于本地机器的向量数据库示例chroma、FAISS、 Lance。这里以chroma数据库为例。import os from dotenv import load_dotenv from langchain_community.document_loaders import PyPDFLoader from langchain_community.vectorstores import Chroma from langchain_huggingface import HuggingFaceEmbeddings from langchain_text_splitters import RecursiveCharacterTextSplitter load_dotenv() # 文档解析 loader PyPDFLoader(rF:\dev\tl\Python\图灵大模型\day06\案例\app\day04\财务管理文档.pdf) page loader.load() # 文档分割 text_splitter RecursiveCharacterTextSplitter( chunk_size200, chunk_overlap50, length_functionlen, add_start_indexTrue, ) page_documents text_splitter.create_documents([i.page_content for i in page]) # 创建向量模型对象 embeddings HuggingFaceEmbeddings(model_namerF:\dev\tl\LLM\loca_model\BAAI\bge-large-zh-v1___5) # 创建向量存储对象 db Chroma.from_documents(page_documents, embeddings, persist_directoryr./chroma_db) # 向量检索 docs db.similarity_search(财务报表) for doc in docs: print(doc.page_content)检索器检索器Retrievers 是一个用于从文档集合中检索最相关文档或信息片段的关键组件。它们通常与向量存储Vector Stores结合使用通过计算查询向量与存储中的文档向量之间的相似度来实现高效的语义搜索。简单来说检索器帮助你找到与特定查询最相关的文档。import os from dotenv import load_dotenv from langchain_community.vectorstores import Chroma from langchain_huggingface import HuggingFaceEmbeddings load_dotenv() # 创建向量化模型 model_name rF:\dev\tl\LLM\loca_model\BAAI\bge-large-zh-v1___5 embeddings HuggingFaceEmbeddings(model_namemodel_name) # 加载本地向量数据库 persist_directory ./chroma_db db Chroma(embedding_functionembeddings, persist_directorypersist_directory) # 创建检索器对象 retriever db.as_retriever(search_kwargs{k: 2}) docs retriever.invoke(会计核算基础规范) for i in docs: print(i)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2422278.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!