00000210
本测试实验部署一个基于DeepSeek-R1大语言模型的RAG(检索增强生成)系统。该系统由两部分组成:一台服务器上的向量数据库服务和另一台服务器上的RAG推理服务。系统搭建后,用户可以通过Web界面向系统提问,系统会检索相关文档并生成基于检索内容的准确回答。
系统支持的知识库包含:
需要两台能访问互联网的服务器:
基于较新的软件栈部署Docker环境,确保Docker能够访问互联网。需要开放端口供向量数据库提供对外服务:
1 | <code><span id="zuX">docker run -p 8001:8001 [</span>其他参数<span id="RDC">] [</span>镜像名称<span id="gAI">]</span></code> |
如果使用其他端口号,需要相应修改add_data_to_chroma.py
和launch_server.sh
中的port
参数。
进入容器后,安装所需依赖:
1 | <code><span id="gPX">pip3 install -r requirements.txt</span></code> |
使用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
开头添加: 1 | <code><span id="yDR">import nltk_NLTK_PATH = "/path/to/your/nltk_data"nltk.data.path.insert(0, _NLTK_PATH)</span></code> |
Chroma支持多种格式文档(md/pdf/doc/txt等)和网络链接:
demo_data
目录下 add_data_to_chroma.py
中的data_path_list
添加文档路径或网络链接: 1 | <code><span id="MJ0">data_path_list = [<span id="zf4"> </span>f"{cwd}/demo_data",<span id="sMG"> </span>"<a href="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" rel="nofollow">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</a>"]</span></code> |
启动向量数据库服务:
1 | <code><span id="WPD">bash launch_server.sh</span></code> |
注意:在CentOS或版本较老的系统上可能遇到SQLite版本问题,此时需要在/usr/local/lib64/python3.10/site-packages/chromadb/__init__.py
文件开头添加:
1 | <code><span id="UtM">__import__("pysqlite3")</span></code> |
1 | <code><span id="Itt">import sys</span></code> |
1 | <code><span id="ROo">sys.modules['sqlite3'] = sys.modules.pop("pysqlite3")</span></code> |
新开一个窗口,运行以下命令将文档添加到向量数据库:
1 | <code><span id="igA">python add_data_to_chroma.py</span></code> |
基于较新的软件栈部署Docker环境,确保容器中的VLLM可正常运行。需要开放端口供RAG提供Web服务:
1 | <code><span id="xRW">docker run -p 3333:3333 [</span>其他参数<span id="UPi">] [</span>镜像名称<span id="ti5">]</span></code> |
如需使用其他端口,相应修改launch_app.sh
中的port
。
进入容器后,安装所需依赖:
1 | <code><span id="V9S">pip3 install -r requirements.txt</span></code> |
以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服务并确认服务日志正常:
1 | <code><span id="jWx">bash launch_vllm.sh</span></code> |
本地测试RAG服务:
1 | <code><span id="2X8">python3 test_rag_local.py</span></code> |
启动RAG的Web应用:
1 | <code><span id="d6l">bash launch_app.sh</span></code> |
在浏览器中访问http://{host_ip}:3333,其中{host_ip}
为服务器B的IP地址。