[AI知识库/向量] 基于RAGFlow知识库引擎构建企业级AI客服/助手(暨:RAGFlow 安装部署与使用指南)

0 序

  • 核心结论:可以直接基于RAGFlow + LLM + 重排序模型构建企业级AI客服、智能助手、Bot助手,也可将 RAGFlow 集成到各类 AI Agent / Workflow 应用程序(如:Dify、LangChain、Spring AI等)中,做进一步的增强。

欢迎评论、交流。

  • 核心结论基于RAGFlow知识库引擎的私有化方案的适用群体:企业
  • 整套方案需要有一定的技术背景方可驾驭、运维(对非技术人员,相对吃力)
  • 且RAGFlow对硬件资源的要求相对较大(最低规格:4Core、16GB、50GB Disk)。故: 不适用于【个人知识库】场景,仅适用于【企业级知识库】。
  • 如果无力、无心自己部署,也可使用 RAGFlow 官方部署的云服务体验一下:

https://cloud.ragflow.io/ (弊端:只能在GUI体验,但无法调用API)

  • RAGFlow 最精彩的功能特性,可直接阅读本篇第1章:主流程体验

本篇侧重于实操、动手,对于IT技术人员相对友好。
无力操作的非技术人员,也没关系,了解其构建过程,对于了解了解基于知识库的企业级AI客服的技术方案也有裨益。

  • 对 RAGFlow 是什么,不了解的,可以参见:

1 RAGFlow 主流程体验篇

Step1 安装 Docker / Docker Compose 环境,并启动

  • 推荐文档

安装本篇的步骤操作即可。

  • 环境信息(本章节的实验)
  • Windows 8
  • CPU Arch: X86/AMD64
  • Docker Desktop Backend : WSL 2
  • 查验版本 : docker / docker compose
$ docker version
Client:
 Version:           29.7.2
 API version:       1.55
 Go version:        go1.26.5
 Git commit:        a7dcaa6
 Built:             Wed Aug  5 18:31:33 2026
 OS/Arch:           windows/amd64
 Context:           desktop-linux

Server: Docker Desktop 4.87.0 (236836)
 Engine:
  Version:          29.7.2
  API version:      1.55 (minimum version 1.40)
  Go version:       go1.26.5
  Git commit:       6a43e3d
  Built:            Wed Aug  5 18:28:36 2026
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v2.2.5
  GitCommit:        e53c7c1516c3b2bff98eb76f1f4117477e6f4e66
 runc:
  Version:          1.3.6
  GitCommit:        v1.3.6-0-g491b69ba
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

$ docker compose version
Docker Compose version v5.4.0

Step2 下载 RAGFlow 项目源码

git clone -b v0.27.0 https://github.com/infiniflow/ragflow.git

Step3 拉取镜像,并启动

  • 切到目标Git分支、目标目录下
