本文共 2343 字,大约阅读时间需要 7 分钟。
在自然语言处理领域,检索增强生成(Retrieval-Augmented Generation, RAG)是一项强大的技术,能够通过结合检索和生成模型,显著提升问题回答的质量。本文将介绍一个基于 FAISS 向量库和 LangChain 框架构建的 RAG 管道的实现方法。
首先,我们需要引入必要的外部库:
from langchain_community.vectorstores import FAISSfrom langchain.embeddings.base import Embeddingsfrom langchain.chains import RetrievalQAfrom langchain.llms import Ollamaimport osimport requests
接下来,我们定义一个加载 FAISS 向量库的函数,该函数将使用 nomic-embed-text 嵌入模型来生成向量表示:
class NomicEmbedText(Embeddings): def __init__(self, base_url="http://127.0.0.1:11434"): self.base_url = base_url def embed_query(self, text): response = requests.post( f"{self.base_url}/api/embeddings", json={"model": "nomic-embed-text:v1.5", "prompt": text} ) if response.status_code != 200: raise ValueError(f"嵌入生成失败: {response.text}") return response.json()["embedding"] def embed_documents(self, texts): embeddings = [] for text in texts: embedding = self.embed_query(text) embeddings.append(embedding) return embeddings def load_faiss_vector_store(load_path="faiss_index"): if not os.path.exists(load_path): raise FileNotFoundError(f"FAISS 向量库不存在: {load_path}") vector_store = FAISS.load_local( folder_path=load_path, embeddings=NomicEmbedText(), allow_dangerous_deserialization=True ) return vector_store 然后,我们创建一个 RAG 管道,使用 Ollama 模型作为生成模型,并结合 FAISS 向量库作为检索器:
def setup_rag_pipeline(vector_store): llm = Ollama( model="deepseek-r1:1.5b", base_url="http://127.0.0.1:11434" ) qa_pipeline = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=vector_store.as_retriever(search_kwargs={"k": 3}) ) return qa_pipeline 最后,我们可以通过调用 RAG 管道来回答问题:
def query_rag_pipeline(qa_pipeline, question): result = qa_pipeline({"query": question}) return result["result"] 将以上函数组合使用:
def main(): vector_store = load_faiss_vector_store() qa_pipeline = setup_rag_pipeline(vector_store) question = "关于公司法律条款的解释" answer = query_rag_pipeline(qa_pipeline, question) print("回答:", answer)if __name__ == "__main__": main() 通过以上实现,我们成功构建了一个基于 FAISS 和 LangChain 的 RAG 管道。该系统能够通过结合嵌入模型和向量检索,快速找到相关文档,并生成高质量的回答。
转载地址:http://goqfk.baihongyu.com/