1.    实现方案及准备工作

按照教程一步一步操作,基本没有什么太大难度,稍显麻烦的可能就是因网络问题有些资源无法下载,对于镜像无法下载的问题,文中也提供了替代的方法,但是github访问不稳定这点,如果你不是上网达人,只能找朋友求助了。

本文档提供了两种部署方法:半本地化部署、完全本地化部署,你可以根据自己的需求选择。

部署本地知识库的工具有很多,RAGFlow、FastGPT、DIFY、AnythingLLM等,他们各有特点,本文以RAGFlow为例。

本文讲述的是在Windows操作系统中进行的部署,但实际上在Linux系统中部署差别也不是很大,因为本文的部署主要是基于docker-compose。

1.1.   安装docker桌面版

docker桌面版用于容器化运行ragflow相关组件。

官网下载地址:https://www.docker.com/

下载后安装,一直下一步,直至安装成功。

这里有一点需要注意,很多虚拟机软件包括docker默认会使用Hyper-V,比如先安装vmware再安装docker后,可能就会引起冲突,建议先卸载本机上的虚拟机软件,再安装docker。

安装完成后,打开docker desktop(下文称docker桌面版),点右上角的设置(齿轮)按钮,选择Resource -> Advanced,修改此处的路径,下载的镜像、docker运行期间占用的虚拟磁盘空间,都会使用这个目录。

2.    半本地化部署

半本地化部署是指知识库工具部署在本地,但语言模型不部署在本地,而是接入互联网模型提供商提供的接口。这种方式对本机性能要求不算太高,但需要按用量付费,且文件安全性较完全本地化部署要差一些。

2.1.   克隆ragflow仓库

选择一个盘符,确保其剩余空间大于100GB。

打开docker桌面版,点击右下角的“Terminal”进入终端模式。

输入下面命令进入选择的盘符。

cd e:\

然后输入下面命令克隆仓库。

git clone https://github.com/infiniflow/ragflow.git

如果提示git命令不存在,可能是本机没有安装git,通过下列地址下载安装:https://git-scm.com/

因为github连接的不稳定性,这里可能会有一些问题,可根据报错自行上网寻找解决方法或向朋友求助。

克隆成功后,会创建E:\ragflow目录,执行如下命令。

cd ragflow

git checkout -f v0.16.0

2.2.   修改.env文件

在“我的电脑”中,进入刚刚克隆的目录,进入其子目录docker下,用文本编辑器打开.env文件。

决定要下载的版本,配置文件中提供了两个版本,一个是v0.16.0-slim(第84行),一个是v0.16.0(第87行),两者的区别是,前者不会预下载嵌入模型,默认会安装前者,为了方便这里改为后者。

修改前。

但因为DockerHub官方镜像源很早开始就无法访问了,直接修改还不行。如果你能正常下载,如上面修改就行;但大概率是不能正常下载的,这里提供了一种解决办法,可以按docker镜像无法下载问题解决中的步骤来操作。

操作完成后,将新的镜像地址填写进来。最终如下图。

.env的第二处修改,是将HF_ENDPOINT=https://hf-mirror.com这一行取消注释,因为一般情况下我们是访问不了huggingface。修改后如下。

第三处修改,包括多个组件的密码,比如MYSQL_PASSWORD(第46行),等号后面的值改为自己要设定的密码。

2.3.   修改docker-compose-base.yml文件

这个文件的修改并非强制,主要是指定挂载文件的路径,比如MySQL的数据文件存放目录。

如下图,我配置了将MySQL文件存放到e:\docker\ragflow\mysql目录下。

以下是代码文本,注意driver_opts:这一行必须与上一行对齐,type: none以及下面两行缩进两个字符间距。

driver_opts:

type: none

device: /e/docker/ragflow/mysql/

o: bind

还有一种情况,即默认的镜像无法下载成功时,使用docker官网镜像无法下载解决方法后,需要在这里修改镜像地址。

2.4.   启动容器

回到docker桌面版,确保此时位于ragflow目录。因为我用的是nvidia显卡,所以用docker-compose-gpu.yml文件来启动,如果是其他情况,可以用docker-compose.yml文件。

docker compose -f docker/docker-compose-gpu.yml up -d

初次运行,docker会下载多个镜像。如果出同下面这种错误,说明拉取镜像失败。

在前面修改.env文件时我们已经提到了,目前docker官网的镜像直接访问不了,请按docker镜像无法下载问题解决中的步骤来操作。

