RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验

1.RAGflow简介

    • 全面优化的 RAG 工作流可以支持从个人应用乃至超大型企业的各类生态系统。
    • 大语言模型 LLM 以及向量模型均支持配置。
    • 基于多路召回、融合重排序。
    • 提供易用的 API,可以轻松集成到各类企业系统。
    • 支持丰富的文件类型,包括 Word 文档、PPT、excel 表格、txt 文件、图片、PDF、影印件、复印件、结构化数据、网页等。
    • 文本切片过程可视化,支持手动调整。
    • 有理有据:答案提供关键引用的快照并支持追根溯源。
    • 不仅仅是智能,更重要的是可控可解释。
    • 多种文本模板可供选择
    • 基于深度文档理解,能够从各类复杂格式的非结构化数据中提取真知灼见。
    • 真正在无限上下文(token)的场景下快速完成大海捞针测试。
    • “Quality in, quality out”
    • 基于模板的文本切片
    • 有理有据、最大程度降低幻觉(hallucination)
    • 兼容各类异构数据源
    • 自动化的 RAG 工作流

图片

图片

  • 系统架构

图片

2.快速开始

  • 环节要求

    • CPU >= 4 核

    • RAM >= 16 GB

    • Disk >= 50 GB

    • Docker >= 24.0.0 & Docker Compose >= v2.26.1

      如果你并没有在本机安装 Docker(Windows、Mac,或者 Linux), 可以参考文档 Install Docker Engine 自行安装。

2.1 启动服务器

vm.max_map_count是Linux内核中的一个重要参数,它定义了一个进程可以拥有的最大内存映射区域数。内存映射区域通常指的是内存映射文件、匿名内存映射等。

  • 性能优化:通过增加vm.max_map_count的值,可以允许应用程序创建更多的内存映射区域,从而提高性能和效率。特别是对于需要频繁访问大量文件或数据的应用程序,这种优化效果尤为明显。

  • 稳定性保障:如果应用程序尝试创建的内存映射区域数超过了系统设置的限制,可能会导致映射失败,进而引发性能问题或直接导致应用程序崩溃。因此,合理设置vm.max_map_count参数有助于保障系统的稳定性。

  • 设置方法

    • 临时设置:可以通过sysctl命令临时修改vm.max_map_count的值,但这种更改在系统重启后会失效。例如,要将vm.max_map_count的值设置为262144,可以执行sudo sysctl -w vm.max_map_count=262144命令。
    • 永久设置:为了确保在系统重启后vm.max_map_count的值仍然有效,需要将该值写入到/etc/sysctl.conf文件中。添加或更新vm.max_map_count=262144(或其他所需的数值)到该文件中,并保存更改。之后,可以通过执行sudo sysctl -p命令使更改立即生效。
  1. 确保 vm.max_map_count 不小于 262144:

    如需确认 vm.max_map_count 的大小:

    $ sysctl vm.max_map_count
    

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

    # 这里我们设为 262144:
    $ sudo sysctl -w vm.max_map_count=262144
    

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

    vm.max_map_count=262144
    
  2. 克隆仓库:

    $ git clone https://github.com/infiniflow/ragflow.git
    
  3. 进入 docker 文件夹,利用提前编译好的 Docker 镜像启动服务器:

    $ cd ragflow/docker
    $ chmod +x ./entrypoint.sh
    $ docker compose -f docker-compose-CN.yml up -d
    

    请注意,运行上述命令会自动下载 RAGFlow 的开发版本 docker 镜像。如果你想下载并运行特定版本的 docker 镜像,请在 docker/.env 文件中找到 RAGFLOW_VERSION 变量,将其改为对应版本。例如 RAGFLOW_VERSION=v0.11.0,然后运行上述命令。

    核心镜像文件大约 9 GB,可能需要一定时间拉取。请耐心等待。

    镜像拉在太慢的化参考链接:镜像拉去提速

  4. 服务器启动成功后再次确认服务器状态:

    $ docker logs -f ragflow-server
    

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

在这里插入图片描述

如果您跳过这一步系统确认步骤就登录 RAGFlow,你的浏览器有可能会提示 network abnormal网络异常,因为 RAGFlow 可能并未完全启动成功。

  1. 在你的浏览器中输入你的服务器对应的 IP 地址并登录 RAGFlow。

    上面这个例子中,您只需输入 http://IP_OF_YOUR_MACHINE 即可:未改动过配置则无需输入端口(默认的 HTTP 服务端口 80)。

  2. 在 service_conf.yaml 文件的 user_default_llm 栏配置 LLM factory,并在 API_KEY 栏填写和你选择的大模型相对应的 API key。

    详见 llm_api_key_setup。

