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

centos7上使用Docker+ RagFlow + ollama + 数据集 搭建自己的AI问答机器人(2025-09)

什么是RAG

RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合信息检索文本生成的智能技术,旨在解决传统大语言模型(LLM)的局限性。以下是通俗易懂的解释:


核心原理

  1. 检索(Retrieval)
    当用户提问时,系统先从外部知识库(如文档、数据库、企业私有数据)中快速查找与问题最相关的片段。例如,问“公司2023年营收多少”,系统会从财报文档中检索出具体数字。

  2. 增强生成(Augmented Generation)
    将检索到的真实数据与用户问题一起输入大语言模型,模型基于这些可信信息生成回答,而非仅依赖训练时的静态知识。这样能避免“幻觉”(编造信息),确保答案准确且有据可依。


RAG 的基本流程

  1. 用户提问(Query)
    比如:“介绍一下中国的新能源政策”。

  2. 检索阶段(Retrieval)
    系统会把问题转成 embedding 向量,然后去知识库(向量数据库或全文搜索引擎)检索最相关的文档片段(chunks)。

  3. 增强输入(Augmentation)
    把检索到的文档片段附加到用户问题后面,构造成一个 提示(prompt)

    用户问题 + [相关文档内容]
    
  4. 生成阶段(Generation)
    把增强后的 prompt 输入到大语言模型中,模型基于问题和文档上下文生成回答。

  5. 答案输出(Answer)
    最终给出一个带有依据的答案,甚至能附带引用出处。


RAG 的优点

  • 避免幻觉:模型有外部知识支撑,减少“编造”。
  • 知识可更新:知识库可随时更新,不需要重新训练模型。
  • 更可信:能给出来源引用,方便验证。
  • 降低成本:不必训练超大模型,只需调用中等规模 LLM + 知识库即可。

为什么需要RAG?

  • 知识更新问题:传统LLM的训练数据有截止日期(如2023年),无法回答最新事件(如2024年政策)。
  • 私有数据访问:企业内部文档、专有数据无法直接用于训练模型,RAG可实时检索这些数据。
  • 减少错误:模型不再“凭空想象”,而是基于检索到的证据生成回答,可靠性大幅提升。

典型应用场景

  • 企业知识库:员工提问“如何申请报销”,系统自动检索公司制度文档并生成步骤说明。
  • 客服系统:用户问“订单物流状态”,RAG从订单数据库中提取实时信息并回复。
  • 医疗咨询:医生询问“某种药物的禁忌症”,系统从医学文献中检索权威结论,避免错误建议。

与传统LLM的区别

传统LLMRAG
仅依赖训练数据,知识可能过时实时检索最新或私有数据
回答可能“脑补”错误信息严格基于检索到的证据生成
无法访问企业内部文档可对接企业专属知识库

简单比喻

想象一个“学霸+图书馆员”的组合:

  • 图书馆员(检索模块):快速找到相关书籍中的具体段落;
  • 学霸(生成模块):根据这些段落整理出清晰、准确的答案。
    两者结合,既保证答案有依据,又能灵活应对新问题。
    可以把 RAG 理解为:
    👉 模型本身 = 一个“懂语言的专家”,但记忆有限,有时候会胡编。
    👉 检索系统 = 一个“图书管理员”,能找到相关资料。
    👉 RAG = 专家在回答前,先让图书管理员找资料,再结合自己的语言能力回答。

RAG的核心价值在于让AI真正“懂”你的数据,而非仅依赖通用知识。像RAGFlow这样的工具,正是将RAG技术落地为易用的系统,帮助企业快速构建智能问答服务。

RAGFlow介绍

… 来源ChatGPT

什么是 RAGFlow

  • RAGFlow 是一个开源的 Retrieval-Augmented Generation(检索增强生成,RAG)引擎,由 Infiniflow 团队开发。它特别强调「深度文档理解」(deep document understanding)。([GitHub][1])
  • 目的是把复杂、格式多样的数据(PDF、Word、表格、扫描件、ppt、图片等)处理好,构建知识库,使得当用户查询时,能够检索相关内容,并由大语言模型(LLM)基于这些检索到的内容生成答案,并带有可信的引用出处。([ragflow.io][2])
  • 它也支持 Agent 模型/工作流,意味着可以把检索+生成结合一些自动化任务、推理、脚本执行等能力。([GitHub][1])

关键功能/特点

下面是 RAGFlow 的主要特性:

