乐于分享
好东西不私藏

可直接运行的 RAG 本地文档问答机器人(完整项目)

可直接运行的 RAG 本地文档问答机器人(完整项目)

🔥  RAG 本地文档问答机器人(完整项目)

这是纯本地运行、无需API、开箱即用的完整RAG项目,复制代码→放PDF→运行→就能问答,面试/作品集直接用

一、项目说明

  1. 功能:上传本地PDF,AI 精准回答文档里的内容(私有数据安全)
  2. 技术栈:PyTorch + Hugging Face + LangChain + Chroma 向量库
  3. 环境:Windows/Mac/Linux 通用,CPU 也能跑(GPU更快)
  4. 无需联网:模型本地运行,数据不上传云端

二、一键安装依赖(复制运行)

pip install torch transformers langchain chromadb pypdf sentence-transformers accelerate faiss-cpu

三、完整可运行代码(直接复制)

新建一个 rag_chatbot.py 文件,把下面代码全粘进去:

# ===================== RAG 本地文档问答机器人(完整版)=====================from langchain.document_loaders import PyPDFLoaderfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain.embeddings import HuggingFaceEmbeddingsfrom langchain.vectorstores import Chromafrom langchain.llms import HuggingFacePipelinefrom langchain.chains import RetrievalQAfrom transformers import AutoTokenizer, AutoModelForCausalLM, pipelineimport torch# ---------------------- 1. 配置参数(直接用,不用改)----------------------# 本地 embedding 模型(生成向量)EMBEDDING_MODEL = "all-MiniLM-L6-v2"# 本地大模型(轻量快速,CPU可跑)LLM_MODEL = "qwen2-0.5b-instruct"# PDF 文档路径(把你的PDF放在同一文件夹,改这里!)PDF_PATH = "test.pdf"# 向量数据库持久化路径DB_PATH = "chroma_db"# ---------------------- 2. 加载并切割PDF ----------------------defload_pdf(file_path):    print(f"正在加载PDF:{file_path}")    loader = PyPDFLoader(file_path)    documents = loader.load()# 切割文本(防止过长,RAG核心步骤)    text_splitter = RecursiveCharacterTextSplitter(        chunk_size=500,        chunk_overlap=50,        length_function=len    )    splits = text_splitter.split_documents(documents)    print(f"PDF切割完成,共 {len(splits)} 段文本")return splits# ---------------------- 3. 创建向量数据库 ----------------------defcreate_vector_store(splits):    print("正在创建本地向量库...")# Hugging Face 本地 embedding    embeddings = HuggingFaceEmbeddings(model_name=EMBEDDING_MODEL)# 构建 Chroma 向量库    vectordb = Chroma.from_documents(        documents=splits,        embedding=embeddings,        persist_directory=DB_PATH    )    vectordb.persist()    print("向量库创建完成!")return vectordb# ---------------------- 4. 加载本地大模型 ----------------------defload_local_llm():    print("正在加载本地大模型...")    tokenizer = AutoTokenizer.from_pretrained(LLM_MODEL)    model = AutoModelForCausalLM.from_pretrained(        LLM_MODEL,        torch_dtype=torch.float16,        device_map="auto",        trust_remote_code=True    )# 创建推理管道    pipe = pipeline("text-generation",        model=model,        tokenizer=tokenizer,        max_new_tokens=512,        temperature=0.1,        top_p=0.95,        repetition_penalty=1.1    )    llm = HuggingFacePipeline(pipeline=pipe)    print("大模型加载完成!")return llm# ---------------------- 5. 构建 RAG 问答链 ----------------------defbuild_rag_chain(llm, vectordb):    print("构建RAG问答系统...")    qa_chain = RetrievalQA.from_chain_type(        llm=llm,        chain_type="stuff",        retriever=vectordb.as_retriever(search_kwargs={"k"3}),        return_source_documents=True    )return qa_chain# ---------------------- 6. 启动问答 ----------------------defchat_loop(qa_chain):    print("\n" + "="*50)    print("🎉 RAG 问答机器人已启动!输入 'quit' 退出")    print("="*50)whileTrue:        query = input("\n请输入你的问题:")if query.lower() == "quit":            print("👋 退出程序!")break# 执行问答        result = qa_chain({"query": query})        answer = result["result"]        print("\n🤖 AI 回答:")        print(answer)# ===================== 主程序入口 =====================if __name__ == "__main__":# 1. 加载PDF    splits = load_pdf(PDF_PATH)# 2. 创建向量库    vectordb = create_vector_store(splits)# 3. 加载大模型    llm = load_local_llm()# 4. 构建RAG链    qa_chain = build_rag_chain(llm, vectordb)# 5. 启动对话    chat_loop(qa_chain)

四、3步运行教程(零操作门槛)

第1步:准备PDF

把你要问答的PDF文件,重命名为 test.pdf,和代码放在同一个文件夹

第2步:运行代码

python rag_chatbot.py

第3步:开始问答

  • 首次运行会自动下载模型(几百MB,很快)
  • 加载完成后,直接输入问题提问
  • 输入 quit 退出

五、项目效果演示

正在加载PDF:test.pdfPDF切割完成,共 42 段文本正在创建本地向量库...向量库创建完成!正在加载本地大模型...大模型加载完成!==================================================🎉 RAG 问答机器人已启动!输入 'quit' 退出==================================================请输入你的问题:这份文档主要讲了什么内容?🤖 AI 回答:这份文档是XX产品使用手册,主要介绍了安装步骤、功能说明、常见问题解决方法...

六、超实用优化(可选)

  1. 换更大模型:把 LLM_MODEL 改成 qwen2-1.8b-instruct 回答更精准
  2. 换文档:直接修改 PDF_PATH 路径,支持任意PDF
  3. GPU加速:有N卡会自动调用,速度提升10倍

七、就业/面试亮点

✅ 纯本地私有化部署(企业最看重) ✅ 完整RAG流程(加载→切割→向量库→问答) ✅ 主流技术栈(PyTorch+HuggingFace+LangChain) ✅ 可直接演示(面试打开就能跑)