启动成功后,在Containers中就会出现ragflow相关组件。

2.5.   删除容器

只有需要修改配置文件时,才需要执行此操作。

使用下面的命令删除容器。

docker compose -f docker/docker-compose-gpu.yml down

修改配置文件后,再重新启动容器。

docker compose -f docker/docker-compose-gpu.yml up -d

3.    首次登录

在docker桌面版的Containers中,找到ragflow-server,点击其右侧的Show all ports。

点击80:80。

系统会在默认浏览器中打开登录地址http://localhost/login

点击注册,来注册一个账号。

用注册的账号登录后,点击右上角English右侧的下拉图标,可将语言切换为简体中文。

4.    完全本地化部署

完全本地化部署是指所有组件都部署在本地,这一步并不是必须的,取决于你的需求,同时对电脑配置有一定要求。如果不需要,可以跳过这一步,继续从添加互联网模型开始。

4.1.   部署要求

系统:Windows、Linux均可,本文以Windows为例。

显卡:7B参数模型需要NVIDIA GeForce RTX 3060 Ti或更高端显卡,14B参数模型需要NVIDIA GeForce RTX 4080或更高端显卡。

内存:7B参数模型推荐32GB内存,14B参数模型推荐64GB内存。

CPU:Intel Core i5 12400或同级别以上CPU。

磁盘:剩余磁盘空间大于100GB。

4.2.   下载ollama并运行本地模型

ollama是一个模型管理工具,可以通过它下载多种不同模型。ollama官网地址:https://ollama.com/

下载后安装,安装成功后在浏览器打开http://127.0.0.1:11434/。如果页面上显示Ollama is running,表示安装成功。如果下载页面加载失败,可以到github中下载OllamaSetup.exe,下载页面:https://github.com/ollama/ollama/releases。

仅下载ollama还不行,还必须下载需要的模型。

ollama默认将模型下载到C盘,因此我们需要修改模型下载目录。

1.打开系统设置,进入系统属性或系统变量设置。

2.创建一个新的系统变量或修改现有的环境变量,变量名为OLLAMA_MODELS。

3.将变量的值设置为ollama模型文件下载路径,例如d:\ollama。

设置完以后重启Ollama服务即可。

打开ollama官网,在导航栏上找到Models,点击进入。

在这个页面中可以搜索到各类模型,找到我们需要下载的模型。点击进入该模型详情页面。

在模型页面选择需要下载的参数规模,一般个人电脑最多只能支持到14b,然后点击右侧的“复制”按钮,复制下载模型的命令。

打开windows命令提示符工具(WIN +R快捷键,然后输入cmd,回车)。点击右键粘贴命令,回车,ollama会自动下载模型。

安装完成后,可以通过CTRL+D快捷键退出会话。

可以通过ollama list命令查看已安装的模型。

4.3.   添加本地模型

点击右上角的头像,在设置页面点击“模型供应商”,在列表中找到Ollama,点击其下方的“添加模型”。

模型类型根据情况选择。

chat:语言(会话、聊天)模型。

embedding:嵌入模型,用于将文本向量化。

rerank:重排模型,用于对检索结果进行再次排序,在ragflow中创建助理时,默认使用矢量余弦相似性进行这一处理,除非指定了rerank模型。

image2text:图片转文本模型。

模型名称必须与ollama中的名称一致,如想将deepseek-r1:7b添加为本地模型,就需要将其完整名称复制到文本框中。

基础Url:因为ragflow是基于docker运行,但是ollama是直接安装在宿主机的,因此基础Url填写:http://host.docker.internal:11434

API-Key:留空。

最大token数:根据需要填写,不超过8192。

填写完成后单击右下角“确定”。

如果要继续添加本地模型,可以点击ollama中的“添加模型”按钮,进行添加。

5.    添加互联网模型

本章中只描述半本地化部署的模型添加方法,完全本地化部署的模型添加方法请参考的添加本地模型步骤。

5.1.   获取API KEY

本文以DeepSeek为例,进入DeepSeek开放平台,https://platform.deepseek.com/

在API Keys中,创建API key。然后复制并保存。

5.2.   添加模型

点击右上角头像。

点击“模型提供商”,在列表中找到自己期望的模型供应商,以DeepSeek为例,点击“添加模型”。

在弹出的窗口中填写上一步获取的API KEY,确定。