功能描述
深文档理解 (Deep Document Understanding)能够处理复杂格式的文档,包括扫描件、图片、表格,做 OCR、版面(layout)分析、表格解析等。([GitHub][1])
多数据源与异构格式支持支持 Word、Slides、Excel、TXT、Markdown、图片、PPT 等多种类型文件。([GitHub][1])
文档切分(Chunking/Template-based chunking)文档被切分成“块”,有多种模板可选,能够针对不同格式选合适的切分方式,也支持人工干预。([GitHub][1])
检索 + 重排序机制 (Multiple recall + fused re-ranking)不同的检索方式结合,再用重排序/过滤机制来提高检索结果的质量。([GitHub][1])
带引用(Citation)与可追踪性回答中会保留检索到的来源或块,以便用户追踪和验证。([ragflow.io][2])
可配置/灵活集成 LLM/Embedding 模型用户可以选用不同 embedding 模型、LLM 提供商,也支持本地模型/远程模型。([ragflow.io][2])
Agent 模式与脚本执行功能有预置的 “agent 模板”/代理工作流,可以做代码执行、任务调度等。([GitHub][1])
可视化界面与操作体验有 web UI 用于上传文档、查看 chunks、测试检索、聊天 assistant 配置等,用户干预文档解析/切分,调试过程更透明。([ragflow.io][2])

系统架构/工作流程

简要说 RAGFlow 的架构和流程,让你理解内部怎么运作。

  1. 文档上传与解析
    用户把各种文件上传到系统,系统后台有任务调度器异步处理这些文件:OCR、layout 分析、表格解析、切分成多个 chunk。([ragflow.io][2])

  2. 嵌入 (Embedding) 与索引
    对文本块做 embedding(语义表示),存储向量 + 文本 +元数据;并建立检索索引。默认是 Elasticsearch,也支持其他“DOC 引擎”比如 Infinity。([GitHub][1])

  3. 检索检出与重排序 (Recall + Re‐Ranking)
    当有查询/对话请求时,系统从索引中检索可能相关的 chunks,用多个召回策略,然后用重排序融合这些结果,以保证高相关性。([GitHub][1])

  4. LLM 生成 (Generation)
    检索到的相关文本块作为 context 提供给 LLM,由 LLM 来生成答案。这个回答会带有引用,用户能追踪到是哪些文档/哪一块文本支持这个答案。([ragflow.io][2])

  5. Agent/自动化/脚本扩展
    可以配置 agent 模板,比如执行代码、自动化任务、对上传内容的自动处理等。([GitHub][1])

  6. UI + APIs
    提供 Web UI 来做文档管理、知识库管理、聊天助手配置、检索测试等,同时也提供 API 接口,方便外部系统/应用集成。([ragflow.io][2])


优势与局限

优势

  • 能处理复杂格式的文档和异构数据源,这在真实业务中非常常见。
  • 文档切分 + 重排序 + 引用机制,有助于提高检索质量与答案可信性。
  • UI 和人工干预支持,用户可以看到切分结果、调节、插入关键字等,有助于调优。
  • 支持多种 embedding 模型与 LLM,提高灵活性。
  • 开源,方便二次开发,自托管,也比较适合企业内部使用。

局限 /挑战

  • 对资源要求不低:CPU、内存、存储都需一定规模,尤其文档比较大/数量多的时候。([ragflow.io][2])
  • 在中文或其他非英语语言环境下,嵌入模型/OCR/版面解析等会有挑战,效果可能不如英语好(依赖模型支持情况)。
  • 文档切分模板 + layout 解析可能对非常奇怪或非常非标准格式的文档支持有限,需要人工调优或额外定制。
  • 部署复杂度:如果要在本地或私有网络中用本地 LLM + embedding 模型 +存储服务/向量/搜索引擎,配置和运维工作量还是不少。
  • 性能:检索的速度、生成速度、检索 + 排序 + LLM 生成整个流水线可能有一定延迟,尤其是在大规模/并发情况下。

适合场景

RAGFlow 在以下场景会比较合适:

  • 企业内部知识库+问答系统,比如文档资料很多,多格式(PDF、表格、PPT等),希望有一个工具把这些融合起来,用自然语言查询。
  • 客户支持、法律、医药等行业,需要对复杂文档做检索并给出带引用的回答。
  • 研究机构或内容制作方,需要把大批文档整理/检索/摘要+生成报告。
  • 自动化流程/agent 工作流,在文档检索与处理基础上进一步做自动动作。

