RAGFlow部署与使用(开源本地知识库管理系统,包括kibana配置)

一、RAGFlow 简介

戳我访问RAGFlow

RAGFlow 是一款基于深度文档理解构建的开源 RAG(Retrieval-Augmented Generation)引擎。它可以给我们搭建本地知识库,将用户的知识文档上传到RAGFlow后,通过文档切分、向量入库,在用户向大语言模型提问后,从数据库中检索与问题相关的文档,把查找到的知识库数据输入到对话大模型中再生成答案输出。

RAGFlow 可以为各种规模的企业及个人提供一套精简的 RAG 工作流程,结合大语言模型(LLM)针对用户各类不同的复杂格式数据提供可靠的问答以及有理有据的引用。它主要适用于需要动态生成内容且依赖外部知识库的场景,例如智能客服、文档生成、数据分析等。

此为系统架构图

在这里插入图片描述

二、部署RAGFlow

预先工作

安装前确保已经安装好了Docker

确保 vm.max_map_count 不小于 262144

sysctl vm.max_map_count

如果 vm.max_map_count 的值小于 262144,可以进行重置

sudo sysctl -w vm.max_map_count=262144

改动会在下次系统重启时被重置。如果希望做永久改动,还需要在 /etc/sysctl.conf 文件里把 vm.max_map_count=262144 再相应更新一遍,:

vi /etc/sysctl.conf

修改后保存。

  1. 克隆仓库
git clone https://github.com/infiniflow/ragflow.git

Docker方式

1. 修改 .env 文件,设置 RAGFLOW_IMAGE 来下载 RAGFlow 镜像的 v0.16.0 完整发行版。

默认的是 v0.16.0-slim 版本的,这个版本没有内置的内嵌模型,可能不太方便,建议安装完整发行版,即删除后面的-slim。

cd ragflow/docker
vi .env

修改 RAGFLOW_IMAGE=docker.1ms.run/infiniflow/ragflow:v0.16.0,注意这里的docker镜像代理也可以改成其他的。

2. 启动 RAGFlow ,查看启动日志

docker compose -f docker-compose.yml up -d
docker logs -f ragflow-server

出现以下界面提示说明服务器启动成功

     ____   ___    ______ ______ __/ __ \ /   |  / ____// ____// /____  _      __/ /_/ // /| | / / __ / /_   / // __ \| | /| / // _, _// ___ |/ /_/ // __/  / // /_/ /| |/ |/ //_/ |_|/_/  |_|\____//_/    /_/ \____/ |__/|__/* Running on all addresses (0.0.0.0)* Running on http://127.0.0.1:9380* Running on http://x.x.x.x:9380INFO:werkzeug:Press CTRL+C to quit

访问服务器对应的 IP 地址并登录 RAGFlow。

可以在模型提供商中选择接入一些开源的平台,比如 GPUStack 中部署的模型,即可使用LLM。

在这里插入图片描述

3. kibana 配置(可视化查看向量数据库 ElasticSearch 相关存储的数据)

main 分支的 kibana 相关的docker-compose被删除了,不知道什么原因。

我们在 ragflow/docker 下 创建两个文件 docker-compose-admin-tool.yml 和 init-kibana.sh ,然后docker compose运行,即可在 6601 端口使用 kibana。
默认用户名密码在 .env 文件中配置, 用户名密码:rag_flow,infini_rag_flow