$ cd ragflow
$ git checkout v0.27.0
$ ls -l
total 4736
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 admin/
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 agent/
-rw-r--r-- 1 xxxUser 197121   8755      20 19:38 AGENTS.md
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 api/
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 bin/
-rwxr-xr-x 1 xxxUser 197121  23812      20 19:38 build.sh*
-rw-r--r-- 1 xxxUser 197121      9      20 19:38 CLAUDE.md
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 cmd/
-rw-r--r-- 1 xxxUser 197121     54      20 19:38 codecov.yml
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 common/
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 conf/
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 deepdoc/
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 docker/
-rw-r--r-- 1 xxxUser 197121   4890      20 19:38 Dockerfile
-rw-r--r-- 1 xxxUser 197121   1969      20 19:38 Dockerfile.scratch.oc9
-rw-r--r-- 1 xxxUser 197121   9699      20 19:38 Dockerfile_base
-rw-r--r-- 1 xxxUser 197121   2812      20 19:38 Dockerfile_deepdoc_oss
-rw-r--r-- 1 xxxUser 197121    999      20 19:38 Dockerfile_tei
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 docs/
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 example/
-rw-r--r-- 1 xxxUser 197121  11819      20 19:38 go.mod
-rw-r--r-- 1 xxxUser 197121  76853      20 19:38 go.sum
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 helm/
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 internal/
-rw-r--r-- 1 xxxUser 197121   4553      20 19:38 lefthook.yml
-rw-r--r-- 1 xxxUser 197121  11558      20 19:38 LICENSE
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 mcp/
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 memory/
-rw-r--r-- 1 xxxUser 197121  15063      20 19:38 pyproject.toml
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 rag/
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 ragflow_deps/
-rw-r--r-- 1 xxxUser 197121  18108      20 19:38 README.md
-rw-r--r-- 1 xxxUser 197121  21377      20 19:38 README_ar.md
-rw-r--r-- 1 xxxUser 197121  19477      20 19:38 README_fr.md
-rw-r--r-- 1 xxxUser 197121  16760      20 19:38 README_id.md
-rw-r--r-- 1 xxxUser 197121  20076      20 19:38 README_ja.md
-rw-r--r-- 1 xxxUser 197121  18682      20 19:38 README_ko.md
-rw-r--r-- 1 xxxUser 197121  19089      20 19:38 README_pt_br.md
-rw-r--r-- 1 xxxUser 197121  20773      20 19:38 README_ru.md
-rw-r--r-- 1 xxxUser 197121  19356      20 19:38 README_tr.md
-rw-r--r-- 1 xxxUser 197121  18373      20 19:38 README_tzh.md
-rw-r--r-- 1 xxxUser 197121  18367      20 19:38 README_zh.md
-rwxr-xr-x 1 xxxUser 197121    776      20 19:38 run_go_tests.sh*
-rwxr-xr-x 1 xxxUser 197121  12443      20 19:38 run_tests.py*
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 sdk/
-rw-r--r-- 1 xxxUser 197121   2022      20 19:38 SECURITY.md
-rwxr-xr-x 1 xxxUser 197121   1824      20 19:38 show_env.sh*
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 test/
-rw-r--r-- 1 xxxUser 197121    265      20 19:38 test.py
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 tools/
-rw-r--r-- 1 xxxUser 197121 886039      20 19:38 uv.lock
drwxr-xr-x 1 xxxUser 197121      0      20 19:38 web/

$ cd docker
$ ls -la
total 1920
drwxr-xr-x 1 xxxUser 197121     0      20 19:38 ./
drwxr-xr-x 1 xxxUser 197121     0      20 19:37 ../
-rw-r--r-- 1 xxxUser 197121 15682      20 19:38 .env
-rw-r--r-- 1 xxxUser 197121  3833      20 19:38 .env.single-bucket-example
-rw-r--r-- 1 xxxUser 197121  6290      20 19:38 docker-compose.yml
-rw-r--r-- 1 xxxUser 197121 11898      20 19:38 docker-compose-base.yml
-rw-r--r-- 1 xxxUser 197121  2112      20 19:38 docker-compose-CN-oc9.yml
-rw-r--r-- 1 xxxUser 197121  1647      20 19:38 docker-compose-macos.yml
-rwxr-xr-x 1 xxxUser 197121 12135      20 19:38 entrypoint.sh*
-rw-r--r-- 1 xxxUser 197121  1669      20 19:38 infinity_conf.toml
-rw-r--r-- 1 xxxUser 197121    54      20 19:38 init.sql
-rw-r--r-- 1 xxxUser 197121    40      20 19:38 init-clickhouse.sql
-rwxr-xr-x 1 xxxUser 197121  8698      20 19:38 launch_backend_service.sh*
-rwxr-xr-x 1 xxxUser 197121 11424      20 19:38 migration.sh*
drwxr-xr-x 1 xxxUser 197121     0      20 19:38 nginx/
drwxr-xr-x 1 xxxUser 197121     0      20 19:38 oceanbase/
-rwxr-xr-x 1 xxxUser 197121  3066      20 19:38 oceanbase-entrypoint.sh*
drwxr-xr-x 1 xxxUser 197121     0      20 20:11 ragflow-logs/
-rw-r--r-- 1 xxxUser 197121 15948      20 19:38 README.md
-rw-r--r-- 1 xxxUser 197121  7648      20 19:38 service_conf.yaml.template
  • 拉取镜像,并启动
