公司动态

RAG本地知识库问答

📅 2026/8/14 14:28:15
RAG本地知识库问答
环境准备1、安装Ollama2、安装langchain代码如下:from langchain_community.document_loaders import TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_community.vectorstores import FAISS # 新版ollama包 from langchain_ollama import ChatOllama,OllamaEmbeddings from langchain_core.prompts import ChatPromptTemplate from langchain_core.runnables import RunnablePassthrough from langchain_core.output_parsers import StrOutputParser # 1、加载text文件 loader TextLoader(test.text,encodingutf-8) docs loader.load() # 2、文件切片 text_splitter RecursiveCharacterTextSplitter( chunk_size 800, chunk_overlap 150 ) split_docs text_splitter.split_documents(docs) # 3、本地ollma嵌入模型 embedding OllamaEmbeddings(modelnomic-embed-text) # 4、构建本地FAISS向量数据库 vector_db FAISS.from_documents(split_docs,embedding) retriever vector_db.as_retriever(search_kwargs{k:3}) # 5、检索结果拼接函数 def format_context(docs): return \n\n.join(doc.page_content for doc in docs) # 6.RAG提示词 prompt ChatPromptTemplate.from_template( 你是文档问答助手严格依靠提供的上下文回答问题。 如果上下文没有相关信息直接回答不清楚禁止编造信息。 上下文{context} 问题{question} ) # 7.本地大模型 llm ChatOllama( modelgemma3:1b, num_ctx1024, temperature0 ) # 8.LCEL链路 rag_chain ( {context: retriever | format_context, question: RunnablePassthrough()} | prompt | llm | StrOutputParser() ) # 9.问答入口 if __name__ __main__: answer rag_chain.invoke(文档里面里面讲了什么) print(answer)运行结果如下:测试文本:阿尔伯特・爱因斯坦1879 年生于德国是举世闻名的理论物理学家。1905 年他发表狭义相对论提出光速不变原理、质能方程 Emc²。 1915 年正式推出广义相对论重新解释引力本质为时空弯曲。相对论改变了人类对于时间、空间、质量、能量的认知成为现代物理学两大支柱之一。 除此之外爱因斯坦还在光电效应、布朗运动等方向有着重大研究光电效应相关研究让他拿下诺贝尔物理学奖。