添加成功后,可以在页面上半部分的已添加模型列表中,看到刚刚添加的DeepSeek了。

6.    添加知识库与对话

6.1.   修改系统模型

在模型供应商中,点击右上角的“系统模型设置”。

在其中选择各类模型的默认模型,比如聊天模型选deepseek等。

嵌入模型和Rerank模型一般不必修改。

Img2txt、Sequence2txt、TTS这三种模型,可以等需要用到的时候,添加模型后,再来配置。其中img2txt模型用于识别图片,Sequence2txt模型用于识别语音,TTS模型用于生成语音。

6.2.   添加知识库

点击上方导航栏的“知识库”,进入知识库页面,点击右侧的“创建知识库”按钮。

在弹出窗口中,输入名称后确定,进入知识库配置页面。

设置知识库的各项参数。

文档语言:“中文”。

嵌入模型:默认不变。

解析方法:取决后面需要上传到知识库的文件类型,每一种在页面右侧都有说明和示例,我要上传的是一个存放在EXCEL中的问答对,所以我选择Q&A。

其他信息如果不懂就不调整。

确认后保存。

在数据集中新增文件,选择本地文件。

在弹出的窗口中,上传准备好的知识库文档。

上传成功后,单击文件右侧的解析按钮开始解析文件,解析成功后,解析状态会变为“成功”。

单击“检索测试”,在该页面中进行问答测试。通过调整相似度阈值和关键字相似度权重两个参数,来测试什么样的设置能获得相对精准的回答。

6.3.   创建对话

点击上方导航栏的“聊天”,再点击“新建助理”。

给助理设置一个姓名,最底部的知识库中选择刚刚创建的知识库。

然后点击窗口上方的“提示引擎”。

在窗口中根据需要修改提示词,因为我需要助手严格按知识库中的内容作答,不要回答其他内容,所以在默认的提示词基础上做了一点修改。

再根据上一步添加知识库时的测试,设置合适的相似度阈值和关键词相似度权重。

提示引擎设置完成后,点击窗口上方的“模型设置”。

选择期望使用的模型,以及模型的回复风格。

注意模型下拉列表中,Ollama下面的是本地模型,上面的DeepSeek是接入供应商的API,需要按用量付费的。实际使用中,我们要么选择半本地化部署,要么选择完全本地化部署,一般是不太会出现二者皆有的情况,这里只是为了方便演示。

最大token数,如果助手给出的回答中预估内容比较长,可以适当增加最大token数。

一切确定后,单击“确定”按钮,创建助手成功。

点击聊天右侧的“+”号,创建新的对话。

然后就可以开始对话了。

6.4.   分享助手

有时候助手需要分享给别人使用,点击右上角头像,进入API页面,点击API KEY按钮。

在弹出的窗口中点击“创建新密钥”,然后确定。

点击上方导航栏“聊天”,回到聊天页面。

鼠标光标停留在智能助手上方时,会出现一个设置按钮,将光标移动上去,在弹出的列表中选择“嵌入网站”。

将src后面引号内的内容复制出来,将localhost替换为本机IP或域名,就可以分享给别人使用了。