# docker-compose-admin-tool.yml 
include:- path: ./docker-compose.ymlenv_file: ./.envservices:kibana:image: kibana:${STACK_VERSION}container_name: ragflow-kibanaenvironment:ELASTICSEARCH_USERNAME: ${KIBANA_USER}ELASTICSEARCH_PASSWORD: ${KIBANA_PASSWORD}ELASTICSEARCH_HOSTS: "http://es01:9200"ports:- ${KIBANA_PORT}:5601depends_on:es01:condition: service_healthykibana-user-init:condition: service_completed_successfullynetworks:- ragflowkibana-user-init:image: appropriate/curldepends_on:es01:condition: service_healthyvolumes:- ./init-kibana.sh:/app/init-kibana.shenvironment:- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}- KIBANA_USER=${KIBANA_USER}- KIBANA_PASSWORD=${KIBANA_PASSWORD}command: /bin/sh -c "sh /app/init-kibana.sh"networks:- ragflowrestart: 'no'
# init-kibana.sh
#!/bin/bash# unset http proxy which maybe set by docker daemon
export http_proxy=""; export https_proxy=""; export no_proxy=""; export HTTP_PROXY=""; export HTTPS_PROXY=""; export NO_PROXY=""echo "Elasticsearch built-in user: elastic:${ELASTIC_PASSWORD}"# Wait Elasticsearch be healthy
while true; doresponse=$(curl -s -v -w "\n%{http_code}" -u "elastic:${ELASTIC_PASSWORD}" "http://es01:9200")exit_code=$?status=$(echo "$response" | tail -n1)if [ $exit_code -eq 0 ] && [ "$status" = "200" ]; thenecho "Elasticsearch is healthy"breakelseecho "Elasticsearch is unhealthy: $exit_code $status"echo "$response"sleep 5fi
done# Create new role with all privileges to all indices
# https://www.elastic.co/guide/en/elasticsearch/reference/current/security-privileges.html#privileges-list-indices
echo "Going to create Elasticsearch role own_indices with all privileges to all indices"
while true; doresponse=$(curl -s -v -w "\n%{http_code}" -u "elastic:${ELASTIC_PASSWORD}" -X POST http://es01:9200/_security/role/own_indices -H 'Content-Type: application/json' -d '{"indices": [{"names": ["*"], "privileges": ["all"]}]}')exit_code=$?status=$(echo "$response" | tail -n1)if [ $exit_code -eq 0 ] && [ "$status" = "200" ]; thenecho "Elasticsearch role own_indices created"breakelseecho "Elasticsearch role own_indices failure: $exit_code $status"echo "$response"sleep 5fi
doneecho "Elasticsearch role own_indices:"
curl -u "elastic:${ELASTIC_PASSWORD}" -X GET "http://es01:9200/_security/role/own_indices"
echo ""PAYLOAD="{\"password\": \"${KIBANA_PASSWORD}\", \"roles\": [\"kibana_admin\", \"kibana_system\", \"own_indices\"], \"full_name\": \"${KIBANA_USER}\", \"email\": \"${KIBANA_USER}@example.com\"}"echo "Going to create Elasticsearch user ${KIBANA_USER}: ${PAYLOAD}"# Create new user
while true; doresponse=$(curl -s -v -w "\n%{http_code}" -u "elastic:${ELASTIC_PASSWORD}" -X POST http://es01:9200/_security/user/${KIBANA_USER} -H "Content-Type: application/json" -d "${PAYLOAD}")exit_code=$?status=$(echo "$response" | tail -n1)if [ $exit_code -eq 0 ] && [ "$status" = "200" ]; thenecho "Elasticsearch user ${KIBANA_USER} created"breakelseecho "Elasticsearch user ${KIBANA_USER} failure: $exit_code $status"echo "$response"sleep 5fi
doneecho "Elasticsearch user ${KIBANA_USER}:"
curl -u "elastic:${ELASTIC_PASSWORD}" -X GET "http://es01:9200/_security/user/${KIBANA_USER}"
echo ""exit 0

三、RAGFlow知识库构建相关

创建好知识库后,配置需要选择对应的文档语言以及嵌入模型(文档向量化用)。

在这里插入图片描述

可以打开知识图谱

在这里插入图片描述

解析方法需要选择对应的类型

在这里插入图片描述

正确配置知识库对于未来的AI聊天至关重要。例如,选择错误的嵌入模型或分块方法会导致聊天中意外的语义丢失或不匹配的答案。

RAGFlow提供了多个分块模板,以方便对不同布局的文件进行分块,并确保语义完整性。在Chunk方法中,您可以选择适合文件布局和格式的默认模板。下表显示了每个支持的区块模板的说明和兼容的文件格式:

模板描述文件格式
General文件将根据预设的块标记编号连续分块。DOCX, EXCEL, PPT, PDF, TXT, JPEG, JPG, PNG, TIF, GIF
Q&AEXCEL, CSV/TXT
ManualPDF
TableEXCEL, CSV/TXT
PaperPDF
BookDOCX, PDF, TXT
LawsDOCX, PDF, TXT
PresentationPDF, PPTX
PictureJPEG, JPG, PNG, TIF, GIF
One整个文档被分块为一个。DOCX, EXCEL, PDF, TXT

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35313.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTB 学习笔记 【中/英】《Web 应用 - 布局》P2

📌 这篇文章讲了什么? 介绍了 Web 应用的架构和布局,包括不同的基础设施、组件、架构模式等。讲解了 常见的 Web 应用部署方式(单服务器、多服务器等),并分析了它们的安全性。介绍了 微服务架构&#xff0…

蓝牙系统的核心组成解析

一、硬件层:看得见的物理载体 1. 射频模块(Radio Frequency Module) 专业描述:工作在2.4GHz ISM频段,支持GFSK/π/4 DQPSK/8DPSK调制方式 功能类比:相当于人的"嘴巴"和"耳朵" 发射端…

LeRobot源码剖析——对机器人各个动作策略的统一封装:包含ALOHA ACT、Diffusion Policy、VLA模型π0

前言 过去2年多的深入超过此前7年,全靠夜以继日的勤奋,一天当两天用,抠论文 抠代码 和大模型及具身同事讨论,是目前日常 而具身库里,idp3、π0、lerobot值得反复研究,故,近期我一直在抠π0及l…

ISP--Gamma Correction

文章目录 现象Gamma产生的原因CRT属性导致人眼的亮度特性 gamma校正LUT法线性插值法模拟gamma法 现象 从上往下看左侧黑色块黑得越来越严重,对比度也在逐渐加深。此时灰阶的高亮区获得的数据位变少,暗区获得的数据位变多,暗区细节会更多。但是…

光谱相机识别瓶子材质的技术原理和应用案例

一、技术原理 ‌光谱特征差异识别‌ 不同材质的塑料(如PET、PP、PE等)因化学结构差异,在近红外或可见光波段会呈现独特的光谱反射曲线。例如,高光谱相机通过分析数百个窄波段的光谱数据,可生成每种材质的“光谱指纹”…

某快餐店用户市场数据挖掘与可视化

1、必要库的载入 import pandas as pd import matplotlib.pyplot as plt import seaborn as sns2、加载并清洗数据 # 2.1 加载数据 df pd.read_csv(/home/mw/input/survey6263/mcdonalds.csv)# 2.2 数据清洗 # 2.2.1 检查缺失值 print(缺失值情况:) print(df.isn…

MySQL 衍生表(Derived Tables)

在SQL的查询语句select …. from …中,跟在from子句后面的通常是一张拥有定义的实体表,而有的时候我们会用子查询来扮演实体表的角色,这个在from子句中的子查询会返回一个结果集,这个结果集可以像普通的实体表一样查询、连接&…

Electron使用WebAssembly实现CRC-16 MAXIM校验

Electron使用WebAssembly实现CRC-16 MAXIM校验 将C/C语言代码,经由WebAssembly编译为库函数,可以在JS语言环境进行调用。这里介绍在Electron工具环境使用WebAssembly调用CRC-16 MAXIM格式校验的方式。 CRC-16 MAXIM校验函数WebAssembly源文件 C语言实…

HTB 学习笔记 【中/英】《前端 vs. 后端》P3

📌 这篇文章讲了什么? 介绍了 前端(客户端) 和 后端(服务器端) 的区别。解释了 全栈开发(Full Stack Development),即前端后端开发。介绍了 前端和后端常用的技术。讨论…

SpringBoot集成ElasticSearch实现支持错别字检索和关键字高亮的模糊查询

文章目录 一、背景二、环境准备1.es8集群2.Kibana3.Canal 三、集成到SpringBoot1.新增依赖2.es配置类3.建立索引4.修改查询方法 四、修改前端 一、背景 我们在开发项目的搜索引擎的时候,如果当数据量庞大、同时又需要支持全文检索模糊查询,甚至你想做到…

麒麟系统使用-安装 SQL Developer

文章目录 前言一、基础准备1.基本环境2.相关包下载 二、进行相关配置1.配置JAVA2.配置SQL Developer 总结 前言 作为我国自主研发的操作系统,麒麟系统在使用时需要考虑安装相应的app。尽管麒麟系统是基于linux开发,可由于版本的一些差异,麒麟…

PrimeTime:timing_report_unconstrained_paths变量

相关阅读 PrimeTimehttps://blog.csdn.net/weixin_45791458/category_12900271.html?spm1001.2014.3001.5482 PrimeTime自Q-2019.12版本起引入了timing_report_unconstrained_paths变量(默认值为false),该变量控制是否在使用report_timing命…

洛谷 P1115 最大子段和(前缀和详解)c++

题目链接:P1115 最大子段和 - 洛谷 1.题目分析 2.算法原理 解法:利用前缀和 思考:如何求出以a[i]为结尾的所有子区间中最大的子段和 假设 i 等于5,以 a[ i ] 为结尾的区间一共是五段(黑色线条部分)&#…

JetBrains(全家桶: IDEA、WebStorm、GoLand、PyCharm) 2024.3+ 2025 版免费体验方案

JetBrains(全家桶: IDEA、WebStorm、GoLand、PyCharm) 2024.3 2025 版免费体验方案 前言 JetBrains IDE 是许多开发者的主力工具,但从 2024.02 版本起,JetBrains 调整了试用政策,新用户不再享有默认的 30 天免费试用…

【数据分析】数据筛选与访问行列元素3

访问元素 .loc属性可以通过传入index的值访问行数据。 .loc属性允许传入两个参数,分别是index的值和columns的值,参数间用“逗号”隔开,这样便可以访问数据中的元素。 1. 访问单个元素 访问单个元素比较简单,只需要通过它的in…

C++ std::list超详细指南:基础实践(手搓list)

目录 一.核心特性 1.双向循环链表结构 2.头文件:#include 3.时间复杂度 4.内存特性 二.构造函数 三.list iterator的使用 1.学习list iterator之前我们要知道iterator的区分 ​编辑 2.begin()end() 3.rbegin()rend() 四.list关键接口 1.empty() 2. size…

【免费】2004-2017年各地级市进出口总额数据

2004-2017年各地级市进出口总额数据 1、时间:2004-2017年 2、来源:城市年鉴 3、指标:进出口贸易总额 4、范围:286个地级市 5、指标说明:进出口总额是指一个国家在特定时期内(通常为一年)所…

谈谈 undefined 和 null

*** 补充 null 和 ‘’

【第15届蓝桥杯】软件赛CB组省赛

个人主页:Guiat 归属专栏:算法竞赛真题题解 文章目录 A. 握手问题(填空题)B. 小球反弹(填空题)C. 好数D. R格式E. 宝石组合F. 数字接龙G. 爬山H. 拔河 正文 总共8道题。 A. 握手问题(填空题&…

【计算机视觉】工业表计读数(2)--表计检测

1. 简介 工业表计(如压力表、电表、气表等)在工控系统、能源管理等领域具有重要应用。然而,传统人工抄表不仅工作量大、效率低,而且容易产生数据误差。近年来,基于深度学习的目标检测方法在工业检测中展现出极大优势&…