要在本机E 盘 “大模型测试” 文件夹下完整部署大模型 RAG 测试环境,需按目录规划→环境配置→Ollama 部署(指定 E 盘存储)→向量库 / 数据库配置→RAG 应用开发的步骤进行,全程将所有组件的安装、存储路径指向 E 盘指定目录。以下是 Windows 系统下的详细实操指南,严格遵循你的路径要求。
一、前期准备:E 盘目录规划
首先在 E 盘创建统一的工作目录,后续所有组件(Ollama、模型、向量库、代码、数据库)均部署在该目录下,目录结构清晰化便于管理:
plaintext
E:\大模型测试\
├─ ollama/ # Ollama主程序配置及模型存储目录
│ └─ models/ # 大模型权重文件(如通义千问、bge嵌入模型)
├─ chroma_db/ # Chroma向量库数据存储目录(RAG核心)
├─ mysql/ # MySQL数据库数据目录(可选,存储业务日志)
├─ docs/ # RAG测试用的文档目录(PDF/Word/文本文档)
├─ rag_app/ # Streamlit RAG应用代码目录(核心业务代码)
└─ env/ # Python虚拟环境目录(隔离依赖,避免污染系统环境)
创建目录命令(打开 Windows 终端 / CMD,执行以下命令一键创建):
bash
运行
# 切换到E盘
E:
# 创建根目录及子目录
mkdir "大模型测试"
mkdir "大模型测试\ollama"
mkdir "大模型测试\ollama\models"
mkdir "大模型测试\chroma_db"
mkdir "大模型测试\mysql"
mkdir "大模型测试\docs"
mkdir "大模型测试\rag_app"
mkdir "大模型测试\env"
二、步骤 1:安装 Python 并创建 E 盘虚拟环境
Python 是 RAG 应用的开发基础,需先安装 Python 并在 E 盘创建独立虚拟环境,避免依赖冲突。
1. 下载并安装 Python
- 从Python 官网下载Python 3.10+(推荐 3.10/3.11,兼容性最好);
- 安装时勾选Add Python to PATH(添加到系统环境变量),安装路径可默认(也可手动指定为
E:\大模型测试\python)。
2. 创建 E 盘的 Python 虚拟环境
打开Windows 终端(管理员),执行以下命令:
bash
运行
# 切换到E盘大模型测试目录
E:
cd "大模型测试"
# 创建虚拟环境(存储到E:\大模型测试\env)
python -m venv env
# 激活虚拟环境(激活后终端前缀会显示(env))
env\Scripts\activate.bat
3. 安装 RAG 核心依赖包
在激活的虚拟环境中,安装所有 RAG 所需的 Python 包(依赖会保存在E:\大模型测试\env中):
bash
运行
# 升级pip(避免安装失败)
python -m pip install --upgrade pip
# 安装RAG核心包(Streamlit+LangChain+ChromaDB+文档解析)
pip install streamlit langchain langchain-community langchain-core pypdf python-docx chromadb ollama
# 可选:安装MySQL驱动(如需存储RAG调用日志)
pip install pymysql cryptography
# 可选:安装Docker相关包(如需部署MySQL)
pip install docker
三、步骤 2:部署 Ollama(强制指定 E 盘存储模型)
Ollama 是本地运行大模型的核心工具,默认会将模型存到 C 盘,需通过环境变量强制指定模型和配置存储到 E 盘目录。
1. 下载并安装 Ollama
- 从Ollama 官网下载 Windows 版本的 Ollama 安装包;
- 安装时路径默认即可(仅程序安装,模型后续会存到 E 盘)。
2. 配置 Ollama 环境变量(关键:指定 E 盘存储)
通过系统环境变量,让 Ollama 将模型和配置文件存到E:\大模型测试\ollama:
- 右键此电脑→属性→高级系统设置→环境变量;
- 在系统变量中点击新建,添加以下两个变量:
变量名 变量值 说明 OLLAMA_MODELSE:\大模型测试\ollama\models大模型权重存储目录 OLLAMA_HOMEE:\大模型测试\ollamaOllama 配置文件存储目录 - 点击确定保存,重启所有终端(cmd、powershell)使环境变量生效(必须重启,否则配置不生效)。
如果不生效, 使用cmd命令指定安装目录 : OllamaSetup(1).exe /DIR="E:\大模型测试\ollama"
3. 启动 Ollama 并拉取大模型
- 启动 Ollama 服务:打开新的终端,执行以下命令(此终端需保持打开,关闭则服务停止):
bash
运行
ollama serve - 拉取测试用模型:再打开一个新终端,执行以下命令拉取大模型和嵌入模型(模型会自动存到
E:\大模型测试\ollama\models):bash
运行
拉取完成后,可在# 拉取通义千问14B 4bit量化版(轻量,适合本地测试) ollama pull qwen:14b-q4_0 # 拉取轻量嵌入模型(用于文档向量化,RAG必备) ollama pull mxbai-embed-largeE:\大模型测试\ollama\models目录下看到模型文件。
4. 测试 Ollama 是否正常运行
执行以下命令,测试模型调用是否成功:
bash
运行
ollama run qwen:14b-q4_0
输入测试问题(如 “什么是 RAG 技术?”),若模型能正常回答,说明 Ollama 部署成功。
四、步骤 3:配置向量库(ChromaDB)和数据库(可选)
1. ChromaDB 配置(指定 E 盘存储路径)
ChromaDB 是轻量级向量库,无需单独部署服务,只需在 RAG 代码中指定数据存储目录为E:\大模型测试\chroma_db即可(后续在代码中配置)。
2. MySQL 数据库部署(可选,存储 RAG 日志)
若需存储 RAG 调用日志、用户问题等数据,推荐用Docker在 E 盘部署 MySQL(数据存到E:\大模型测试\mysql):
- 安装Docker Desktop,启动后在终端执行:
bash
运行
# 拉取MySQL8.0镜像并运行,数据映射到E盘 docker run -d \ --name rag-mysql \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ # 数据库密码,可自定义 -v "E:\大模型测试\mysql\data:/var/lib/mysql" \ # 数据存储目录 -v "E:\大模型测试\mysql\conf:/etc/mysql/conf.d" \ # 配置目录 mysql:8.0 - 测试连接:用 Navicat/DBeaver 连接
localhost:3306,用户名root,密码123456,能连接则部署成功。
五、步骤 4:开发 RAG 应用(代码存到 E 盘)
在E:\大模型测试\rag_app目录下创建 Streamlit RAG 应用代码,核心是指定向量库存储路径和文档目录为 E 盘,以下是完整代码。
1. 创建 RAG 应用代码
在E:\大模型测试\rag_app目录下新建文件enterprise_rag_app.py,复制以下代码(已指定 E 盘路径):
python
运行
import streamlit as st
import os
import tempfile
from datetime import datetime
# 文档解析库
from pypdf import PdfReader
from docx import Document
# LangChain相关库
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OllamaEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import Ollama
# ---------------------- 核心路径配置(强制指定E盘) ----------------------
BASE_DIR = "E:\\大模型测试"
CHROMA_DB_DIR = os.path.join(BASE_DIR, "chroma_db") # 向量库存储路径
DOCS_DIR = os.path.join(BASE_DIR, "docs") # 测试文档存储路径
# 确保目录存在
os.makedirs(DOCS_DIR, exist_ok=True)
# ---------------------- 页面基础配置 ----------------------
st.set_page_config(
page_title="企业RAG测试平台",
page_icon="📚",
layout="wide",
initial_sidebar_state="expanded"
)
# 初始化会话状态
if "vector_db" not in st.session_state:
st.session_state.vector_db = None
if "chat_logs" not in st.session_state:
st.session_state.chat_logs = []
if "model_loaded" not in st.session_state:
st.session_state.model_loaded = False
# ---------------------- 侧边栏配置 ----------------------
with st.sidebar:
st.title("⚙️ 配置中心")
# Ollama模型选择
model_name = st.selectbox(
"选择本地大模型",
options=["qwen:14b-q4_0", "llama2:7b-q4_0", "gemma:7b-q4_0"],
index=0
)
# 检索参数
top_k = st.slider("检索文档片段数", min_value=1, max_value=10, value=3)
chunk_size = st.slider("文本分片大小", min_value=200, max_value=2000, value=500)
chunk_overlap = st.slider("分片重叠长度", min_value=0, max_value=200, value=50)
# 清空日志/知识库
st.divider()
if st.button("🗑️ 清空聊天日志", type="secondary"):
st.session_state.chat_logs = []
st.success("日志已清空!")
if st.button("🧹 清空知识库", type="primary", danger=True):
st.session_state.vector_db = None
if os.path.exists(CHROMA_DB_DIR):
import shutil
shutil.rmtree(CHROMA_DB_DIR)
st.success("知识库已清空!")
# ---------------------- 核心函数 ----------------------
def parse_document(file):
"""解析PDF/Word文档"""
text = ""
file_ext = os.path.splitext(file.name)[1].lower()
# 保存文件到E盘docs目录
file_path = os.path.join(DOCS_DIR, file.name)
with open(file_path, "wb") as f:
f.write(file.getvalue())
if file_ext == ".pdf":
pdf_reader = PdfReader(file)
for page in pdf_reader.pages:
page_text = page.extract_text()
if page_text:
text += page_text
elif file_ext == ".docx":
doc = Document(file)
for para in doc.paragraphs:
if para.text:
text += para.text + "\n"
else:
st.error(f"不支持的格式:{file_ext},仅支持PDF/Word")
return None, None
# 构建元数据
metadata = {
"file_name": file.name,
"file_path": file_path,
"doc_type": file_ext.lstrip("."),
"upload_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
}
return text, metadata
def build_vector_db(text, chunk_size=500, chunk_overlap=50):
"""构建Chroma向量库(存储到E盘)"""
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=chunk_size, chunk_overlap=chunk_overlap,
separators=["\n\n", "\n", "。", "!", "?", ","]
)
chunks = text_splitter.split_text(text)
st.info(f"文档解析完成,分割为 {len(chunks)} 个片段")
# 加载嵌入模型
embeddings = OllamaEmbeddings(model="bge:small", base_url="http://localhost:11434")
# 构建向量库(指定E盘存储路径)
vector_db = Chroma.from_texts(
texts=chunks,
embedding=embeddings,
persist_directory=CHROMA_DB_DIR
)
vector_db.persist()
return vector_db
def call_rag_chain(question, vector_db, model_name, top_k=3):
"""调用RAG链生成回答"""
llm = Ollama(
model=model_name,
base_url="http://localhost:11434",
temperature=0.1
)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vector_db.as_retriever(search_kwargs={"k": top_k}),
return_source_documents=True
)
result = qa_chain({"query": question})
return result["result"], result["source_documents"]
# ---------------------- 主页面 ----------------------
st.title("📚 E盘本地RAG测试平台")
st.caption("基于Ollama+ChromaDB构建,数据全程存储在E盘")
col1, col2 = st.columns([2, 1])
with col1:
# 文档上传
st.subheader("📤 上传测试文档")
uploaded_files = st.file_uploader(
"上传PDF/Word文档",
accept_multiple_files=True,
type=["pdf", "docx"],
help="文档会保存到E:\大模型测试\docs"
)
if uploaded_files and st.button("🚀 解析并构建知识库", type="primary"):
with st.spinner("解析文档中..."):
all_text = ""
for file in uploaded_files:
text, metadata = parse_document(file)
if text:
all_text += text + "\n\n"
if all_text:
st.session_state.vector_db = build_vector_db(
all_text, chunk_size=chunk_size, chunk_overlap=chunk_overlap
)
st.session_state.model_loaded = True
st.success(f"知识库构建成功!共解析 {len(uploaded_files)} 个文档")
# 智能问答
st.divider()
st.subheader("❓ RAG智能问答")
question = st.text_input("输入测试问题", placeholder="例如:文档中提到的产品售后政策是什么?")
if st.button("🔍 获取回答") and question:
if not st.session_state.model_loaded:
st.warning("请先上传文档构建知识库!")
else:
with st.spinner("检索并生成回答..."):
answer, sources = call_rag_chain(
question, st.session_state.vector_db, model_name, top_k=top_k
)
# 记录日志
st.session_state.chat_logs.append({
"time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"question": question,
"answer": answer,
"sources": len(sources)
})
# 展示结果
st.markdown("### 📝 回答结果")
st.write(answer)
st.markdown("### 📖 参考文档片段")
for i, doc in enumerate(sources):
st.caption(f"参考片段 {i+1}")
st.write(doc.page_content[:200] + "..." if len(doc.page_content) > 200 else doc.page_content)
with col2:
# 调用日志
st.subheader("📜 调用日志")
if st.session_state.chat_logs:
for log in reversed(st.session_state.chat_logs):
with st.card():
st.markdown(f"**时间**:{log['time']}")
st.markdown(f"**问题**:{log['question']}")
st.markdown(f"**回答**:{log['answer'][:100]}..." if len(log['answer']) > 100 else log['answer'])
else:
st.info("暂无调用日志,开始提问吧!")
2. 运行 RAG 应用
- 打开终端,切换到 E 盘并激活虚拟环境:
bash
运行
E: cd "大模型测试" env\Scripts\activate.bat - 进入 rag_app 目录并启动 Streamlit 应用:
bash
运行
cd rag_app streamlit run enterprise_rag_app.py - 启动后会自动打开浏览器,地址为
http://localhost:8501,即可开始 RAG 测试。(如果是第一次启动Streamlit会出现下面内容)