手把手教你在个人电脑部署本地知识库(基于RAGFlow + DeepSeek [+ Ollama])的更多相关文章

  1. 手把手教你从ESXI部署到vSphere web Client管理控制

    作为实验环境,一台物理机即可 既然是实验环境,那么首先把这个物理机装成ESXI6.5的宿主机并配置网络系统 第二步骤就是在ESXI上面导入OVF文件,注册一台虚机,作为数据管理中心 第三步骤就是基于这 ...

  2. 手把手教你用Docker部署一个MongoDB集群

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中最像关系数据库的.支持类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引 ...

  3. 手把手教你vue配置请求本地json数据

    本篇文章主要介绍了vue配置请求本地json数据的方法,分享给大家,具体如下:在build文件夹下找到webpack.dev.conf.js文件,在const portfinder = require ...

  4. 从0开始,手把手教你开发并部署上线一个知识测验微信小程序

    上线项目演示 微信搜索[放马来答]或扫以下二维码体验: 项目源码 项目源码 其他版本 Vue答题App实战教程 Hello小程序 1.注册微信小程序 点击立即注册,选择微信小程序,按照要求填写信息 2 ...

  5. 手把手教你使用rpm部署ceph集群

    环境准备 1.在运行 Ceph 守护进程的节点上创建一个普通用户,ceph-deploy 会在节点安装软件包,所以你创建的用户需要无密码 sudo 权限.如果使用root可以忽略. 为赋予用户所有权限 ...

  6. 1.还不会部署高可用的kubernetes集群?看我手把手教你使用二进制部署v1.23.6的K8S集群实践(上)

    公众号关注「WeiyiGeek」 设为「特别关注」,每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x00 前言简述 0x01 环境准备 主机规划 软件版本 网络规划 0x02 ...

  7. 手把手教你写一个windows服务 【基于.net】 附实用小工具{注册服务/开启服务/停止服务/删除服务}

    1,本文适用范围 语言:.net 服务类型:windows服务,隔一段时间执行 2,服务搭建: 1,在vs中创建 console程序 2,在console项目所在类库右键 添加-新建项-选择Windo ...

  8. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(四)-使用Travis自动部署Hexo(2)

    前言 前面一篇文章介绍了Travis自动部署Hexo的常规使用教程,也是个人比较推荐的方法. 前文最后也提到了在Windows系统中可能会有一些小问题,为了在Windows系统中也可以实现使用Trav ...

  9. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(三)-使用Travis自动部署Hexo(1)

    前言 前面两篇文章介绍了在github上使用hexo搭建博客的基本环境和hexo相关参数设置等. 基于目前,博客基本上是可以完美运行了. 但是,有一点是不太好,就是源码同步问题,如果在不同的电脑上写文 ...

  10. 手把手教你Chrome扩展开发:本地存储篇

    手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩展二:为html添加行为 手把手教你开发Chrome扩展三:关于本地存储数据 HTML5 ...

随机推荐

  1. Jenkins篇-安装与使用

    Jenkins是一个开源自动化服务器,可以自动执行持续集成和交付软件所涉及的重复技术任务.Jenkins是基于Java的,可以从Ubuntu软件包安装,也可以通过下载和运行其Web应用程序存档(WAR ...

  2. 设计模式【3.2】-- JDK动态代理源码分析有多香?

    前面文章有说到代理模式:http://aphysia.cn/archives/dynamicagentdesignpattern 那么回顾一下,代理模式怎么来的?假设有个需求: 在系统中所有的 con ...

  3. Javascript遍历目录时使用for..in循环无法获取Files对象和SubFolders对象问题的解决方法

    1 Javascript遍历目录时使用for..in循环无法获取Files对象和SubFolders对象 1.1 问题场景   在JavaScript中遍历目录,使用for.. in循环时,无法获取到 ...

  4. Asp.net MVC中的Http管道事件为什么要以Application_开头?

    今天遇到一个问题,需要在API请求结束时,释放数据库链接,避免连接池被爆掉. 按照以往的经验,需要实现IHttpModule,具体不展开了. 但是实现了IHttpModule后,还得去web.conf ...

  5. ARTHAS 使用

    1.概述 ARTHAS是阿里巴巴 出品的一款java监控工具,本文介绍以下他的基本使用方法. 2.基本操作 2.1 启动 java -jar arthas-boot.jar 2.2 基础命令 命令 说 ...

  6. Vuex 面试题(2023-09-13更新)

    谈谈你对 Vuex 的理解 什么是 Vuex? vuex 是 Vue 应用程序开发的状态管理插件,它采用集中式存储,管理应用的所有组件的状态 Vuex 解决了什么问题? 多个组件依赖于同一状态时,多层 ...

  7. IOS实现水波纹

    IOS实现水波纹 需要实现一个水波纹效果 其实就是画两个正弦函数或者余弦函数的layer在view上面,根据屏幕刷新率来重绘,更新其左右偏移量来让其看起来是在左右移动 具体实现 定义两个layer,用 ...

  8. 体验.NET与文件存储服务MinIO

    对象文件存储服务(OSS)主要用于存储零散的文件,和直接存储到本地文件系统中相比,有以下的几个优势: 跨服务器可用 兼容Amazon S3 API 横向扩容 高可用 支持加密 MinIO就是一个高性能 ...

  9. Docker非root用户修改/etc/hosts文件

    本文会讲解在Docker容器环境下,非root用户如何编辑修改/etc/hosts文件. 1.背景和需求描述 环境:Docker 运行用户:非root用户,如普通用户1001 需求:应用运行在容器内, ...

  10. 【转载】理解分布式id生成算法SnowFlake

    分布式id生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种. https://segmentfault.com/a/1190000011282426 概述 SnowFlake算 ...