00000210
本测试实验部署一个基于DeepSeek-R1大语言模型的RAG(检索增强生成)系统。该系统由两部分组成:一台服务器上的向量数据库服务和另一台服务器上的RAG推理服务。系统搭建后,用户可以通过Web界面向系统提问,系统会检索相关文档并生成基于检索内容的准确回答。
系统支持的知识库包含:
需要两台能访问互联网的服务器:
基于较新的软件栈部署Docker环境,确保Docker能够访问互联网。需要开放端口供向量数据库提供对外服务:
docker run -p 8001:8001 [其他参数] [镜像名称]
如果使用其他端口号,需要相应修改add_data_to_chroma.py和launch_server.sh中的port参数。
进入容器后,安装所需依赖:
pip3 install -r requirements.txt
使用m3e-base作为embedding模型:
add_data_to_chroma.py中的embedding_model_path为模型的本地路径 处理特定格式文件需要NLTK数据:
nltk_data的官方GitHub仓库:https://github.com/nltk/nltk_data packages目录重命名为nltk_data add_data_to_chroma.py开头添加: import nltk_NLTK_PATH = "/path/to/your/nltk_data"nltk.data.path.insert(0, _NLTK_PATH)
Chroma支持多种格式文档(md/pdf/doc/txt等)和网络链接:
demo_data目录下 add_data_to_chroma.py中的data_path_list添加文档路径或网络链接: data_path_list = [f"{cwd}/demo_data", "https://zh.wikipedia.org/zh-cn/%E5%93%AA%E5%90%92%E4%B9%8B%E9%AD%94%E7%AB%A5%E9%97%B9%E6%B5%B7"]
启动向量数据库服务:
bash launch_server.sh
注意:在CentOS或版本较老的系统上可能遇到SQLite版本问题,此时需要在/usr/local/lib64/python3.10/site-packages/chromadb/__init__.py文件开头添加:
__import__("pysqlite3")
import sys
sys.modules['sqlite3'] = sys.modules.pop("pysqlite3")
新开一个窗口,运行以下命令将文档添加到向量数据库:
python add_data_to_chroma.py
基于较新的软件栈部署Docker环境,确保容器中的VLLM可正常运行。需要开放端口供RAG提供Web服务:
docker run -p 3333:3333 [其他参数] [镜像名称]
如需使用其他端口,相应修改launch_app.sh中的port。
进入容器后,安装所需依赖:
pip3 install -r requirements.txt
以DeepSeek-R1-Distill-Qwen-32B作为LLM推理模型:
launch_vllm.sh中的model为模型的本地路径 tokenizer_config.json,将chat_template中的最后部分从{{'<|Assistant|><think>\\n'}}{% endif %}"改为{{'<|Assistant|>'}}{% endif %}"以获得更好的RAG效果 注意:如果需要使用70B的蒸馏模型DeepSeek-R1-Distill-Llama-70B,需要将--tensor-parallel-size设置为8。
同样需要下载embedding模型m3e-base,并修改rag.py中的embedding_model_path为本地路径。
修改rag.py中的chroma_host和chroma_port为部署的向量数据库服务器(服务器A)的IP地址和端口号。
运行VLLM服务并确认服务日志正常:
bash launch_vllm.sh
本地测试RAG服务:
python3 test_rag_local.py
启动RAG的Web应用:
bash launch_app.sh
在浏览器中访问http://{host_ip}:3333,其中{host_ip}为服务器B的IP地址。