如果只是很简单的问答,或者文档格式非常统一,也许只用一般的 RAG 工具就足够。


开源项目地址

github地址:
RAGFlow

文档地址

ragFlow-doc

安装RAGFLOW

安装的本机环境

windows vm station 或者阿里云centos ECS都可

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-1160.108.1.el7.x86_64 #1 SMP Thu Jan 25 16:17:31 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux[root@localhost ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)[root@localhost ~]# docker --version
Docker version 25.0.2, build 29cf629

环境准备

基础要求

在这里插入图片描述
记得配置 vm.max_map_count,注意:
vm.max_map_count 参数用于设置进程可拥有的最大内存映射区域数量,其默认值为 65530。尽管大多数应用所需的映射数量不足一千,但若降低此值可能导致系统异常行为,当进程达到限制时会触发内存不足错误。
RAGFlow v0.20.5 使用 Elasticsearch 或 Infinity 引擎实现多路召回机制。正确配置 vm.max_map_count 的值对确保 Elasticsearch 组件的稳定运行至关重要
在这里插入图片描述

开始安装

参照 文档安装即可

$ git clone https://github.com/infiniflow/ragflow.git$ cd ragflow/docker
## 指定 tag为  v0.20.5 
$ git checkout -f v0.20.5  

使用的是 docker compose up -d

笔者是cpu的linux,如果是GPU可以使用下面这个

# To use GPU to accelerate embedding and DeepDoc tasks:
# docker compose -f docker-compose-gpu.yml up -d

目录:
在这里插入图片描述
注意:
v0.20.5 是包含embedding models,ragflow的镜像大概9G
但笔者并未使用 v0.20.5 而是使用的v0.20.5-slim版本,我更倾向于更小的安装镜像,同时embedding models,可以使用ollama 来安装或者使用模型提供商提供的比如 siliconflow 或者 阿里云百炼下的 embedding modles
在这里插入图片描述

国内使用注意事项

dockek镜像,国内取默认的镜像会失败,使用文档提供的国内的源地址
参考 configration
笔者修改部分:

vim .env

修改环境配置参数:RAGFLOW_IMAGE=swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:nightly-slim
# The local time zone. 时区默认是上海
TIMEZONE=Asia/Shanghai## 如果觉得内存限制太小或者太大可以自行调整,但是ES最低不要低于2G 
# The maximum amount of the memory, in bytes, that a specific Docker container can use while running.
# Update it according to the available memory in the host machine.
MEM_LIMIT=6073741824wq!

修改 docker-compose-base.yml

如果redis镜像取不使用 中国的镜像

  redis:# swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/valkey/valkey:8#image: valkey/valkey:8image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/valkey/valkey:8

注意: RAGFlow 的底层基础设施为: Elasticsearch8 MySQL8 MinIO Redis8
Sets up environment for RAGFlow’s dependencies: Elasticsearch/Infinity, MySQL, MinIO, and Redis.
有的镜像取不到也需要配置为国内的docker源

Docker 国内加速

vim /etc/docker/daemon.json (文件没有手动创建)

{"registry-mirrors": ["https://docker.xuanyuan.me","https://docker.1ms.run","https://docker.m.daocloud.io","https://hub.rat.dev","https://dockercf.jsdelivr.fyi"]
}

Docker 使用代理
vim /etc/systemd/system/docker.service.d/http-proxy.conf (文件没有手动创建)

[Service]
Environment="HTTP_PROXY=http://192.168.2.121:1010/"
Environment="HTTPS_PROXY=http://192.168.2.121:1010/"
Environment="NO_PROXY=localhost,127.0.0.1,.docker.internal,.example.com,192.168.1.0/24"

在这里插入图片描述

在这里插入图片描述

If you cannot download the RAGFlow Docker image, try the following mirrors.For the nightly-slim edition:
RAGFLOW_IMAGE=swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:nightly-slim or,
RAGFLOW_IMAGE=registry.cn-hangzhou.aliyuncs.com/infiniflow/ragflow:nightly-slim.
For the nightly edition:
RAGFLOW_IMAGE=swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:nightly or,
RAGFLOW_IMAGE=registry.cn-hangzhou.aliyuncs.com/infiniflow/ragflow:nightly.

在这里插入图片描述
安装好后:
在这里插入图片描述

docker stats
在这里插入图片描述
docker logs -f {container_id} --tail 100
在这里插入图片描述

安装Ollama