部署遇到问题解决(🔺)

资源不足问题,ES会占用较多资源建议设置大一些

修改.env文件,根据自己内存资源进行设置,我就设置了70G,es默认吃一半

#Increase or decrease based on the available host memory (in bytes)
MEM_LIMIT=72864896288

图片

遇到知识库构建,索引构建卡住无法解析

问题描述:索引构建过程一直卡着,经过排查发现是系统盘空间不够95%+了,报错如下

ApiError('search_phase_execution_exception', meta=ApiResponseMeta(status=503, http_version='1.1', headers={'X-elastic-product': 'Elasticsearch', 'content-type': 'application/vnd.elasticsearch+json;compatible-with=8', 'content-length': '365'}, duration=0.004369974136352539, node=NodeConfig(scheme='http', host='es01', port=9200, path_prefix='', headers={'user-agent': 'elasticsearch-py/8.12.1 (Python/3.11.0; elastic-transport/8.12.0)'}, connections_per_node=10, request_timeout=10.0, http_compress=False, verify_certs=True, ca_certs=None, client_cert=None, client_key=None, ssl_assert_hostname=None, ssl_assert_fingerprint=None, ssl_version=None, ssl_context=None, ssl_show_warn=True, _extras={})), body={'error': {'root_cause': [{'type': 'no_shard_available_action_exception', 'reason': None}], 'type': 'search_phase_execution_exception', 'reason': 'all shards failed', 'phase': 'query', 'grouped': True, 'failed_shards': [{'shard': 0, 'index': 'ragflow_304817a205d211efa4de0242ac160005', 'node': None, 'reason': {'type': 'no_shard_available_action_exception', 'reason': None}}]}, 'status': 503})
  • 如果系统盘空间不够,请对docker迁移

修改Docker默认存储路径参考

迁移后问题解决:

图片

不得不说,ragflow的文档解析能力还挺强的

图片

图片

图片

图片

2.2 系统配置

系统配置涉及以下三份文件:

  • .env:存放一些基本的系统环境变量,比如 SVR_HTTP_PORTMYSQL_PASSWORDMINIO_PASSWORD 等。
  • service_conf.yaml:配置各类后台服务。
  • docker-compose-CN.yml: 系统依赖该文件完成启动。

请务必确保 .env 文件中的变量设置与 service_conf.yaml 文件中的配置保持一致!

./docker/README 文件提供了环境变量设置和服务配置的详细信息。请一定要确保 ./docker/README 文件当中列出来的环境变量的值与 service_conf.yaml 文件当中的系统配置保持一致。

如需更新默认的 HTTP 服务端口(80), 可以在 docker-compose-CN.yml 文件中将配置 80:80 改为 :80

所有系统配置都需要通过系统重启生效:

$ docker compose -f docker-compose-CN.yml up -d

2.3 源码编译、安装 Docker 镜像

如需从源码安装 Docker 镜像:
在这里插入图片描述

2.4 源码启动服务

如需从源码启动服务,请参考以下步骤:

  1. 克隆仓库
$ git clone https://github.com/infiniflow/ragflow.git
$ cd ragflow/
  1. 创建虚拟环境(确保已安装 Anaconda 或 Miniconda)
$ conda create -n ragflow python=3.11.0
$ conda activate ragflow
$ pip install -r requirements.txt

如果 cuda > 12.0,需额外执行以下命令:

$ pip uninstall -y onnxruntime-gpu
$ pip install onnxruntime-gpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-12/pypi/simple/
  1. 拷贝入口脚本并配置环境变量
$ cp docker/entrypoint.sh .
$ vi entrypoint.sh

使用以下命令获取python路径及ragflow项目路径:

$ which python
$ pwd

将上述 which python 的输出作为 PY 的值,将 pwd 的输出作为 PYTHONPATH 的值。

LD_LIBRARY_PATH 如果环境已经配置好,可以注释掉。

在这里插入图片描述

  1. 启动基础服务
$ cd docker
$ docker compose -f docker-compose-base.yml up -d
  1. 检查配置文件 确保docker/.env中的配置与conf/service_conf.yaml中配置一致, service_conf.yaml中相关服务的IP地址与端口应该改成本机IP地址及容器映射出来的端口。
  2. 启动服务
$ chmod +x ./entrypoint.sh
$ bash ./entrypoint.sh
  1. 启动WebUI服务

在这里插入图片描述

  1. 部署WebUI服务

在这里插入图片描述

3. 案例快速实践

3.1 模型接入

  • 商业模型接入:

图片

参考链接:国内大模型LLM选择以及主流大模型快速使用教程

  • ollama接入

