本地使用docker部署DeepSeek大模型
1、相关技术介绍
1.1、RAG
RAG(Retrieval Augmented Generation),即“检索,增强,生成”,用于提升自然语言处理任务的性能。其核心思想是通过检索相关信息来增强生成模型的能力,具体步骤如下:
(1)检索(Retrieval):当用户提出问题时,系统会从外部的知识库中检索出与用户输入相关的内容。
(2)增强(Augmented):系统将检索到的信息与用户的输入结合,扩展模型的上下文。然后再传给模型,使模型得到增强。
(3)生成(Generation):生成模型基于增强后的输入生成最终的回答。由于这一回答参考了外部知识库中的内容,因此更具有参考性。
1.2、微调技术
微调技术是指在预训练模型的基础上,通过特定任务的数据进一步训练,以提升模型在该领域中的表现,具体步骤如下:
(1)预训练:在大规模数据集上训练模型,学习通用特征。
(2)微调:在预训练模型上,通过特定任务的数据进一步训练。
RAG和微调技术的共同点:都是用于赋予模型某个领域的特定知识,解决大模型的幻觉问题。所谓大模型幻觉就是当大模型遇到一些不知道的问题时,会输出一些错误的虚构的具有误导性内容的现象。
RAG和微调技术的区别:RAG强调检索,更准确,但因为依赖于外部信息,所以灵活性差一些。微调技术强调训练学习,训练好的模型可以有自己的想法,更灵活一些。
1.3、Embedding模型
Embedding 是一种将离散数据(如单词、句子自然语言或图像)转换为连续向量表示的技术。这些向量能够捕捉数据的语义信息,使得机器可以更好地理解和处理这些数据。Embedding 在自然语言处理(NLP)和机器学习中广泛应用。
在RAG的检索步骤时,会通过Embedding(嵌入)模型,对知识库文件进行解析:Embedding的主要作用是将自然语言转化为机器可以理解的高维向量,并且通过这一过程捕获到文本背后的语义信息(比如不同文本之间的相似度关系)
通过Embedding(嵌入)模型。对用户的提问进行处理。用户的输入同样会经过嵌入(Embedding)处理,生成一个高维向量。
拿用户的提问去匹配本地知识库:使用由用户输入生成的高维向量,去查询知识库中相关的文档片段,在这个过程中,系统会利用某些相似度度量去判断相似度。
Embedding模型可以对你上传的附件进行解析。
1.4、相似度度量
相似度度量是一种用于量化两个对象之间相似程度的方法。它在多个领域中广泛应用,如自然语言处理(NLP)、信息检索、机器学习和数据挖掘等。相似度度量可以帮助我们理解和比较不同对象之间的关系。
相似度:表示两个对象在某种特征或属性上的接近程度。
距离度量:与相似度相对,表示两个对象之间的差异程度。通常,距离越小,相似度越高。
常见相似度度量方法
(1)余弦相似度:用于衡量两个向量之间的夹角余弦值。应用于文本相似度、推荐系统。
(2)欧式距离:用于衡量两个点在欧氏空间中的直线距离。应用于聚类分析、图像识别。
(3)曼哈顿距离:用于衡量两个点在网格路径上的距离。应用于路径规划、数据挖掘。
(4)杰卡德相似系数:用于衡量两个集合的交集与并集的比值。应用于集合相似度、推荐系统。
(5)皮尔逊相关系数:用于衡量两个变量之间的线性相关性。应用于统计分析、数据挖掘。
1.5、Chat模型&Embedding模型
Chat模型是用于自然语言对话,能够结合上下文理解和回应用户的输入,能够进行多轮对话。
Embedding模型用于将文本映射为高维向量,用这些高维向量和知识库的高维向量去进行匹配。
举个例子:假设我们有一个 Embedding 模型,将单词映射为 5 维向量。
单词 "king" 的向量表示可能是:[0.25, -0.34, 0.12, 0.45, -0.67]
单词 "queen" 的向量表示可能是:[0.23, -0.33, 0.11, 0.44, -0.66]
单词 "man" 的向量表示可能是:[0.10, -0.20, 0.05, 0.30, -0.50]
单词 "woman" 的向量表示可能是:[0.09, -0.19, 0.04, 0.29, -0.49]
通过分析这四个映射的向量,我们可以看出,在向量空间中,语义相近的单词距离也较近。比如:"king" 和 "queen" 的向量在空间中距离较近,因为它们都是表示君主的词汇。"man" 和 "woman" 的向量在空间中距离较近,因为它们都是表示性别的词汇。判断向量空间是否相近就会用到“相似度度量方法”。
在实际中,Embedding 模型的向量维度通常较高,例如Word2Vec通常使用 300 维向量,GloVe通常使用 50、100、200、300 维向量,BERT通常使用 768 维或 1024 维向量。
2、本地部署
2.1、先下载ollama
Download Ollama on Windows
2.2、通过Ollama下载模型到本地
Ollama会默认把模型下载到C盘,如果想更换模型下载位置,可以新增环境变量OLLAMA_MODELS,变量值为模型下载到的路径。
先启动ollama,cmd命令提示符输入ollama run 指定的模型,ollama run deepseek-r1:1.5b
如果已下载则会直接启动该模型,否则会去联网下载该模型。
deepseek-r1:1.5b
2.3、下载RAGFlow源代码
GitHub - infiniflow/ragflow: RAGFlow is an open-source RAG (Retrieval-Augmented Generation) engine based on deep document understanding.
2.4、下载安装docker
Docker: Accelerated Container Application Development
我这里选的是windows版的。
直接点击下载后的docker图标进行安装。安装完成后桌面上会出现一个docker的图标:
注意windows安装docker desktop是默认安装在系统盘C盘的。不过这个可以改安装位置。
首先打开命令提示符。
切换到Docker Desktop Installer.exe安装包所在的目录。
输入以下命令:
start /w "" "Docker Desktop Installer.exe" install -accept-license --installation-dir="D:\SoftWare\Docker\install" --wsl-default-data-root="D:\SoftWare\Docker\install\Data" --windows-containers-default-data-root="D:\SoftWare\Docker\install"
D:\SoftWare\Docker\install为Docker安装的位置,D:\SoftWare\Docker\install\Data用于存储镜像、容器、卷等数据的目录。
点击OK,等待一会儿,就安装完成了。
但是此时打开docker客户端,会报这个问题。
解决方法,cmd管理员模式运行以下代码:bcdedit /set hypervisorlaunchtype auto
重启电脑后,以管理员身份运行Docker Desktop
因此,需要修改ragflow源代码下的.env文件。
配置环境变量:OLLAMA_HOST
配置OLLAMA_HOST环境变量的作用是让虚拟机里的RAGFlow能够访问到本机上的Ollama,因为这里RAGFlow要通过Docker部署,默认情况下ollama只能允许本机访问的。默认情况下Ollama监听的是localhost:11434。通过设置成0.0.0.0,这样Ollama就可以监听到本机所有的ip,这样虚拟机就可以访问到本机上的Ollama了。
cmd进入ragflow目录下,输入命令:docker compose -f docker/docker-compose.yml up -d
注意:如果镜像拉不下来则要配置国内的镜像源。
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://registry.docker-cn.com"]
}
Docker中国区官方镜像
https://registry.docker-cn.com中科大
https://docker.mirrors.ustc.edu.cn/网易
http://hub-mirror.c.163.com/腾讯
https://mirror.ccs.tencentyun.com
镜像源记得多试几个,我最后是挂了梯子的。
最后总共花了一个多小时才把镜像下载下来,下载过程中如果卡住不动了,可以按一下回车键。
镜像下载成功后,浏览器输入:http://localhost:80 进入以下页面,说明RAGFlow已经部署成功了。
3、在RAG中构建个人知识库
3.1、添加Ollama模型
3.2、系统模型设置
3.3、创建知识库
不过我的电脑本地解析pdf文档经常卡在那里不动了,然后RAGFlow也卡住了,然后就自动退出登录了。
后来,我又把pdf转为word,并把里面的所有图片都删除了,结果还是解析到一半就卡住了,然后自动跳出登录了。最后,我把文档只保留了“前言”部分,差不多一页文档的样子,很快就解析成功了。
3.4、新建聊天助理
设置好聊天助理后,与聊天助理对话,出现了连接失败的问题。
出现这个问题,是由于系统运行内存不足导致的。我本机的笔记本内存是16G,docker启动后系统是分配了7.5G的内存,内存显著不足,导致elasticsearch无法正常运行,显示为无法建立连接。
我参考了这位博主的文章:Ragflow错误解决方案 Failed to establish a new connection: [Errno 111] Connection refused-CSDN博客
在windows下给docker desktop分配最大内存。
win + r,调出运行,输入 %UserProfile%,进入用户文件夹 在用户文件夹下创建一个新的文件,改名为 .wslconfig,内容如下:
[wsl2]
memory=16GB # 分配的内存
processors=12 # 处理器核心数量,考虑超线程
swap=0
localhostForwarding=true
保存文件后,重启docker和WSL。
-
退出docker,任务管理器中确保无docker相关进程。
-
win+r调出运行,输入cmd并回车,在命令提示符中,输入以下内容并回车。
wsl --shutdown
重新打开docker,确保容器中所有的程序都运行,重新在浏览器中连接ragflow进行尝试。
不过有时候和聊天助手对话,也会报“ERROR: NotFoundError(404, 'index_not_found_exception', 'no such index [ragflow_c97380ccebb111ef951b0242ac120006]', ragflow_c97380ccebb111ef951b0242ac120006, index_or_alias)”。这个问题其实就是elasticsearch应用启动的有问题。重启一下就行了。如果还有问题,那就再把知识库的知识文档重新解析一遍。
最终,可以顺利的和聊天助手聊天了。
但是AI把一段话重复了两遍。
4、调用外部大模型API
由于本地部署的话,受限于个人电脑的配置,所以很不好用。因此为了能更好的享受AI大模型带来的便利,这里推荐直接调用外部大模型API。
我这里以“通义千问”大模型为例,首先进入阿里云官网。
通义大模型_企业拥抱 AI 时代首选-阿里云
5、总结
上一次写文章还是2024年9月份,已经半年没有写文章了。去年下半年平时上班周末上课,忙忙碌碌的也没心思更不知道要写点啥。上班就那点东西,天天业务搬砖增删改查,越来越不想干了。但不干开发,不写代码也不知道自己能干点啥?原本是希望读个非全的研究生,看看其他方向的,真正读了半学期感觉下来,就是脑子里被灌了一大堆有的没的的知识,大脑还是懵逼的。学校的老师都在搞什么“量子计算、脑机接口、密码学、计算机图形、物联网、机器学习、海事遥感......”这些东西与我工作没有关系,我也研究不了老师们的这些方向,选了个导师,还是放养的,无课题无组会,自己想办法毕业,学校的学费还真好赚啊!我还得为论文头疼。
通过本地部署大模型构建自己的知识库以聊天助理的方式呈现知识交互,确实蛮令人震撼的。从今以后都是AI的天下了,我经常用AI帮我改代码。不过由于我的笔记本是轻薄本,受限于性能,无法本地部署一个真正可用的大模型知识库,还得去租个云主机,或者购买外部提供的模型api。
6、参考资料
Windows Docker 配置国内镜像源的两种方法_docker desktop配置多个镜像源默认使用哪个镜像源-CSDN博客 【知识科普】【纯本地化搭建】【不本地也行】DeepSeek + RAGFlow 构建个人知识库_哔哩哔哩_bilibili Windows装Docker至D盘/其他盘(最新,最准确,直接装)_docker安装到d盘-CSDN博客 Windows Docker安装(当前计算机配置不支持 WSL2。.....问题已解决)-CSDN博客
在 Windows 上配置 Ollama 服务并开放局域网访问_ollama局域网访问-CSDN博客
Ragflow错误解决方案 Failed to establish a new connection: [Errno 111] Connection refused-CSDN博客
相关文章:

本地使用docker部署DeepSeek大模型
1、相关技术介绍 1.1、RAG RAG(Retrieval Augmented Generation),即“检索,增强,生成”,用于提升自然语言处理任务的性能。其核心思想是通过检索相关信息来增强生成模型的能力,具体步骤如下&am…...
C++ 设计模式-外观模式
外观模式的定义 外观模式是一种 结构型设计模式,它通过提供一个简化的接口来隐藏系统的复杂性。外观模式的核心思想是: 封装复杂子系统:将多个复杂的子系统或组件封装在一个统一的接口后面。提供简单接口:为客户端提供一个更简单、更易用的接口,而不需要客户端直接与复杂…...

【Linux网络编程】应用层协议HTTP(请求方法,状态码,重定向,cookie,session)
🎁个人主页:我们的五年 🔍系列专栏:Linux网络编程 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 Linux网络编程笔记: https://blog.cs…...
SQL进阶技巧:如何统计用户跨端消费行为?
目录 0 问题描述 2 问题剖析 技术难点解析 3 完整解决方案 步骤1:构造全量日期平台组合 步骤2:用户行为标记 步骤3:最终关联聚合 4 核心技巧总结 5 复杂度评估 往期精彩 0 问题描述 支出表: Spending +-------------+---------+ | Column Name | Type | +-----…...