拉取镜像(国内):
docker pull docker.m.daocloud.io/ollama/ollama:latest

启动脚本

#!/bin/bash
# =================================================
# Ollama 启动脚本
# =================================================# 容器名
CONTAINER_NAME="ollama"# 映射端口
HOST_PORT=11434
CONTAINER_PORT=11434# 本地存储路径
LOCAL_DIR="/opt/ollama"
CONTAINER_DIR="/root/.ollama"# 镜像名称
#IMAGE="ollama/ollama:latest"
IMAGE="docker.m.daocloud.io/ollama/ollama:latest"# 内存限制
MEMORY_LIMIT="3g"# 检查容器是否已经存在
if [ "$(docker ps -a -q -f name=$CONTAINER_NAME)" ]; thenecho "容器 $CONTAINER_NAME 已存在,先停止并删除..."docker stop $CONTAINER_NAMEdocker rm $CONTAINER_NAME
fi# 启动容器
echo "启动 Ollama 容器..."
docker run -d \--name $CONTAINER_NAME \--restart always \--memory=$MEMORY_LIMIT \-p $HOST_PORT:$CONTAINER_PORT \-v $LOCAL_DIR:$CONTAINER_DIR \$IMAGEecho "Ollama 已启动,端口: $HOST_PORT"
docker ps -f name=$CONTAINER_NAME

安装本地模型
docker exec ollama ollama pull qwen3:0.6b
docker exec ollama ollama pull bge-m3
docker exec ollama ollama list
在这里插入图片描述

界面配置使用

登录:默认是80端口,如果是nginx 反向代理,则需要配置转发并修改默认端口
增加nginx配置

