本文共 2353 字,大约阅读时间需要 7 分钟。
基于向量存储的问答系统实现
本文将详细介绍如何构建一个基于向量存储的问答系统,结合FAISS向量索引和Ollama嵌入模型,实现检索增强生成(RAG)管道的构建与应用。
第一部分:向量存储的加载
代码核心组件包括FAISS向量库的加载与配置。在实际应用中,我们需要确保以下几点:
代码实现如下:
from langchain_community.vectorstores import FAISSfrom langchain.embeddings.base import Embeddingsfrom langchain.chains import RetrievalQAfrom langchain.llms import Ollamaimport osimport requestsclass 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 embeddingsdef 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管道的构建
在实际应用中,我们需要根据具体需求配置RAG管道。以下是典型的配置步骤:
代码实现如下:
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 第三部分:问答系统的使用
在实际应用中,问答系统的使用流程如下:
代码实现如下:
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() 本文提供的代码实现详细描述了一个基于向量存储的问答系统的构建过程,涵盖了从向量库的加载到问答管道的配置,以及实际的问答查询流程。该系统能够有效地将文档内容与问题相匹配,返回相关的问答结果。
转载地址:http://roqfk.baihongyu.com/