Fiddler笔记
文章目录 一、与F12对比二、核心作用三、原理四、配置1.Rules:2.配置证书抓取https包3.设置过滤器4、抓取App包 五、模拟弱网测试六、调试1.线上调试2.断点调试 七、理论1.四要素2.如何定位前后端bug 注 一、与F12对比 相同点: 都可以对http和https请求进行抓包分析…...

基于SpringBoot+Vue的老年人体检管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...

51c自动驾驶~合集51
我自己的原文哦~ https://blog.51cto.com/whaosoft/13320191 #毫末最新OAD 轨迹偏移学习助力端到端新SOTA~ 端到端自动驾驶技术在近年来取得了显著进展。在本研究中,我们提出了轨迹偏移学习,将传统的直接预测自车轨迹,转换为预测相对于…...
Redis 监视器:深入解析与实战指南
Redis 监视器:深入解析与实战指南 引言 随着互联网技术的飞速发展,企业对实时数据处理和高并发场景的需求日益增长。Redis作为一款高性能的内存数据库,在各个领域中得到了广泛应用,包括缓存、消息队列、实时数据分析等。然而&am…...

Java8适配的markdown转换html工具(FlexMark)
坐标地址: <dependency><groupId>com.vladsch.flexmark</groupId><artifactId>flexmark-all</artifactId><version>0.60.0</version> </dependency> 工具类代码: import com.vladsch.flexmark.ext.tab…...

