DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

背景

之前写了一些知识库的文章,最后试用了dify,想着前端dify+企业自己的向量数据,随时可以切换前端应用,觉的很香。有些朋友向我案例ragflow。

试用完以后我发现,我想复杂了,定制企业向量数据库,ragflow完全能够满足,简单调整下,成本最低。功能实在是太强大了.

🌟 主要功能

🍭 “Quality in, quality out”

  • 基于 深度文档理解,能够从各类复杂格式的非结构化数据中提取真知灼见。
  • 真正在无限上下文(token)的场景下快速完成大海捞针测试。

🍱 基于模板的文本切片

  • 不仅仅是智能,更重要的是可控可解释。
  • 多种文本模板可供选择

🌱 有理有据、最大程度降低幻觉(hallucination)

  • 文本切片过程可视化,支持手动调整。
  • 有理有据:答案提供关键引用的快照并支持追根溯源。

🍔 兼容各类异构数据源

  • 支持丰富的文件类型,包括 Word 文档、PPT、excel 表格、txt 文件、图片、PDF、影印件、复印件、结构化数据、网页等。

🛀 全程无忧、自动化的 RAG 工作流

  • 全面优化的 RAG 工作流可以支持从个人应用乃至超大型企业的各类生态系统。
  • 大语言模型 LLM 以及向量模型均支持配置。
  • 基于多路召回、融合重排序。
  • 提供易用的 API,可以轻松集成到各类企业系统。

🔎 系统架构

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

安装

硬件要求

  • CPU >= 4 核
  • RAM >= 16 GB
  • Disk >= 50 GB
  • Docker >= 24.0.0 & Docker Compose >= v2.26.1

软件要求:

vm.max_map_count 不小于 262144,这个是针对linux

下载代码

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

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

我们看下docker目录中的文件,主要关注圈中的3块

  • .env 主要是docker部署的时候一些变量,service_conf.yaml.template是服务启动使用的配置文件
  • 需要注意的是,在mac操作系统下,会引入2
镜像tag 镜像大小(GB) 是否有向量模型? 是否稳定版版?
v0.16.0 ≈9 ✔️ 稳定
v0.16.0-slim ≈2 稳定
nightly ≈9 ✔️ 不稳定,每晚构建
nightly-slim ≈2 不稳定,每晚构建

关键参数

.env文件

#文档引擎,默认使用es
DOC_ENGINE=${DOC_ENGINE:-elasticsearch}

#docker部署的镜像,默认不带模型
RAGFLOW_IMAGE=infiniflow/ragflow:v0.16.0-slim

#redis端口,6379,我本机以及docker已经有了,我改程了6380
REDIS_PORT=6380

#服务端端口
SVR_HTTP_PORT=9380

#自定义了两个变量,nginx的暴露端口
EXPOSE_NGINX_PORT=8002
EXPOSE_NGINX_SSL_PORT=8444

#如果你需要在docker中拉取模型,网有不好,添加此镜像,将前面的#去掉
# HF_ENDPOINT=https://hf-mirror.com

#mac系统需要将此参数放开,默认禁用,将前面的#去掉就开启了
# MACOS=1

 

需要注意的是.env文件修改后,对应的service_conf.yaml.template配置中一些默认值也得改变。比如我们改了redis的端口,

#将redis的端口由6379改成6380
redis:
  db: 1
  password: '${REDIS_PASSWORD:-infini_rag_flow}'
  host: '${REDIS_HOST:-redis}:6380'

拉取镜像

# 拉取镜像
docker compose  pull

如果拉不到,网络不稳定,替换国内的镜像

- 华为云镜像名:`swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow`
- 阿里云镜像名:`registry.cn-hangzhou.aliyuncs.com/infiniflow/ragflow`

启动

我们通过-p指定分组名称,或者在docker-compose.yaml中添加name: 'ragflow'

docker compose up -d -p ragflow

等一会,安装过程只遇到了端口冲突的问题,修改下端口即可。

通过docker ps 或docker desktop 软件查看启动状态。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

登录

点击docker desktop或者http://localhost:8002/ 就进入了登录注册界面。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

上来是没有账户的,我们先点击注册一个,然后登录。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

基本设置

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

登录进来以后,我们先将右上角的1设置为简体中文,然后点击2

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

我们主要关注1 模型供应商和3 团队即可。可以通过2查看系统的资源概况,以及任务数。

点击1我们开始添加模型

模型配置

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

官方默认推荐通义,应该是合作了,我们添加本地ollama 和刚充值的热乎的deepseek.

本地Ollama 模型配置

ragflow中,ollama的模型类型可以选择4个,其实也就比dify多了一个reran模型,

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

通过ollama listt 查看模型列表,然后添加两个一个chat模型,一个embedding模型。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

最大token我们通过ollama show deepseek-r1:32b获取后填入。然后保存。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

报错了了,一看cudaMalloc failed: out of memory,一看内存81%了,空余12g的内存竟然不够用。赶紧关一些软件。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

然后再保存。成功。然后点击添加向量模型。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

添加DeepSeek

很简单,就填写一个api-key就行了。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

系统模型配置

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

选择相应的模型即可。

团队

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

我点击右上角的邀请,填写用户邮箱,点击确定。提示用户不存在。

我猜测,应该是注册制,注册以后再邀请进团队。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

然后角色是Invite,时间也有问题。应该是数据库的时区的问题。在.env中TIMEZONE配置的是shanghai时区。这个不太影响,下次再看下。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

然后我就很好奇,另外一个用户里是什么?我登录了另外一个账户,原来邀请的用户还得同意。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

同意以后,还可以退出。我再切换到原来的账户里,

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

发现角色变成了Normal