server {listen 443 ssl;server_name testragflow.xx.cn;ssl_certificate     /app/nginx/conf/cert/testragflow.xx.cn.pem;ssl_certificate_key /app/nginx/conf/cert/testragflow.xx.cn.key;ssl_protocols TLSv1.2 TLSv1.3;access_log logs/ragflow-$host.log;location / {proxy_pass http://127.0.0.1:35001;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

比如:
http://192.168.78.132

修改默认端口:
vim docker-compose.yml
按需修改即可,一般的只需要修改 80和443为新的监听端口即可
在这里插入图片描述

先注册、再登录
在这里插入图片描述

在这里插入图片描述

模型配置

在这里插入图片描述

添加新的模型:
在这里插入图片描述

在这里插入图片描述

知识库

创建知识库
在这里插入图片描述
配置知识库
这里笔者使用的的是QA的方式
在这里插入图片描述
导入excel qa数据集
在这里插入图片描述
查看切片结果:
在这里插入图片描述

创建聊天

在这里插入图片描述
配置聊天
设置知识库 + 模型的参数,精度需要自己调整以达到自己想要的效果
在这里插入图片描述

配置提示词

## 角色
你是一位专业的问答客服,你的核心任务是准确回答用户关于知识库中内容的问题,确保信息的准确性和一致性。
当所有知识库内容都与问题无关时,你的回答必须包括“知识库中未找到您要的答案!”这句话。回答需要考虑聊天历史。以下是知识库:{knowledge}以上是知识库。
## 技能
1. 仔细理解用户提问的核心意图和关键点
2. 从【智能问答】知识库中检索最相关的信息
3. 组织信息形成清晰、直接的回答
4. 针对于中文输入的进行错别字更正
5. 回复格式优化,注意返回的回答要工整和条理清晰
6. 注意相似词和同意词的转化处理## 限制
1.  拒绝回答涉及敏感信息(违法违规内容、未公开财务数据等)的问题
2.  当知识库中信息不足以完整回答问题时,明确说明并提供已有的相关信息
3.  回复的内容不要有知识库或者在知识库中未查询到字样,如果未查询到,直接回复默认回复即可

测试聊天
在这里插入图片描述
查看检索过程:
在这里插入图片描述
在这里插入图片描述
因为本地的模型是0.6B,所以回复优化的不是很好 ,现在切到开源的 siliconflow
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Search 使用

在这里插入图片描述

智能体使用

暂时未深度使用,可以用拖拽的方式来自定义自己的智能体
在这里插入图片描述

使用对比

fastgpt,dify,ragflow,maxkb


FastGPT

  • 定位:国内开源 RAG 应用开发平台。

  • 特点

    • 专注于知识库问答(RAG)+ 工作流。
    • 内置模型调用(支持 OpenAI、国内模型 API),也可接入自有模型。
    • 知识库管理较完善,支持分片、召回策略优化。
    • 前端交互比较友好,适合快速做 Demo 或内部助手。
  • 适用场景:企业内知识库问答、FAQ 助手、客服场景。


Dify

  • 定位:国外开源 AI 应用开发平台(App Orchestration Platform)。

  • 特点

    • 更偏向“低代码应用编排”,支持 RAG、Agent、多模型组合。
    • 内置 Prompt 编排器、工作流可视化。
    • 商业化生态比较完整,有社区版和企业版。
    • 插件和扩展能力较强,适合对接外部 API。
  • 适用场景:需要构建多 Agent 应用、复杂对话流的 AI 产品。


RAGFlow

  • 定位:开源 RAG 框架,聚焦“检索增强生成”。

  • 特点

    • 强调“可解释性”,能展示知识匹配路径。
    • 支持文档解析、多模态(文本、表格、PDF 等)。
    • 提供了灵活的索引和召回策略。
    • 社区活跃度在国内逐步上升。
  • 适用场景:科研/企业知识库检索,要求“溯源解释”的 AI 应用。


MaxKB

  • 定位:开源知识库问答工具。

  • 特点

    • 轻量化,快速部署。
    • 核心功能集中在“知识库问答”,上手简单。
    • 功能相比 FastGPT/Dify 略少,但足够支撑基础 RAG。
  • 适用场景:中小团队想快速搭建 FAQ 问答机器人。


总结对比

项目定位优势劣势适用人群
FastGPTRAG 应用 + 工作流中文社区活跃、上手快、知识库功能好多 Agent/扩展性一般企业内部助手
DifyAI 应用编排平台Agent & Workflow 强大,生态完整偏重低代码,RAG 相对次要想做复杂 AI 应用的团队
RAGFlowRAG 框架检索解释性好,支持多模态偏底层,业务功能要自己搭研发/科研人员
MaxKB轻量知识库问答工具部署简单、学习成本低功能较少,扩展性有限中小团队

要是你准备在公司里用:

  • 快速搭建问答机器人 → 选 FastGPT 或 MaxKB
  • 做复杂 AI 产品(Agent/多流程) → 选 Dify
  • 做研发/追求可解释性/多模态 RAG → 选 RAGFlow

—全文完,有错误的地方还请指教–

http://www.dtcms.com/a/388891.html

相关文章:

  • # 从 Gymnasium 到 Minari:新一代机器人强化学习工具链全指南
  • 系统架构设计师备考第27天——基于构件的软件工程
  • Centos下安装docker
  • OpenAPI 规范:构建高效 RESTful API 指南
  • 基于 AForge.NET 的 C# 人脸识别
  • SQLite与ORM技术解析
  • vue动态时间轴:交互式播放与进度控制
  • Java I/O三剑客:BIO vs NIO vs AIO 终极对决
  • AI 在视频会议防诈骗方面的应用
  • nest.js集成服务端渲染(SSR)
  • AI如何“听懂人话”?从语音识别到语义理解的最后一公里
  • 鸿蒙:Preferences持久化实现方案
  • 常温超导新突破!NixCu-O7材料设计引领能源革命(续)
  • 常温超导新突破!NixCu-O7材料设计引领能源革命
  • C++,C#,Rust,Go,Java,Python,JavaScript的性能对比
  • 《从崩溃到精通:C++ 内存管理避坑指南,详解自定义类型 new/delete 调用构造 / 析构的关键逻辑》
  • 鸿蒙:父组件调用子组件的三种方案
  • AppTest邀请测试 -邀请用户
  • 从零开始的云计算生活——第六十五天,鹏程万里,虚拟化技术
  • Java 开发指南:将 PDF 转换为多种图片格式
  • 【C++革命】董翔箭头函数库(xiang_arrow):在main函数里定义函数的终极方案
  • Ubuntu显示No operation system found
  • 【深度学习新浪潮】音频大模型方面有哪些最新的研究进展?
  • 第3节 创建视频素材时间线到剪映(Coze扣子空间剪映小助手零基础教程)
  • Unifi AP 网络路由取消使用 无线 Meshing
  • 计算机网络基础(四) --- TCP/IP网络结构(网络层) (上)
  • AR巡检与区块链融合:工业智能化的新引擎
  • Product Hunt 每日热榜 | 2025-09-18
  • WPF 字符竖向排列的排版格式(直排)显示控件
  • 多色零件自动化分拣与追溯系统案例和项目落地全计划