1.FAISS与Langchain整合,搭配大1.FAISS是什么?\nFAISS向量数据库,是来自 Meta AI(原 Facebook Research)的开源项目,也是目前最流行的、效率比较高的相似度检索方案之一。\n\n核心功能:\n\n相似性搜索:FAISS提供了多种算法来快速找到一个向量在大型数据集中的最近邻和近邻,这对于机器学习和数据挖掘任务非常有用。\n聚类功能:除了相似性搜索外,FAISS还支持向量的聚类操作。\n索引结构:FAISS支持多种索引结构,如HNSW(Hierarchical Navigable Small World)、IVF(Inverted Indexed Vector File)和PQ(ProductQuantization),这些结构可以针对不同的数据和查询需求进行优化。\nLangChain有需要可以看看官网:\nLangChain中文网:http://doc.cnlangchain.com/getting_started.html\n\n2.开始代码实现\n1.处理pdf文本\nfrom PyPDF2 import PdfReader\n\n# 处理文件\nclass PdfEngine:\n # 初始化方法,用于创建对象时初始化属性\n def __init__(self, url):\n self.url = url\n\n # 获取pdf文件内容\n def get_pdf_text(self):\n text = \"\"\n pdf_reader = PdfReader(self.url)\n for page in pdf_reader.pages:\n text += page.extract_text()\n\n return text\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n2.进行文本保存和加载\n我这里使用的 智普的embedding-2\nfaisst 是文件夹名字。通过 FAISS 保存到本地,后续就不需要再执行向量化,直接读取即可\n\nfrom langchain_community.vectorstores import FAISS\nfrom langchain_community.embeddings import ZhipuAIEmbeddings\n\nclass FaissEngine:\n # 保存\n def save_vector_store(self,textChunks):\n embeddings = ZhipuAIEmbeddings(\n model=\"embedding-2\",\n api_key=\"\"\n )\n print(embeddings)\n db = FAISS.from_texts(textChunks, embeddings)\n db.save_local('faisst')\n\n\n # 加载\n def load_vector_store(self):\n embeddings = ZhipuAIEmbeddings(\n model=\"embedding-2\",\n api_key=\"\"\n )\n return FAISS.load_local('faisst', embeddings,allow_dangerous_deserialization=True)\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n3.配置文本处理与大模型交互\n大模型交互 我使用的是 阿里的千问\n\nfrom langchain.chains.conversational_retrieval.base import ConversationalRetrievalChain\nfrom langchain.text_splitter import RecursiveCharacterTextSplitter\nfrom langchain.chains import RetrievalQA\nfrom langchain_openai import ChatOpenAI\nfrom langchain.prompts import PromptTemplate\n\nclass LlmEngine():\n\n # 拆分文本 RecursiveCharacterTextSplitter\n def get_text_chunks(self,text):\n text_splitter = RecursiveCharacterTextSplitter(\n chunk_size=1000,\n # chunk_size=768,\n chunk_overlap=200,\n length_function=len\n )\n chunks = text_splitter.split_text(text)\n return chunks\n\n\n\n # 获取检索型问答链\n def get_qa_chain(self,vector_store):\n prompt_template = \"\"\"基于以下已知内容,简洁和专业的来
FAISS与Langchain整合,搭配大模
最新推荐文章于 2025-05-15 11:19:42 发布