超全Deepseek资料包,deepseek下载安装部署提示词及本地部署指南介绍
该资料包涵盖了DeepSeek模型的下载、安装、部署以及本地运行的详细指南,适合希望在本地环境中高效运行DeepSeek模型的用户。资料包不仅包括基础的安装步骤,还提供了68G多套独立部署视频教程教程,针对不同硬件配置的模型选择建议,以…...

Postman - Postman 导入 JSON 文件(导入集合或环境变量)
一、Postman 中的 JSON 文件 在 Postman 中导入的 JSON 文件通常是指集合(Collection)或环境变量(Environments) 集合是 Postman 中用于管理 API 请求的一种方式,可以通过导入 JSON 文件来加载一个集合 环境变量是 P…...

傅里叶分析之掐死教程
https://zhuanlan.zhihu.com/p/19763358 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析 不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复杂了,所以很多…...

实在智能与宇树科技、云深科技一同获评浙江省“人工智能服务商”、 “数智优品”等荣誉
近日,浙江省经信厅正式公布《2024 年浙江省人工智能应用场景、应用标杆企业、人工智能服务商及 “数智优品” 名单》。 实在智能获评浙江省“人工智能服务商”,核心产品 “实在 Agent 智能体” 入选 “数智优品”。一同获此殊荣的还有宇树科技、云深处科…...

SpringAI系列 - RAG篇(三) - ETL
目录 一、引言二、组件说明三、集成示例一、引言 接下来我们介绍ETL框架,该框架对应我们之前提到的阶段1:ETL,主要负责知识的提取和管理。ETL 框架是检索增强生成(RAG)数据处理的核心,其将原始数据源转换为结构化向量并进行存储,确保数据以最佳格式供 AI 模型检索。 …...
Leetcode2080:区间内查询数字的频率
题目描述: 请你设计一个数据结构,它能求出给定子数组内一个给定值的 频率 。 子数组中一个值的 频率 指的是这个子数组中这个值的出现次数。 请你实现 RangeFreqQuery 类: RangeFreqQuery(int[] arr) 用下标从 0 开始的整数数组 arr 构造…...
北斗导航 | 周跳探测算法(matlab源码)
===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 周跳 1. 高次差法2. 相位减伪距法3. TurboEdit算法(MW+GF组合)4. 多项…...
Nginx实战_高性能Web服务器与反向代理的配置全解
1. 引言 1.1 Nginx简介 Nginx(发音为 “engine-x”)是一款轻量级、高性能的HTTP服务器和反向代理服务器。它以其高并发处理能力和低资源消耗而闻名,广泛应用于互联网企业中。Nginx不仅可以作为静态文件服务器,还可以通过反向代理功能与后端应用服务器协同工作。 1.2 Ngi…...

基于微信小程序的电影院订票选座系统的设计与实现,SSM+Vue+毕业论文+开题报告+任务书+指导搭建视频
本系统包含用户、管理员两个角色。 用户角色:注册登录、查看首页电影信息推荐、查看电影详情并进行收藏预定、查看电影资讯、在线客服、管理个人订单等。 管理员角色:登录后台、管理电影类型、管理放映厅信息、管理电影信息、管理用户信息、管理订单等。…...

MySQL智障离谱问题,删了库确还存在、也不能再创建同名库
1、问题 今天跟后端朋友接毕设单子的时候,后端穿过来的【weather.sql】这个文件没弄好,导致这个【weather】数据库的数据是错的,因此我用datagrip的GUI界面直接右键删除,结果就是tmd删不掉,ok,我只能在那新…...

基于单片机的多功能门铃控制系统设计(论文+源码)
1功能设计 本课题为基于单片机的多功能门铃控制系统设计,主要结合单片机技术,门铃控制技术进行设计,在多功能门铃控制系统的设计中,将其主要的设计功能确定如下: (1)可以实现门铃的基础功能…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...