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

一、RAGFlow 简介

戳我访问RAGFlow

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

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

此为系统架构图

二、部署RAGFlow

预先工作

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

确保 vm.max_map_count 不小于 262144

bash 复制代码
sysctl vm.max_map_count

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

bash 复制代码
sudo sysctl -w vm.max_map_count=262144

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

bash 复制代码
vi /etc/sysctl.conf

修改后保存。

  1. 克隆仓库
bash 复制代码
git clone https://github.com/infiniflow/ragflow.git

Docker方式

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

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

bash 复制代码
cd ragflow/docker
vi .env

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

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

bash 复制代码
docker compose -f docker-compose.yml up -d
docker logs -f ragflow-server

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

shell 复制代码
     ____   ___    ______ ______ __
    / __ \ /   |  / ____// ____// /____  _      __
   / /_/ // /| | / / __ / /_   / // __ \| | /| / /
  / _, _// ___ |/ /_/ // __/  / // /_/ /| |/ |/ /
 /_/ |_|/_/  |_|\____//_/    /_/ \____/ |__/|__/

 * 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

yaml 复制代码
# 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'
shell 复制代码
# 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&A EXCEL, CSV/TXT
Manual PDF
Table EXCEL, CSV/TXT
Paper PDF
Book DOCX, PDF, TXT
Laws DOCX, PDF, TXT
Presentation PDF, PPTX
Picture JPEG, JPG, PNG, TIF, GIF
One 整个文档被分块为一个。 DOCX, EXCEL, PDF, TXT
相关推荐
强盛小灵通专卖员1 分钟前
边缘计算设备NPU的加速原理
人工智能·深度学习·边缘计算·sci·中文核心·小论文
moz与京3 分钟前
【面试向】边缘计算基础介绍
人工智能·边缘计算
ShiMetaPi4 分钟前
【ShiMetaPi】基于BM1684X的智能工业视觉边缘计算盒子解决方案
人工智能·边缘计算·bm1684x
强盛小灵通专卖员5 分钟前
RK3576边缘计算设备部署YOLOv11
人工智能·深度学习·yolo·边缘计算·sci·rk3576·小论文
Ms_Big33 分钟前
ppliteseg改rknn,部署在嵌入式板,加速模型
人工智能·python·深度学习
说私域34 分钟前
基于开源AI智能名片链动2+1模式S2B2C商城小程序的移动互联网人气氛围营造机制研究
人工智能·小程序·开源
TMT星球42 分钟前
从IFA再出发:中国制造与海信三筒洗衣机的“答案”
人工智能·制造
edisao1 小时前
[特殊字符] 从助手到引擎:基于 GPT 的战略协作系统演示
大数据·人工智能·gpt
三之又三1 小时前
卷积神经网络CNN-part5-NiN
人工智能·神经网络·cnn
百锦再1 小时前
在 CentOS 系统上实现定时执行 Python 邮件发送任务
java·linux·开发语言·人工智能·python·centos·pygame