直接留空邮箱(不填写任何内容),按回车键跳过
六、步骤 5:RAG 测试流程
- 上传文档:在应用中上传 PDF/Word 测试文档(文档会保存到
E:\大模型测试\docs); - 构建知识库:点击 “解析并构建知识库”,文档会被转为向量存储到
E:\大模型测试\chroma_db; - 智能问答:输入与文档相关的问题,模型会结合知识库生成回答,实现 RAG 效果;
- 管理数据:可通过侧边栏 “清空知识库” 或代码中的删除逻辑,清理不需要的向量数据。
七、关键注意事项
- 路径分隔符:Windows 系统中路径用
\,代码中需用\\或原始字符串r"E:\大模型测试"避免转义; - Ollama 服务:运行 RAG 应用前,需确保
ollama serve终端处于打开状态,否则模型无法调用; - 权限问题:若创建目录 / 写入文件失败,需以管理员身份运行终端;
- 模型拉取:若模型拉取缓慢,可配置 Ollama 国内镜像(修改
OLLAMA_BASE_URL环境变量为国内镜像地址)。
至此,你已在 E 盘 “大模型测试” 目录下完成了全套 RAG 环境的部署,所有组件均存储在指定路径,可直接进行本地 RAG 测试!

被折叠的 条评论
为什么被折叠?