图片

参考链接:Ollama简化流程,OpenLLM灵活部署,LocalAI本地优化

  • xinference 接入

图片

Xinference实战指南

3.0 知识库构建

图片

TemplateDescriptionFile format
GeneralFiles are consecutively chunked based on a preset chunk token number.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
OneThe entire document is chunked as one.DOCX, EXCEL, PDF, TXT
Knowledge GraphDOCX、EXCEL、PPT、IMAGE、PDF、TXT、MD、JSON、EML
  • “General” 分块方法说明 支持的文件格式为DOCX、EXCEL、PPT、IMAGE、PDF、TXT、MD、JSON、EML、HTML。

此方法将简单的方法应用于块文件:

系统将使用视觉检测模型将连续文本分割成多个片段。接下来,这些连续的片段被合并成Token数不超过“Token数”的块。

  • “Q&A” 分块方法说明 此块方法支持 excel 和 csv/txt 文件格式。

如果文件以 excel 格式,则应由两个列组成 没有标题:一个提出问题,另一个用于答案, 答案列之前的问题列。多张纸是 只要列正确结构,就可以接受。如果文件以 csv/txt 格式为 用作分开问题和答案的定界符。未能遵循上述规则的文本行将被忽略,并且 每个问答对将被认为是一个独特的部分。

  • “Knowledge Graph” 分块方法说明 支持的文件格式为DOCX、EXCEL、PPT、IMAGE、PDF、TXT、MD、JSON、EML

文件分块后,使用分块提取整个文档的知识图谱和思维导图。此方法将简单的方法应用于分块文件:连续的文本将被切成大约 512 个 token 数的块。

接下来,将分块传输到 LLM 以提取知识图谱和思维导图的节点和关系。

图片

  • 支持embedding model

    • BAAI/bge-large-zh-v1.5
    • BAAI/bge-base-en-v1.5
    • BAAI/bge-large-en-v1.5
    • BAAI/bge-small-en-v1.5
    • BAAI/bge-small-zh-v1.5
    • jinaai/jina-embeddings-v2-base-en
    • jinaai/jina-embeddings-v2-small-en
    • nomic-ai/nomic-embed-text-v1.5
    • sentence-transformers/all-MiniLM-L6-v2
    • maidalun1020/bce-embedding-base_v1

智能问答 & AI 编排流

Agent模块—>模板选择—>HR招聘助手

图片

图片

  • 技术文档
  • Quickstart
  • User guide
  • References
  • FAQ

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3入门 - ElementPlus中左侧菜单和Tabs菜单组合联动效果

在Vue3中,ElementPlus是使用比较广泛的UI组件库,提供了丰富的界面元素支持项目开发需求。在后台管理系统中,左侧或顶部的菜单栏通常包含多个子菜单项,通过菜单的展开和收缩功能,用户可以方便地查看或隐藏不需要的菜单项…

数字世界中的浪漫:揭秘会跳动的爱心

在编程的世界里,复杂的技术可以与艺术产生美妙的碰撞。无论是通过代码实现动态效果,还是用算法绘制图案,程序员都可以成为数字艺术的创作者。而今天,我们将通过 Python 的强大 GUI 工具库 Tkinter,用简单的代码生成一颗…

U-Boot顶层Makefile详解

直接参考【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81 本文仅作为个人笔记使用,方便进一步记录自己的实践总结。 上一章我们详细的讲解了 uboot 的使用方法,其实就是各种命令的使用,学会 uboot 使用以后就可以尝试移植 uboot 到自己的开发…

linux操作系统的基本命令

1.linux下的文件系统 在linux操作目录下没有像window操作系统下盘符的概念,只有一个根目录/,所有文件目录都在它的下面 linux的目录结构: 在Linux系统中: 文件都从跟目录开始的,用/表示文件名称区分大小写路径都是以/俩进行分隔(windown用\分隔)以.开头的文件为隐藏文件 Li…

鸿蒙开发之ArkUI 界面篇 十七 购物综合案例

layoutWeight:子元素与兄弟元素主轴方向按照权重进行分配,参数是联合类型,数字或者是字符串,在指定的空间占多少份额,数字越大,表示在空间中占用的份额越多,如果父容器的子组件没有别的指定,剩下的空间全部…

10分钟一条童装走秀爆款Ai视频,小白轻松上手,新蓝海赛道,竞争小机会多!

今天我要给大家带来一个超级有趣的项目——童装走秀AI视频制作。 这不仅是一个充满创意的项目,而且操作简单,即使是视频制作的新手也能轻松上手。 更重要的是,这个项目竞争小,变现机会多,是进入新蓝海赛道的绝佳机会…