需要注意的是,团队共享了知识库,但是聊天助理并没有共享,模型也没有共享。

不过想想也对,创建的应用可以通过api分享,出来,共用的功能,设置都不需要邀请用户。知识反而是核心。我的理念和他好像。哈哈。

功能概述

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

从面板上看,就几个功能。还是很清晰,它的模板特别少,在创建agent的时候可以选择。

知识库

创建知识库

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

点击创建知识库,填写名称,点确定即可。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

这个时间反而是准的。

知识库配置

配置

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

  • 点击1的配置,
  • 我们可以指定文档语言2
  • 也可以设置这个知识库的权限3
  • 可以自定义解析方法4,而且每个解析方法后面都有对应的示例说明。是不是用它内置的向量模型会更好一些?

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

分段标识符,支持多字符作为分隔符,这对复杂格式的文档,也太友好了。还能有布局识别和OCR功能。

知识上传(数据集)

ragflow中上传的在数据集模块里。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

ragflow的知识库,只支持和上传文件或s3同步。同时可以一次上次多个知识。提示也很友好严禁上传公司数据或其他违禁文件

上传以后不会自动解析,需要手动点击。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

可以通过1单个解析,也可以通过勾选多个,批量解析。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

默认规则下,解析速度还行,清华大学第一弹一共104页,解析了110秒。

然后看了下分段效果。点开一看,太强大了图片内容也解析出来了。《清华大学第四弹》的内容。

我没有使用ocr呀,这个后续再研究。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

还有表格的识别。

检索测试

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

随便问一下,这检索效果,真棒。而且返回速度特别快。

文件管理

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

上传的文件在文件管理里面。

聊天

创建聊天

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

  • 点击新建助手
  • 显示引文3
  • 关键词分析4开启。应用 LLM 分析用户的问题,提取在相关性计算中要强调的关键词。
  • 知识库可以选择多个5

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

提示引擎默认即可,不用动。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

在模型设置里,主要是最大token数,默认512太小了,最大设置为8192

使用

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

  • 我们选择小助手1,点击2
  • 直接在3输入问题,同时也可以再上传任何文件。回答效果,有些图片里的内容都找到并填了进去。

后记

简单的试用了下ragflow,突然感觉dify不香了。后续我得好好的深入研究下。

之前在聊一个问题,dify分享出去以后谁都可以用,如果在玩一些有趣的东西的时候,会…

前端方案: 修改前端接口调用

我在浏览器检查模式下查看接口调用的时候,发现接口http://10.1.0.65:8001/console/api/apps?page=1&limit=30&name=&is_created_by_me=false 发现有个一个参数 is_created_by_me。

从字面上看,就是是否只查询自己的,既然怀疑了,那就动手试一下,我在dify中新添加一个账户。

进去以后能看到全部。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

在Edge浏览器下,我右键1,编辑并重新发送2,我把参数值改为true3,通过4我们可以看到请求值已经改变了,通过5,可以看到返回的数据为空。

然后我又看了下其他的接口发现两个接口

    • console/api/workspaces/current 返回值有一个normal

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

    • console/api/account/profile 返回的是个人信息角色

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

同时,在dify的工作室,我们通过标签查询

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

那我们可以怎么做?

  • 修改前端调用,非管理员的,只能调用自己的
  • 定制前端界面,可以通过角色控制和标签控制,比如我们建一个公共的标签,前端完全可以控制。

后端方案

通过tags_ids去查,总感觉别扭,数据少了还行,数据多了,在生产上就是找事。我就翻下dify的数据库。

连接dify的数据库

我们在部署dify的时候有个.env文件,这里有pg数据库的

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

使用Navicat Premium Lite连接数据库

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

在apps表中,我发有一个is_public和created_by

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

在dify的数据库里,我们可以很明显的看到一个apps表,打开表以后,我们可以看到两列is_publiccreated_by。那代码里有没有使用呢?我们翻下代码。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

不得不说dify的代码结构还是很规范的,根据接口console/api/apps,我们能很轻松的找到对应的接口实现,然后没有看到我关注的is_public字段。

我再翻下更新接口的代码,

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

在代码里并没有对is_public的操作。看来这个是商业版的功能或者是未来开放的功能。

前后端加上这个字段难度不大。

我们可以直接在这里根据用户的角色进行改造。在对应的表tenant_account_joins 可以设置新的角色,然后在代码里进行处理。

ChatFlow中添加权限

先画个简单的流程图。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

新建一个Chatflow流程。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

在chatFlow中有一个会话变量,用于存储会话中的上下文,也就是只要你一直在同一个会话,就可以保存着。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

点击1,然后点击2,添加变量loginStatus 变量,1登录成功,0是未登录。

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

登录成功后我们进行变量赋值,把loginStatus变量设置为1。整体流程如下:

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

  • 我们可以把工作流发布成一个自定义工具
  • 1用户输入问题
  • 2先校验用户的状态,如果已经登录直接到7,未登录到3
  • 3校验用户有无填写密钥,填写则到4
  • 4通过http校验用户有无权限,有权限到5,无权限,直接回复
  • 5有权限流转到6
  • 6设置变量loginStatus为1,然后流转到工作流7

后记

  • dify的代码很规范,对于经验丰富的开发者来说,没有文档也能快速入手
  • dify是很灵活的,社区的资源也很丰富
  • 我使用的是2025-02-21从github上拉下来的代码

给TA打赏
共{{data.count}}人
人已打赏
教程文档

DeepSeek+dify 本地知识库:高级应用Agent+工作流

2025-3-19 9:13:33

AI新闻资讯

​蚂蚁集团推出 “Plan A” 项目,全球招募顶尖 AI 人才

2025-4-25 16:30:18

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索