$ docker compose -f docker-compose.yml up -d

启动成功后,可查验状态:

$ docker images
IMAGE                                     ID             DISK USAGE   CONTENT SIZE   EXTRA
elasticsearch:8.11.3                      58a3a280935d        2.1GB          676MB   U
infiniflow/ragflow:v0.27.0                860da0b6a63a       11.9GB         3.43GB   U
mysql:8.0.40                              d58ac93387f6        826MB          186MB   U
pgsty/silo:RELEASE.2026-08-06T00-00-00Z   29a498b24669        216MB         54.6MB   U
valkey/valkey:8                           f0ba22526631        163MB           43MB   U

image

$ docker compose ps
NAME                   IMAGE                                     COMMAND                   SERVICE       CREATED          STATUS                    PORTS
docker-es01-1          elasticsearch:8.11.3                      "/bin/tini -- /usr/l鈥▒"   es01          17 minutes ago   Up 17 minutes (healthy)   0.0.0.0:1200->9200/tcp, [::]:1200->9200/tcp
docker-minio-1         pgsty/silo:RELEASE.2026-08-06T00-00-00Z   "/usr/bin/docker-ent鈥▒"   minio         17 minutes ago   Up 17 minutes (healthy)   0.0.0.0:9000-9001->9000-9001/tcp, [::]:9000-9001->9000-9001/tcp
docker-mysql-1         mysql:8.0.40                              "docker-entrypoint.s鈥▒"   mysql         17 minutes ago   Up 17 minutes (healthy)   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp
docker-ragflow-cpu-1   infiniflow/ragflow:v0.27.0                "./entrypoint.sh --e鈥▒"   ragflow-cpu   17 minutes ago   Up 16 minutes             0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 0.0.0.0:9380-9384->9380-9384/tcp, [::]:9380-9384->9380-9384/tcp
docker-redis-1         valkey/valkey:8                           "docker-entrypoint.s鈥▒"   redis         17 minutes ago   Up 17 minutes (healthy)   0.0.0.0:6379->6379/tcp, [::]:6379->6379/tcp


$ docker ps
CONTAINER ID   IMAGE                                     COMMAND                   CREATED          STATUS                    PORTS                                                                                                                                           NAMES
3cfb833c377f   infiniflow/ragflow:v0.27.0                "./entrypoint.sh --e鈥▒"   17 minutes ago   Up 16 minutes             0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 0.0.0.0:9380-9384->9380-9384/tcp, [::]:9380-9384->9380-9384/tcp   docker-ragflow-cpu-1
451f9f6ce52f   mysql:8.0.40                              "docker-entrypoint.s鈥▒"   17 minutes ago   Up 17 minutes (healthy)   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp                                                                                                     docker-mysql-1
75cb22e02f94   pgsty/silo:RELEASE.2026-08-06T00-00-00Z   "/usr/bin/docker-ent鈥▒"   17 minutes ago   Up 17 minutes (healthy)   0.0.0.0:9000-9001->9000-9001/tcp, [::]:9000-9001->9000-9001/tcp                                                                                 docker-minio-1
76ab741e73e9   elasticsearch:8.11.3                      "/bin/tini -- /usr/l鈥▒"   17 minutes ago   Up 17 minutes (healthy)   0.0.0.0:1200->9200/tcp, [::]:1200->9200/tcp                                                                                                     docker-es01-1
ef303303d2a6   valkey/valkey:8                           "docker-entrypoint.s鈥▒"   17 minutes ago   Up 17 minutes (healthy)   0.0.0.0:6379->6379/tcp, [::]:6379->6379/tcp          

image

Step4 访问 RAGFlow,并注册使用

image

Step5 验证与使用

