deepseek本地部署(在线、离线)、知识库搭建(个人、组织)与代码接入

📅 2026/7/21 18:27:17
deepseek本地部署(在线、离线)、知识库搭建(个人、组织)与代码接入
本文主要介绍deepSeek本地化容器化部署知识库搭建与springAI接入。因笔者工作内容原因也会介绍内网部署方式。一、deepSeek本地化部署本地部署方式我们采用ollama简化部署、内网迁移流程。1.1 windows与mac部署首先我们访问ollama官方网站ollama.com.下载相应版本安装包注意如果没有梯子下载较慢可以直接通过网盘链接下载windowsmacOS配置环境变量配置模型存储位置Ollama会默认将模型存储到C:\Users%username%.ollama\models,防止影响性能我们将模型路径修改到D盘配置跨域请求Ollama默认只允许来自127.0.0.1和0.0.0.0的跨域请求,这里因为笔者Open WebUI在内网其他服务器配置OLLAMA_ORIGINS为*点击models导航栏并选择deepseek-r1这里因为是测试服务器搭建我们选择一个较小的模型如果是本机部署没有显卡的情况下建议选择1.5b15亿参数的蒸馏模型。具体模型配置可参考[DeepSeek模型各版本硬件要求]参考量显存需求显卡推荐命令1.5B通常4GB左右GTX 1050ollama run deepseek-r1:1.5b8B一般8-10GBGTX 1660ollama run deepseek-r1:8b14B12GB以上16GB以上运行流畅RTX 3060ollama run deepseek-r1:14b32B16GB以上21GB以上运行流畅RTX 3060ollama run deepseek-r1:32b70B24GB以上40GB以上运行流畅RTX 3090、RTX 4090ollama run deepseek-r1:70b671B1342GB16张NVIDIA A100 80GB显卡ollama run deepseek-r1:671b在本地命令行终端执行如下命令在ollma安装deepseek模型我这里有一张英伟达4090卡24G显存选择了32b的模型。ollama run deepseek-r1:${tag} // ollama run deepseek-r1:32bwindows内网迁移在互联网机器模型下载成功后打包ollama安装包与模型模型我们之前是配置在D:\ollama\models拷贝到内网后安装ollama特别注意要重启命令行工具与 ollama。 这里因为我们需要查看具体的token速率执行ollama run deepseek-r1:32b --verbose // --verbose拍照后截图图片比较模糊请谅解。安装完成输出success后输入问题进行测试在这里插入图片描述可以看到成功返回token rate为38.46tokens/s。查看显卡占用 这里我们是英伟达的显卡输入nvidia-smi或者使用任务管理器-性能模块可以看到GPU显存占用在22G左右。1.2 linux部署容器化基础可参考第四小节——附录。1.2.1 部署deepseek运行如下代码sudo docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/ollama/ollama sudo docker run -d -v ollama:/ollama -p 11434:11434 --name ollama swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/ollama/ollama这里因为没有梯子会比较慢我们使用华为云的ollama镜像。等待执行完成后使用如下命令进入容器docker ps | grep ollama // 确认容器状态 docker exec -it ${containerId} /bin/bash // 进入容器 ollama run deepseek-r1:${tag} // ollama run deepseek-r1:7b 安装deepseek模型测试deepseek服务二、知识库搭建用于内部资料的检索因为模型训练成本要求较高这里我们搭建本地的个人与组织知识库不过文档的解析、检索因分段策略与数据向量化的原因差强人意。对外提供服务可基于LlamaIndex或LangChain进行开发。如需训练模型可考虑全参数微调或者loRA等方式。2.1 个人知识库搭建个人知识库RAG应用搭建可以借助anythingLLM等工具这里我们介绍使用anythingLLM进行个人知识库的搭建。安装聊天客户端也可以直接使用AnythingLLM进入Chatbox官网:chatboxai.app/zh下载客户端并安装安装完成后配置本地deepseek地址测试聊天工具安装知识库工具安装AnythingLLM配置工作区点击聊天设置LLM提供者选择ollama设置模型地址 这里Ollama Base URL配置我们本地部署的模型地址上传知识库文件点击工作区文件上传按钮添加知识库文件这里我们添加一个测试文件添加完成后点击Move to Workspace然后右下角点击Save and Embed进行向量化处理测试知识库 点击new thread提问张三的原名是答案是王五测试完成。2.2 组织知识库搭建组织知识库的搭建我们使用Open WebUI,提供一个简洁、好看的页面。Open WebUI项目地址Open WebUI.部署Open WebUIdocker run -d -p 3030:8080 --add-hosthost.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.nju.edu.cn/open-webui/open-webui:main这里我们不使用梯子仍旧使用国内南京大学的镜像。访问Open WebUI浏览器输入http://${webUI-deploy-ip}:3030/首次进入需要注册这里我已经注册直接进入配置模型进入管理员面板点击设置配置外部链接设置模型权限点击设置-模型便于测试这里我们直接设置成public测试对话测试知识库依次点击工作空间 - 知识库即可构建组织知识库文档上传、使用过程按下不表与个人知识库类似。docker compose一键部署前面我们使用docker部署了ollma和Open WebUI这里我们将两个容器通过docker compose编排一键部署也为后续离线部署降低工作量。 整合容器配置如下version: 3 services: ollama: image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/ollama/ollama container_name: ollama restart: always ports: - 11434:11434 volumes: - ollama:/ollama networks: - app-network open-webui: image: ghcr.nju.edu.cn/open-webui/open-webui:main container_name: open-webui restart: always ports: - 3030:8080 volumes: - open-webui:/app/backend/data depends_on: - ollama extra_hosts: - host.docker.internal:host-gateway networks: - app-network volumes: ollama: name:ollama-ds external: true open-webui: name: webui-ds external: true networks: app-network: external: true name: ds-net启动服务使用docker-compose up -d关闭服务使用docker-compose down内网服务器离线部署我们先转储镜像docker save -o ollama_image.tar swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/ollama/ollama docker save -o open-webui_image.tar ghcr.nju.edu.cn/open-webui/open-webui:main2. 接下来我们备份数据卷sudo tar -czvf ollama-backup.tar.gz -C /var/lib/docker/volumes/ollama-ds/_data . sudo tar -czvf webui-backup.tar.gz -C /var/lib/docker/volumes/webui-ds/_data .3. 将数据转移到内网服务器后恢复数据// 恢复数据卷 sudo tar -xzvf ollama-backup.tar.gz -C /var/lib/docker/volumes/ollama-ds/_data sudo tar -xzvf webui-backup.tar.gz -C /var/lib/docker/volumes/webui-ds/_data // 加载镜像 docker load -i ollama.tar docker load -i open-webui.tar // 创建数据卷和网络 docker volume create --nameollama-ds docker volume create --namewebui-ds docker network create ds-net // 启动服务 docker-compose up -d // 验证服务 docker ps三、代码接入依赖配置// 主pom ... properties spring-ai.version1.0.0-SNAPSHOT/spring-ai.version /properties ... /dependencyManagement /dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version${spring-ai.version}/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement ... // ai模块 ... dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-ollama-spring-boot-starter/artifactId /dependency ...springAI接入公共调用组件封装Component public class Completion { Resource private OllamaChatModel aiClient; /** * 最大消息记录数 */ private final static Integer MAX_SIZE 10; /** * 消息记录 */ private ListMessage messages new ArrayList(); /** * 初始化存入系统消息 */ PostConstruct private void addSystemMessage() { String message 李白701年2月28日—762年12月字太白号青莲居士出生于蜀郡绵州昌隆县今四川省绵阳市江油市青莲镇一说出生于西域碎叶 祖籍陇西成纪今甘肃省秦安县。唐朝伟大的浪漫主义诗人凉武昭王李暠九世孙 。 为人爽朗大方乐于交友爱好饮酒作诗名列“酒中八仙” 。曾经得到唐玄宗李隆基赏识担任翰林供奉赐金放还后游历全国先后迎娶宰相许圉师、宗楚客的孙女。唐肃宗李亨即位后卷入永王之乱流放夜郎辗转到达当涂县令李阳冰家。上元二年去世时年六十二 。 著有《李太白集》代表作有《望庐山瀑布》《行路难》《蜀道难》《将进酒》《早发白帝城》《黄鹤楼送孟浩然之广陵》等。李白所作词赋就其开创意义及艺术成就而言享有极为崇高的地位后世誉为“诗仙”与诗圣杜甫并称“李杜”。; Message systemMessage new SystemMessage(message); messages.add(systemMessage); } /** * 存储用户发送的消息 */ private void addUserMessage(String message) { Message userMessage new UserMessage(message); messages.add(userMessage); } /** * 存储AI回复的消息 */ private void addAssistantMessage(String message) { Message assistantMessage new AssistantMessage(message); messages.add(assistantMessage); } /** * 聊天接口 */ public String chat(String message) { addUserMessage(message); String result aiClient.call(new Prompt(messages)).getResult().getOutput().getText(); addAssistantMessage(result); update(); return result; } /** * 流式聊天接口 */ public FluxString chatStream(String message) { addUserMessage(message); StringBuffer fullReply new StringBuffer(); FluxString fluxResult aiClient.stream(new Prompt(messages)) .flatMap(response - { String reply response.getResult().getOutput().getText(); //拼接回复内容 fullReply.append(reply); return Flux.just(reply); }) .doOnComplete(() - { //监听流式响应完成完整回复存入消息记录 System.out.println(fullReply); addAssistantMessage(String.valueOf(fullReply)); }); update(); return fluxResult; } /** * 更新消息记录 */ private void update() { if (messages.size() MAX_SIZE) { messages messages.subList(messages.size() - MAX_SIZE, messages.size()); } } }2. 创建测试用controllerSlf4j RestController RequestMapping(/api) public class OllamaTestController { Autowired private OllamaChatModel ollamaChatClient; RequestMapping(/chat) public String chat(){ String systemPrompt {prompt}; SystemPromptTemplate systemPromptTemplate new SystemPromptTemplate(systemPrompt); String userPrompt 广州有什么特产; Message userMessage new UserMessage(userPrompt); Message systemMessage systemPromptTemplate.createMessage(MapUtil.of(prompt, you are a helpful AI assistant)); Prompt prompt new Prompt(List.of(userMessage, systemMessage)); ListGeneration response ollamaChatClient.call(prompt).getResults(); String result ; for (Generation generation : response){ String content generation.getOutput().getText(); result content; } return result; } RequestMapping(/stream) public SseEmitter stream(HttpServletResponse response){ response.setContentType(text/event-stream); response.setCharacterEncoding(UTF-8); SseEmitter emitter new SseEmitter(); String systemPrompt {prompt}; SystemPromptTemplate systemPromptTemplate new SystemPromptTemplate(systemPrompt); String userPrompt 广州有什么特产; Message userMessage new UserMessage(userPrompt); Message systemMessage systemPromptTemplate.createMessage(MapUtil.of(prompt, you are a helpful AI assistant)); Prompt prompt new Prompt(List.of(userMessage, systemMessage)); ollamaChatClient.stream(prompt).subscribe(x - { try { log.info(response: {},x); ListGeneration generations x.getResults(); if(CollUtil.isNotEmpty(generations)){ for(Generation generation:generations){ AssistantMessage assistantMessage generation.getOutput(); String content assistantMessage.getText(); if(StringUtils.isNotEmpty(content)){ emitter.send(content); }else{ if(StringUtils.equals(content,null)) emitter.complete(); // Complete the SSE connection } } } } catch (Exception e) { emitter.complete(); log.error(流式返回结果异常,e); } }); return emitter; } }3. 测试四、附录4.1 容器化基础(有基础可跳过)4.1.1 Docker安装step 1卸载已有资源yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine.step 2添加 Docker 安装源yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo.如果提示yum-config-manager不存在,执行yum -y install yum-utils.step 3 安装最新版本Dockeryum install docker-ce docker-ce-cli containerd.io.如果想要安装指定版本的Docker可以使用以下命令yum list docker-ce --showduplicates | sort -r.yum install docker-ce-VERSION_STRING docker-ce-cli-VERSION_STRING containerd.io.step 4 启动dockersystemctl start docker启动完成后运行hello world容器检查是否安装正确,命令如下docker run hello-worldDocker 首先会检查本地是否有hello-world这个镜像如果发现本地没有这个镜像Docker 就会去Docker Hub官方仓库下载此镜像然后运行它。最后输出 “Hello from Docker!” 并退出。如需卸载docker执行yum -y remove docker-engine,如需删除镜像、容器、卷以及自定义文件可执行以下命令rm -rf /var/lib/docker4.1.2 Docker基础操作拉取镜像使用docker pull命令拉取远程仓库的镜像到本地 命令格式docker pull [Registry]/[Repository]/[Image]:[Tag]重命名镜像使用docker tag命令“重命名”镜像 命令格式docker tag [SOURCE_IMAGE](#) [TARGET_IMAGE](#)查看镜像使用docker image ls或docker images命令查看本地已经存在的镜像 删除镜像使用docker rmi命令删除镜像 构建镜像构建镜像有两种方式。第一种方式是使用docker build命令基于Dockerfile构建镜像也是我比较推荐的镜像构建方式第二种方式是使用docker commit命令基于已经运行的容器提交为镜像。Dockerfile常用指令egFROM centos:7 ​ COPY nginx.repo /etc/yum.repos.d/nginx.repo ​ RUN yum install -y nginx ​ EXPOSE 80 ​ ENV HOSTiotnginx ​ CMD [nginx,-g,daemon off;]第一行表示基于 centos:7 这个镜像来构建自定义镜像。这里需要注意每个 Dockerfile 的第一行除了注释都必须以 FROM 开头。第二行表示拷贝本地文件nginx.repo文件到容器内的/etc/yum.repos.d目录下。这里拷贝nginx.repo文件是为了添加 nginx 的安装源。第三行表示在容器内运行yum install -y nginx命令安装 nginx 服务到容器内执行完第三行命令容器内的 nginx 已经安装完成。第四行声明容器内业务nginx使用 80 端口对外提供服务。第五行定义容器启动时的环境变量HOSTiotnginx容器启动后可以获取到环境变量 HOST 的值为 iotnginx。第六行定义容器的启动命令命令格式为 json 数组。这里设置了容器的启动命令为 nginx 并且添加了 nginx 的启动参数 -g ‘daemon off;’ 使得 nginx 以前台的方式启动。4.2 单机服务编排入门有基础可跳过单机服务编排工具Docker-compose这里我们介绍他的安装与基础命令。curl -L https://github.com/docker/compose/releases/download/${release_tag}/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose替换release_tag为对应版本这里我们使用最新的v2.6.0.curl -L https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose常用命令启动docker-compose up -d注意这里需要在yml配置文件路径执行其他路径执行需要-f指定配置文件地址。查看日志docker-compose logs -f ${compose-contatainer-name}停止docker-compose stop停止并删除容器docker-compose down其他命令帮助docker-compose --help深入学习容器化与服务编排请查阅参考资料。零基础如何学习AI大模型领取方式在文末为什么要学习大模型学习大模型课程的重要性在于它能够极大地促进个人在人工智能领域的专业发展。大模型技术如自然语言处理和图像识别正在推动着人工智能的新发展阶段。通过学习大模型课程可以掌握设计和实现基于大模型的应用系统所需的基本原理和技术从而提升自己在数据处理、分析和决策制定方面的能力。此外大模型技术在多个行业中的应用日益增加掌握这一技术将有助于提高就业竞争力并为未来的创新创业提供坚实的基础。大模型典型应用场景①AI教育智能教学助手和自动评分系统使个性化教育成为可能。通过AI分析学生的学习数据提供量身定制的学习方案提高学习效果。②AI医疗智能诊断系统和个性化医疗方案让医疗服务更加精准高效。AI可以分析医学影像辅助医生进行早期诊断同时根据患者数据制定个性化治疗方案。③AI金融智能投顾和风险管理系统帮助投资者做出更明智的决策并实时监控金融市场识别潜在风险。④AI制造智能制造和自动化工厂提高了生产效率和质量。通过AI技术工厂可以实现设备预测性维护减少停机时间。…这些案例表明学习大模型课程不仅能够提升个人技能还能为企业带来实际效益推动行业创新发展。一、 AI大模型学习路线图整个学习分为7个阶段二、AI大模型实战案例涵盖AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者皆可用。三、视频和书籍PDF合集从入门到进阶这里都有跟着老师学习事半功倍。四、LLM面试题五、AI产品经理面试题六、deepseek部署包技巧大全领取方式我会放在下面希望领取了的朋友不要忘了下方名片放心添加