【Langchain+Ollama+RAG】使用Langchain调用本地Ollama部署的Qwen模型,读取本地PDF进行知识问答实现RAG
实现RAG有多种手段。本文仅介绍使用Langchain+Ollama的方式,读取本地PDF进行知识问答实现RAG的一种最简单的实例。本实例仅介绍了一种最简单的RAG实现方式,使用RAG技术的同时,大模型与直接调用的大模型会拥有不同的回答。此外,本地部署Ollama的模型请参考其他文章。
·
概要
实现RAG有多种手段。本文仅介绍使用Langchain+Ollama的方式,读取本地PDF进行知识问答实现RAG的一种最简单的实例。
整体架构流程
1.安装依赖包
conda install -c pytorch faiss-gpu
pip install PyMuPDF
pip install langchain
提示:faiss也可以使用cpu版本
此外,本地部署Ollama的模型请参考其他文章
2.准备PDF
放置pdf至
./rag_storage/1.pdf
3.调用问答chain
全部代码如下:
from flask import Flask, request, jsonify
from langchain_ollama import ChatOllama
import fitz # PyMuPDF
from langchain.document_loaders import PyMuPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_ollama import OllamaEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
app = Flask(__name__)
model_name = "qwen2.5:14b"
# 初始化模型
llm = ChatOllama(
model=model_name,
)
# 加载 PDF 文档
pdf_file = "./rag_storage/1.pdf" # 替换为你的 PDF 文件路径
# 定义加载 PDF 的函数
def load_pdf(file_path):
loader = PyMuPDFLoader(file_path)
documents = loader.load()
return documents
documents = load_pdf(pdf_file)
# 文本分割
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
text_chunks = text_splitter.split_documents(documents)
# 创建 Ollama 嵌入和向量存储
embeddings = OllamaEmbeddings(model=model_name)
vector_store = FAISS.from_documents(text_chunks, embeddings)
# 创建检索问答链
retriever = vector_store.as_retriever()
# 创建检索问答链
qa_chain = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever)
# 进行问答
if __name__ == '__main__':
while True:
question = input("请输入问题(输入 'exit' 结束对话):")
if question.lower() == 'exit':
print("结束对话。")
break
answer = qa_chain.run(question)
print("回答:", answer)
小结
本实例仅介绍了一种最简单的RAG实现方式,使用RAG技术的同时,大模型与直接调用的大模型会拥有不同的回答。
更多推荐




所有评论(0)