在本地搭建RAG系统并结合Open WebUI管理的步骤如下:
1. 系统架构概述
- RAG流程:文档处理 → 向量化存储 → 检索增强生成。
- 工具链:Chroma(向量数据库)、Sentence Transformers(嵌入模型)、Ollama(本地LLM)、LangChain/LlamaIndex(RAG框架)、FastAPI(自定义API)、Open WebUI(前端)。
2. 详细步骤
步骤1:安装依赖
1 | # 创建Python虚拟环境 |
步骤2:准备本地知识库
- 将文档(PDF、TXT等)放入
./docs
目录。 - 使用LangChain的文档加载器处理文件:
1
2
3
4from langchain.document_loaders import DirectoryLoader
loader = DirectoryLoader("./docs", glob="**/*.txt")
documents = loader.load()
步骤3:分块与嵌入
1 | from langchain.text_splitter import RecursiveCharacterTextSplitter |
步骤4:部署本地LLM
- 安装Ollama(官网),下载模型:
1
ollama pull llama2 # 或选择其他模型如 mistral、codellama
步骤5:构建RAG服务(FastAPI)
创建 rag_api.py
:
1 | from fastapi import FastAPI |
启动API:
1 | uvicorn rag_api:app --host 0.0.0.0 --port 5000 |
步骤6:配置Open WebUI
安装Open WebUI(参考官方文档):
1
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
登录Open WebUI(
http://localhost:3000
),添加自定义API:- 进入 Settings → Model。
- 输入自定义端点:
http://host.docker.internal:5000/generate
。
3. 使用流程
- 在Open WebUI界面输入问题。
- 问题通过API发送到RAG服务,检索本地知识库并生成答案。
- 结果返回并显示在WebUI中。
4. 优化与调试
- 检索优化:调整分块大小、相似度阈值或使用重新排序模型。
- 性能提升:使用GPU加速嵌入和推理,或选择量化模型。
- 提示工程:修改提示模板以提高回答质量,例如:
1
2
3
4
5
6
7qa_chain.combine_documents_chain.llm_chain.prompt.template = """
基于以下上下文回答问题:
{context}
问题:{question}
答案:
"""
5. 常见问题
- Ollama连接失败:确保Ollama服务运行且端口(默认11434)开放。
- 向量数据库未持久化:检查Chroma的
persist_directory
路径权限。 - API跨域问题:在FastAPI中添加CORS中间件:
1
2from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(CORSMiddleware, allow_origins=["*"])
通过以上步骤,你可以在本地搭建一个集成Open WebUI的RAG系统,实现基于私有知识库的智能问答。