Windows 10下RAG从安装到运行的全流程图解

云信安装大师
90
AI 质量分
4 5 月, 2025
3 分钟阅读
0 阅读

Windows 10下RAG从安装到运行的全流程图解

引言

RAG(Retrieval-Augmented Generation)是一种结合检索和生成的AI技术,能够显著提升大语言模型的回答质量。本文将手把手带你在Windows 10系统上完成RAG环境的搭建和运行,即使是零基础的小白也能轻松上手。

准备工作

环境要求

  • Windows 10系统(版本1903或更高)
  • Python 3.8或更高版本
  • 至少8GB内存(推荐16GB)
  • 至少20GB可用磁盘空间

前置知识

  • 基本命令行操作
  • Python基础语法(非必须但有益)

第一步:安装Python和必要工具

  1. 安装Python

    代码片段
    # 下载Python安装包(推荐3.8+版本)
    # 访问 https://www.python.org/downloads/
    
    # 安装时务必勾选"Add Python to PATH"
    
  2. 验证Python安装

    代码片段
    python --version
    pip --version
    
  3. 安装Git(用于克隆代码库)

    代码片段
    # 下载地址:https://git-scm.com/download/win
    # 安装时选择默认选项即可
    
    # 验证安装
    git --version
    

第二步:创建虚拟环境

为了避免包冲突,我们创建一个独立的Python环境:

代码片段
# 创建虚拟环境(推荐使用venv)
python -m venv rag_env

# 激活虚拟环境
.\rag_env\Scripts\activate

# (激活后提示符前会出现(rag_env)标记)

第三步:安装RAG核心依赖

代码片段
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install transformers faiss-cpu langchain sentence-transformers pypdf python-dotenv openai tiktoken

注意事项
faiss-cpu是向量检索库的CPU版本,如需GPU加速可安装faiss-gpu
torch的CUDA版本需与你的显卡驱动匹配

第四步:准备示例项目

  1. 克隆示例仓库
代码片段
git clone https://github.com/example/rag-demo.git
cd rag-demo
  1. 项目结构说明
代码片段
├── data/                # 存放PDF/TXT等文档数据
├── embeddings/          # 存储生成的向量索引
├── app.py               # RAG应用主程序
├── requirements.txt     # Python依赖列表
└── .env.example         # API密钥配置模板

第五步:配置API密钥

  1. 获取OpenAI API Key
    访问 https://platform.openai.com/api-keys

  2. 创建.env文件

代码片段
# .env文件内容示例:
OPENAI_API_KEY=你的API密钥_这里不要有空格和引号

第六步:构建知识库索引

  1. 准备文档数据
    将PDF/TXT等文档放入data/文件夹

  2. 运行索引构建脚本

代码片段
# build_index.py (示例代码)
from langchain.document_loaders import PyPDFLoader, DirectoryLoader 
from langchain.text_splitter import RecursiveCharacterTextSplitter 
from langchain.embeddings import HuggingFaceEmbeddings 
from langchain.vectorstores import FAISS 

def build_vector_index():
    # 加载文档并分割文本块(每块500字符,重叠50字符)
    loader = DirectoryLoader('data/', glob="*.pdf", loader_cls=PyPDFLoader)
    documents = loader.load()
    text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
    texts = text_splitter.split_documents(documents)

    # 使用开源模型生成嵌入向量(sentence-transformers/all-MiniLM-L6-v2)
    embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")

    # 构建FAISS向量索引并保存到本地(约5分钟处理100页PDF)
    db = FAISS.from_documents(texts, embeddings) 
    db.save_local("embeddings/my_index")

if __name__ == "__main__":
    build_vector_index()

原理说明
– PDF解析:使用PyPDF提取文本内容
– Text Splitting:将长文本分割为适合处理的片段
– Embedding:将文本转换为768维向量
– FAISS:高效的向量相似度搜索库

第七步:运行RAG问答系统

代码片段
# app.py (完整示例)
import os 
from dotenv import load_dotenv 
from langchain.chains import RetrievalQA 
from langchain.chat_models import ChatOpenAI 
from langchain.vectorstores import FAISS 
from langchain.embeddings import HuggingFaceEmbeddings 

load_dotenv()

def initialize_qa_system():
    # (1)加载本地向量索引(约1秒加载时间)
    embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
    db = FAISS.load_local("embeddings/my_index", embeddings) 

    # (2)配置GPT模型(gpt-3.5-turbo性价比最高)
    llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0) 

    # (3)创建检索增强生成链(最多返回3个相关片段)
    qa = RetrievalQA.from_chain_type(
        llm=llm,
        chain_type="stuff",
        retriever=db.as_retriever(search_kwargs={"k":3}),
        return_source_documents=True )

    return qa 

def main():
    qa_system = initialize_qa_system()

    print("RAG系统已启动!输入'quit'退出\n")
    while True:
        query = input("请输入问题: ")
        if query.lower() == 'quit':
            break

        result = qa_system({"query":query})

        print("\n回答:", result["result"])
        print("\n参考来源:")
        for doc in result["source_documents"]:
            print(f"- {doc.metadata['source']} (第{doc.metadata['page']+1}页)")

if __name__ == "__main__":
    main() 

第八步:测试与优化

典型测试案例

代码片段
请输入问题: PDF中提到的主要技术挑战是什么?

回答: PDF中提到的三大技术挑战是:
1. NLP模型的上下文长度限制...
2. ...
3. ...

参考来源:
- data/report.pdf (第15页)  
- data/report.pdf (第22页)

性能优化技巧

  1. GPU加速:
代码片段
pip uninstall faiss-cpu && pip install faiss-gpu==1.7.2 cudatoolkit=11.8 
  1. Chunk参数调整:
代码片段
text_splitter = RecursiveCharacterTextSplitter(
                chunk_size=300,      # ↓调小可提高精度但增加计算量  
                chunk_overlap=30 )   # ↑调大可改善上下文连贯性  
  1. Embedding模型选择:
代码片段
# model_name可选列表:
"sentence-transformers/multi-qa-mpnet-base-dot-v1"     # ↑精度高 ↓速度慢  
"all-MiniLM-L12-v2"                                    # →平衡选择  
"paraphrase-albert-small-v2"                           # ↑速度快 ↓精度低  

FAQ常见问题解决

Q1: ModuleNotFoundError: No module named ‘…’
pip install报错通常是因为虚拟环境未激活或依赖未正确安装

Q2: CUDA out of memory
➔ GPU内存不足时添加参数降低batch size:

代码片段
embeddings = HuggingFaceEmbeddings(
              model_name="...",
              model_kwargs={'device':'cuda'},
              encode_kwargs={'batch_size':16}) 

Q3: PDF解析中文乱码
➔ PDF可能使用特殊字体编码,尝试更换解析器:

代码片段
from pdfminer.high_level import extract_text  
text = extract_text("file.pdf")  

总结流程回顾

整个RAG系统的搭建流程可归纳为:

代码片段
[文档准备] → [文本分割] → [向量嵌入] → [索引构建] → [查询检索] → [LLM生成]
         │               │               │               │               │   
         ↓               ↓               ↓               ↓               ↓   
      PDF/TXT       chunk_size参数     Embedding模型     FAISS配置       GPT模型选择       

关键点总结:
1️⃣ Windows环境需特别注意路径反斜杠问题(建议使用Path()处理)
2️⃣ Embedding质量直接影响最终效果,应选择合适的开源模型
3️⃣ Chunk参数需要根据实际文档内容反复调试优化

现在你已经拥有了一个完整的本地RAG系统!下一步可以尝试接入更多数据源或部署为Web应用。

原创 高质量