本地 RAG 知识库快速部署清单

以下是「本地 RAG 知识库快速部署清单」,按「环境准备→核心组件安装→数据处理→检索生成测试→优化」5 个阶段整理,包含工具下载、关键代码、操作截图提示,个人用户 2 小时内可完成基础版本

一、环境准备(10 分钟)

1. 硬件要求(最低配置)

设备

最低要求

推荐配置(流畅运行)

CPU

4 核(如 Intel i5/Ryzen 5)

8 核(如 Intel i7/Ryzen 7)

GPU

8GB 显存(如 RTX 3060/4060)

16GB 显存(如 RTX 4070/4080)

内存

16GB RAM

32GB RAM

硬盘

100GB 空闲空间(模型 + 数据)

500GB SSD(加快模型加载速度)

系统

Windows 10+/macOS 12+/Linux

Windows 11/macOS Ventura

说明:无 GPU 可用 CPU 运行(速度较慢,适合测试),需确保系统已安装 Python 3.8+(官网下载:
https://www.python.org/downloads/)。

2. 必备工具安装

工具名称

作用

安装命令 / 步骤

Git

拉取开源模型 / 代码

官网下载:
https://git-scm.com/downloads(默认安装即可)

Python 依赖包

运行 RAG 脚本

打开终端(CMD/PowerShell),执行:

pip install chromadb transformers torch sentencepiece pypdf2 ollama

Ollama

本地部署大模型(简化版)

官网下载:
https://ollama.com/download(按系统选择版本,安装后自动启动服务)

二、核心组件部署(30 分钟)

1. 向量数据库:Chroma(轻量本地版)

  • 作用:存储知识片段的向量,支持语义检索。
  • 启动步骤:新建文件夹(如 D:local_rag,后续操作均在此目录);打开终端,进入该文件夹,执行启动命令:
  • bash
  • python -c “import chromadb; chromadb.PersistentClient(path='./chroma_db')”
  • (会自动创建 chroma_db 文件夹,代表数据库初始化成功)

2. Embedding 模型:腾讯 Youtu-Embedding(中文优先)

  • 作用:将文本转为向量,支持语义匹配。
  • 下载与验证:终端执行以下代码(自动下载模型,约 2GB):
  • python
  • 运行
  • # 新建脚本:download_embedding.py,放入D:local_rag from transformers import AutoModel, AutoTokenizer model = AutoModel.from_pretrained(“tencent-ailab/youtu-embedding”) tokenizer = AutoTokenizer.from_pretrained(“tencent-ailab/youtu-embedding”) print(“模型下载成功!”)
  • 运行脚本:python download_embedding.py,输出 “模型下载成功” 即完成。

3. 本地大模型:Llama 3 8B(通用问答)

  • 作用:基于检索到的知识生成回答,避免幻觉。
  • 部署步骤:打开终端,执行 Ollama 命令(自动下载模型,约 4GB):
  • bash
  • ollama run llama3:8b
  • 首次运行会显示 “pulling”,等待进度 100% 后,输入 hello 测试,模型回复即成功(按 Ctrl+C 退出交互)。

三、数据处理:导入本地知识库(30 分钟)

1. 准备文档(示例:导入 PDF 技术手册)

  • 新建 docs 文件夹(D:local_ragdocs),放入需要导入的文档(支持 PDF/Word/ 纯文本,示例用 Youtu-Embedding手册.pdf)。

2. 文档拆分与向量入库(关键脚本)

  • 新建 process_docs.py 脚本,复制以下代码(自动处理 docs 文件夹下的所有 PDF):
  • python
  • 运行
  • import chromadb from transformers import AutoModel, AutoTokenizer from PyPDF2 import PdfReader import os # 1. 初始化Chroma数据库 client = chromadb.PersistentClient(path=”./chroma_db”) collection = client.get_or_create_collection(name=”knowledge_base”) # 2. 加载Embedding模型 tokenizer = AutoTokenizer.from_pretrained(“tencent-ailab/youtu-embedding”) model = AutoModel.from_pretrained(“tencent-ailab/youtu-embedding”) # 3. 处理PDF文档:提取文本→拆分片段 def process_pdf(file_path): reader = PdfReader(file_path) text = “” for page in reader.pages: text += page.extract_text() or “” # 按1000字符拆分片段(可根据内容调整) chunks = [text[i:i+1000] for i in range(0, len(text), 1000)] return chunks # 4. 遍历docs文件夹,批量入库 docs_dir = “./docs” for filename in os.listdir(docs_dir): if filename.endswith(“.pdf”): file_path = os.path.join(docs_dir, filename) chunks = process_pdf(file_path) # 生成向量并入库 for i, chunk in enumerate(chunks): inputs = tokenizer(chunk, return_tensors=”pt”, padding=True, truncation=True) embedding = model(**inputs).last_hidden_state.mean(dim=1).detach().numpy() # 用文件名+片段索引作为唯一ID doc_id = f”{filename}_chunk_{i}” collection.add( documents=[chunk], metadatas=[{“source”: filename}], embeddings=embedding, ids=[doc_id] ) print(f”成功处理 {len(os.listdir(docs_dir))} 个文档,已入库!”)
  • 运行脚本:python process_docs.py,显示 “成功处理 X 个文档” 即完成。

四、检索 + 生成测试(20 分钟)

1. 编写问答脚本(rag_qa.py)

python

运行

import chromadb
import requests
import json
from transformers import AutoModel, AutoTokenizer

# 1. 初始化组件
client = chromadb.PersistentClient(path="./chroma_db")
collection = client.get_collection(name="knowledge_base")
tokenizer = AutoTokenizer.from_pretrained("tencent-ailab/youtu-embedding")
model = AutoModel.from_pretrained("tencent-ailab/youtu-embedding")

# 2. 检索函数:获取相关知识片段
def retrieve_context(query, top_k=3):
    inputs = tokenizer(query, return_tensors="pt", padding=True, truncation=True)
    query_embedding = model(** inputs).last_hidden_state.mean(dim=1).detach().numpy()
    results = collection.query(query_embeddings=query_embedding, n_results=top_k)
    return "
".join(results["documents"][0])

# 3. 生成函数:调用本地Llama 3回答
def generate_answer(context, query):
    prompt = f"""
    仅基于以下上下文回答问题,不编造信息。
    上下文:{context}
    问题:{query}
    回答:
    """
    response = requests.post(
        "http://localhost:11434/api/generate",
        json={"model": "llama3:8b", "prompt": prompt, "stream": False}
    )
    return json.loads(response.text)["response"]

# 4. 测试:用户提问
if __name__ == "__main__":
    user_query = input("请输入问题:")  # 示例:"Youtu-Embedding如何处理长文本?"
    context = retrieve_context(user_query)
    answer = generate_answer(context, user_query)
    print("
回答:
", answer)

2. 运行测试

  1. 确保 Ollama 服务已启动(未启动可在终端执行 ollama serve);
  2. 终端运行:python rag_qa.py,输入问题(如文档中包含的内容),查看是否生成基于文档的回答。

成功标志:回答内容与导入的 PDF 手册一致,无编造信息。

五、优化与扩展(可选,按需配置)

1. 提升检索速度

  • 给 Chroma 建立索引:在 process_docs.py 中添加索引配置(默认已优化,无需额外操作);
  • 减少片段长度:将 1000 字符改为 500 字符(适合短句多的文档)。

2. 降低显存占用

  • 模型量化:用 Ollama 部署 4-bit 量化版大模型(终端执行 ollama run llama3:8b-q4_0,显存需求降至 6GB);
  • 关闭不必要程序:确保 GPU 仅运行 RAG 相关进程。

3. 扩展功能

  • 支持 Word/Markdown:在 process_docs.py 中添加 python-docx(处理 Word)、python-markdown(处理 Markdown)的解析代码;
  • 可视化界面:用 Streamlit 搭建 Web 界面(代码示例:streamlit run app.py,app.py调用 rag_qa.py 的函数)。

六、常见问题解决

问题现象

解决方法

模型下载慢 / 失败

切换网络(如手机热点),或手动下载模型文件(参考 HuggingFace 模型页的下载链接)

显存不足(OOM 错误)

改用 4-bit 量化模型,或减少每次处理的文档数量

检索结果不相关

调整片段拆分长度(如改为 800 字符),或换用更优的 Embedding 模型(如 Qwen-Embedding)

Ollama 启动失败

重启电脑,或在任务管理器中结束 ollama.exe 进程后重新启动

按此清单操作,即可搭建一个支持 “本地文档导入→语义检索→智能问答” 的 RAG 知识库,所有数据和模型均存储在本地,无需联网或依赖云端服务。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容