CASE 检索效果验证

  • 改用 Q & A 解析模板 + 调整个别参数(向量检索的权重:0.7,启用跨语言检索:英文+中文)后:

image

CASE Python应用调用RAGFlow

from ragflow_sdk import RAGFlow

# step0 安装依赖: pip install ragflow-sdk -i https://mirrors.aliyun.com/pypi/simple/

# step1 RAGFlow客户端的初始化 | api_key 和 base_url 是必填项,所有请求都会自动带上 Authorization: Bearer <api_key> 头
rag = RAGFlow(
    api_key="ragflow-xxxxxxxxxxxxxxxxxxx",   # 在 RAGFlow Web UI → 头像 → API 里创建
    base_url="https://cloud.ragflow.io"      # http://<你的RAGFlow地址>:9380,默认端口 9380,docker 部署若映射 80 就写 80
)

# step2 检索已有数据集里的 chunks | 假设在 Web UI 里已经建好了知识库(dataset)并上传文档、解析完成,现在开始检索
# step2.1 拿到目标数据集对象
dataset = rag.get_dataset(name="bigdata-develop-knowledge-dataset")    # 或用 id 获取:rag.get_dataset(id="xxx")

# step2.2 直接检索
chunks = rag.retrieval(
    question="HDFS 的组件?",
    datasets=[dataset],
    offset=0,
    limit=6,                          # 返回几条 chunk
    similarity_threshold=0.2,         # 相似度门槛,低于此分丢弃
    vector_similarity_weight=0.7,     # 向量余弦权重,1-weight 是关键词 BM25 权重
    top_k=1024                        # 参与向量计算的候选 chunk 数
)

for c in chunks:
    print(f"得分: {c.similarity} | 内容: {c.content}")
    print(f"来源: {c.source}")

CASE 基于知识库的对话助手(企业AI智能问答客服、...)

  • 创建的对话助手,其内部需要配置:
  • System Prompt
  • LLM模型、重排序模型
  • 混合检索的配置参数:向量检索的相似度阈值、权重、...
  • ...

image

CASE 基于 RAGFlow 及其原生的 QQBot Chat Channel + QQ 实现【在线问答助手】

总体思路

  • 基于 RAGFlow 原生 (QQ Bot)Chat Channel 直连方案 (候选方案:QQBot 桥接 RAGFlow HTTP API(自定义编排))

这是官方支持的方式,RAGFlow 内置 QQ Bot 频道,只需在 User Settings → Chat channels 中创建 QQ Bot 频道并填入 AppID + ClientSecret,再绑定到一个 Chat 即可。
RAGFlow 目前还支持的 Chat Channel 还有:

flowchart TB subgraph UserSide["用户侧"] U["QQ 用户<br/>(私聊 / 群聊 / 频道)"] end subgraph Tencent["腾讯开放平台"] QQBot["QQ Bot 开放平台<br/>AppID + AppSecret 鉴权"] end subgraph RAGFlow["RAGFlow 服务"] Channel["Chat Channel 模块<br/>QQ Bot 频道接入与消息转发"] Chat["Chat 助手<br/>(绑定知识库 + LLM)"] Retriever["检索与重排<br/>Vector + BM25 + Rerank"] KB[("知识库 Dataset<br/>MinIO / ES / Infinity")] LLM["大模型推理<br/>Generative Answer + Citation"] end U -->|发送消息| QQBot QQBot -->|WebSocket / 回调推送| Channel Channel -->|转发用户 query| Chat Chat -->|召回相关片段| Retriever Retriever -->|向量 + 关键词检索| KB KB -->|候选 chunks| Retriever Retriever -->|重排后 top-k| Chat Chat -->|拼装 prompt + 引用| LLM LLM -->|流式回答 + 溯源| Chat Chat -->|回复文本| Channel Channel -->|原路回传| QQBot QQBot -->|消息送达| U style Channel fill:#e1f5ff style Chat fill:#fff4e1 style KB fill:#ffe1f0
  • 关键协作点:
  • QQ Bot 频道只做消息搬运,不承载 RAG 逻辑
  • 回答质量、知识范围、模型能力完全由 RAGFlow 侧绑定的 Chat 决定
  • 频道启用但未绑定 Chat 时,RAGFlow 能收消息但不会回复