C++类之set与get理解

在类中,我们尝尝将一些变量设置为private或者protect里面,而我们经常会遇到在主函数(main.cpp)使用到这些private变量,而往往我们会下意识地在主函数直接调用在private里面的变量,但现实比较残酷&#xff0…

【linux】nice命令

Linux中的nice命令是一个强大的工具,用于调整进程的优先级,进而影响它们在CPU上的资源分配和执行顺序。以下是关于nice命令的详细解释,包括其用途、语法、参数、示例以及使用建议。 一、用途 nice命令主要用于控制进程在CPU上的调度优先级&…

K8S介绍+集群部署

Kubernetes介绍 官网:https://kubernetes.io/ 一、应用部署方式演变 1、传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其他技术的参与 缺点:不能为应用程序定义资源使用边界&a…

【论文笔记】BEVNeXt: Reviving Dense BEV Frameworks for 3D Object Detection

原文链接:https://arxiv.org/pdf/2312.01696 简介:最近,在摄像头3D目标检测任务中,基于查询的Transformer解码器正在超越传统密集BEV方法。但密集BEV框架有着更好的深度估计和目标定位能力,能全面精确地描绘3D场景。本…

初始网络编程(下)

所属专栏:Java学习 1. TCP 的简单示例 同时,由于 TCP 是面向字节流的传输,所以说传输的基本单位是字节,接受发送都是使用的字节流 方法签名 方法说明 Socket accept() 开始监听指定端口(创建时绑定的端口&…

Navicat导入Sql文件至Mysql数据库,事务失效

Mysql 版本:8.0.39 Navicat 版本:17.x、16.x 结论: Navicat 导入sql文件,事务不会生效,无论怎么设置 mysql.exe 导入sql文件,事务生效 测试 准备一张表 name约束不能为空,用于测试事务失败…

SpringBoot 整合 Caffeine 实现本地缓存

目录 1、Caffeine 简介1.1、Caffeine 简介1.2、对比 Guava cache 的性能主要优化项1.3、常见的缓存淘汰算法1.4、SpringBoot 集成 Caffeine 两种方式 2、SpringBoot 集成 Caffeine 方式一2.1、缓存加载策略2.1.1、手动加载2.1.2、自动加载【Loading Cache】2.1.3、异步加载【As…

7、论等保的必要性

数据来源:7.论等保的必要性_哔哩哔哩_bilibili 等级保护必要性 降低信息安全风险 等级保护旨在降低信息安全风险,提高信息系统的安全防护能力。 风险发现与整改 开展等级保护的最重要原因是通过测评工作,发现单位系统内外部的安全风险和脆弱…

Linux启动流程,0,1,2进程,init进程,idle进程,内核态到用户态的kernel_execve(一)

?是,如果定义了,就按Makefile的,如果如下make编译时,就按如下 linux内核入口 进程0在用户空间看不到,因为他是内核进程 进程2就是守护进程,维护内涵运转的 一生二,二生三&#xff…

Navicate 链接Oracle 提示 Oracle Library is not loaded ,账号密码都正确地址端口也对

Navicate 链接Oracle 提示 Oracle Library is not loaded ,账号密码都正确地址端口也对的问题 解决办法 出现 Oracle Library is not loaded 错误提示,通常是因为 Navicat 无法找到或加载 Oracle 客户端库(OCI.dll)。要解决这个问题&#x…

IntelliJ IDEA 2024.1.4 (Ultimate Edition)找不到Add Framework Support解决方法

目录 背景: 解决方法: 步骤1: 步骤2: 步骤3: 创建Web项目的完整流程: 步骤1: 步骤2: 步骤3: 步骤4: Web优点: 背景: 我的IDE版本是IntelliJ IDEA 2024.1.4 (Ultimate Edition),当我…

Java调用数据库 笔记05(查询篇)

一. 数据库(通过各种驱动来实现调用): (应用程序通过接口控制的各种数据库驱动来调用数据库-->jdbc方法) 1.创建Java的普通class类 2.加载驱动 Class.forName("com.mysql.jdbc.Driver"); 3.驱动管理类…

nginx upstream转发连接错误情况研究

本次测试用到3台服务器: 192.168.10.115:转发服务器A 192.168.10.209:upstream下服务器1 192.168.10.210:upstream下服务器2 1台客户端:192.168.10.112 服务器A中nginx主要配置如下: log_format main…

C++之职工管理系统(细节Q)

指针初始化类 && 普通变量初始化类 抽象基类worker,只需编写 .h ,无需 .cpp 底层实现 类 记得声明权限public!!!不然默认private,主函数访问不了 记得继承父类 Worker * worker:指向Wo…