当前位置: 首页 > article >正文

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:9380
 INFO: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.yml
    env_file: ./.env

services:
  kibana:
    image: kibana:${STACK_VERSION}
    container_name: ragflow-kibana
    environment:
      ELASTICSEARCH_USERNAME: ${KIBANA_USER}
      ELASTICSEARCH_PASSWORD: ${KIBANA_PASSWORD}
      ELASTICSEARCH_HOSTS: "http://es01:9200"
    ports:
      - ${KIBANA_PORT}:5601
    depends_on:
      es01:
        condition: service_healthy
      kibana-user-init:
        condition: service_completed_successfully

    networks:
      - ragflow
  kibana-user-init:
    image: appropriate/curl
    depends_on:
      es01:
        condition: service_healthy
    volumes:
      - ./init-kibana.sh:/app/init-kibana.sh
    environment:
      - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
      - KIBANA_USER=${KIBANA_USER}
      - KIBANA_PASSWORD=${KIBANA_PASSWORD}
    command: /bin/sh -c "sh /app/init-kibana.sh"
    networks:
      - ragflow
    restart: '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; do
    response=$(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" ]; then
        echo "Elasticsearch is healthy"
        break
    else
        echo "Elasticsearch is unhealthy: $exit_code $status"
        echo "$response"
        sleep 5
    fi
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; do
    response=$(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" ]; then
        echo "Elasticsearch role own_indices created"
        break
    else
        echo "Elasticsearch role own_indices failure: $exit_code $status"
        echo "$response"
        sleep 5
    fi
done

echo "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; do
    response=$(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" ]; then
        echo "Elasticsearch user ${KIBANA_USER} created"
        break
    else
        echo "Elasticsearch user ${KIBANA_USER} failure: $exit_code $status"
        echo "$response"
        sleep 5
    fi
done

echo "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.kler.cn/a/589898.html

相关文章:

  • Linux驱动开发之中断处理
  • kafka详细介绍以及使用
  • Java语言前言
  • 基于ssm的电子病历系统(全套)
  • 标贝自动化数据标注平台推动AI数据训练革新
  • C#语言的事务管理
  • 卷积神经网络 - 卷积的互相关
  • pytorch 卷积神经网络可视化 通过HiddenLayer和PyTorchViz可视化网络(已解决)
  • java学习总结(八):Spring boot
  • 2025深圳国际数字能源展全球招商启动,聚焦能源产业数字化转型
  • 【C++】*和到底如何使用?关于指针的一些理解
  • OpenCV实现图像特征提取与匹配
  • 最小二乘法的算法原理
  • 【React】useEffect、useLayoutEffect底层机制
  • 工业物联网的“边缘革命”:研华IoT Edge 设备联网与边缘计算的突破与实践
  • 蓝桥杯[每日一题] 模拟题:蚂蚁感冒(java版)
  • 项目实战系列:基于瑞萨RA6M5构建多节点OTA升级-系统设计<一>
  • ArcGIS Pro中加载在线地图的详细指南
  • 3.1 Spring Boot性能优化:从线程池调优到JVM参数配置
  • java web 安全,如何认证客户端?时间戳和noce如何抵御重放攻击?