Step1 QQ开放平台: 申请/创建 QQBot

  • QQ开放平台: 可通过邮箱、或登录QQ号来申请/创建 QQBot

image
image

https://q.qq.com/#/apps

  • 创建 QQBot成功后,即可获取其 AppId / Secret 信息。

image

image

Step2 RAGFlow: 创建 Dataset => 创建 Chat Assistant(对话助手)

  • 参见本文档本章节 : CASE 创建对话助手

Step3 RAGFlow: 配置 QQBot 的连接信息 => 绑定关联的 Chat Assistant

image

Step4 QQ App: 体验 RAGFlow 的智能对话

image

CASE 基于Dataset构建专属的智能搜索应用(Search)

  • 创建 Search 实例,并简单配置、使用

image

  • Search 列表

image

  • 做一定的调优后:

image

CASE 存储【记忆】

尚未深度体验。

image

CASE 上传和管理【文件】

尚未深度体验。

image

image

CASE 创建Agent(未深度体验)

尚未深度体验,还有点懵。
可参见官方文档: https://ragflow.com.cn/docs/category/components

image

StepEnd 停止运行

docker compose down

2 RAGFlow 功能操作篇

基础设置操作

配置模型

  • 配置模型

http://127.0.0.1/user-setting/model
https://cloud.siliconflow.cn 笔者选择的【硅基流动】

image

配置默认模型(LLM模型、嵌入模型、重排序模型、...)

  • 创建 Dataset 前即要求设置默认的词嵌入模型等模型。

image

配置数据源

image

配置 Chat Channel

image

配置 MCP

image

生成并获取 API Key

image

  • api key : 用于的AI应用程序(Dify、LangChain等智能应用)在集成 RAGFlow 时需要基于此密钥做身份认证。

例如: ragflow-3UjnQOYxxxxxxxxxxfMRxxxxK-Imz_3Vxxxxxxxxx-E

  • api url: http(s)://<你的RAGFlow地址>:80,docker 部署若映射 80 就写 80

例如: https://cloud.ragflow.io

Dataset/知识库 管理

创建 Dataset(指定嵌入模型、构建方式、构建模板)

  • 可选的构建模板: General / Q&A / Manual / Table / Paper / Book / Laws / Presentation / One / Tag

image

image

创建/上传 文件(夹) 到 Dataset,完成文档解析

image

image

  • 支持对指定文件添加【元数据】

image

image

设置Dataset参数

image

检索效果验证

  • 改用 Q & A 解析模板 + 调整个别参数(向量检索的权重:0.7,启用跨语言检索:英文+中文)后:

image

查看Dataset的运行日志

image

Chat 模块

基于Dataset的聊天

image

Z FAQ for RAGFlow 部署与使用

Q: RAGFlow 官方云服务(ragflow.io 托管版)的套餐权限?

  • 详情参见官网:
套餐 价格 Apps 存储 每月 Credits API Key
Free $0 5 0.1 GB 500 ❌ 不开放
Starter $29/mo | 促销期,之后 | $59/mo 50 5 GB 5,000 ✅ 开放
Pro $129/mo | 促销期,之后 $259/mo 无限 50 GB 20,000 ✅ 开放
Enterprise 定制 定制 BYOC/私有部署 定制 ✅开放
  • 如果是 Free 用户,调用RAGFlow 官方云服务API时会报错:

免费账户只能在 Web UI 里点着用,不能通过 HTTP/Python/MCP 接口程序化调用 。

{'code': 403, 'data': None, 'message': 'You need to upgrade to a Starter or Pro plan to use an API key.'}

Y 推荐文献

X 参考文献

posted @ 2026-08-20 20:48  数据知音  阅读(23)  评论(0)    收藏  举报