From de0eda1b6ca1be2431e8a112c79791aaa7cad4d3 Mon Sep 17 00:00:00 2001
From: hrz <1710360675@qq.com>
Date: Tue, 11 Nov 2025 18:47:25 +0800
Subject: [PATCH] =?UTF-8?q?update:=E5=A2=9E=E5=8A=A0ragflow=E9=83=A8?=
=?UTF-8?q?=E7=BD=B2=E6=95=99=E7=A8=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 3 +-
README_en.md | 3 +-
docs/FAQ.md | 1 +
docs/ragflow-integration.md | 255 +++++++++++++++++++++
docs/voiceprint-integration.md | 2 +-
main/xiaozhi-server/docker-compose_all.yml | 2 +-
6 files changed, 262 insertions(+), 4 deletions(-)
create mode 100644 docs/ragflow-integration.md
diff --git a/README.md b/README.md
index fc41f2bd..bca5f9ee 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
本项目基于人机共生智能理论和技术研发智能终端软硬件体系
为开源智能硬件项目
xiaozhi-esp32提供后端服务
根据小智通信协议使用Python、Java、Vue实现
-支持MQTT+UDP协议、Websocket协议、MCP接入点、声纹识别
+支持MQTT+UDP协议、Websocket协议、MCP接入点、声纹识别、知识库
@@ -248,6 +248,7 @@ Websocket接口地址: wss://2662r3426b.vicp.fun/xiaozhi/v1/
| 视觉感知 | 支持多种VLLM(视觉大模型),实现多模态交互 |
| 意图识别 | 支持LLM意图识别、Function Call函数调用,提供插件化意图处理机制 |
| 记忆系统 | 支持本地短期记忆、mem0ai接口记忆,具备记忆总结功能 |
+| 知识库 | 支持RAGFlow知识库,让大模型判断需要调度知识库后再回答 |
| 工具调用 | 支持客户端IOT协议、客户MCP协议、服务端MCP协议、MCP接入点协议、自定义工具函数 |
| 指令下发 | 依托MQTT协议,支持从智控台将MCP指令下发到ESP32设备 |
| 管理后台 | 提供Web管理界面,支持用户管理、系统配置和设备管理;界面支持中文简体、中文繁体、英文显示 |
diff --git a/README_en.md b/README_en.md
index bc0ddea9..015f1054 100644
--- a/README_en.md
+++ b/README_en.md
@@ -6,7 +6,7 @@
This project is based on human-machine symbiotic intelligence theory and technology to develop intelligent terminal hardware and software systems
providing backend services for the open-source intelligent hardware project
xiaozhi-esp32
Implemented using Python, Java, and Vue according to the Xiaozhi Communication Protocol
-Supports MCP endpoints and voiceprint recognition
+Support for MQTT+UDP protocol, Websocket protocol, MCP access point, voiceprint recognition, and knowledge base
@@ -244,6 +244,7 @@ This project provides the following testing tools to help you verify the system
| Visual Perception | Supports multiple VLLM(vision large models), implements multimodal interaction |
| Intent Recognition | Supports LLM intent recognition, Function Call function calling, provides plugin-based intent processing mechanism |
| Memory System | Supports local short-term memory, mem0ai interface memory, with memory summarization functionality |
+| Knowledge Base | Supports RAGFlow knowledge base, enabling LLM to judge whether to schedule the knowledge base after receiving the user's question, and then answer the question |
| Command Delivery | Supports MCP command delivery to ESP32 devices via MQTT protocol from Smart Console |
| Tool Calling | Supports client IOT protocol, client MCP protocol, server MCP protocol, MCP endpoint protocol, custom tool functions |
| Management Backend | Provides Web management interface, supports user management, system configuration and device management; Supports Simplified Chinese, Traditional Chinese and English display |
diff --git a/docs/FAQ.md b/docs/FAQ.md
index 1e237921..83df8c2c 100644
--- a/docs/FAQ.md
+++ b/docs/FAQ.md
@@ -79,6 +79,7 @@ VAD:
6、[MCP方法如何获取设备信息](./mcp-get-device-info.md)
7、[如何开启声纹识别](./voiceprint-integration.md)
8、[新闻插件源配置指南](./newsnow_plugin_config.md)
+9、[知识库ragflow集成指南](./ragflow-integration.md)
### 11、语音克隆、本地语音部署相关教程
1、[如何在智控台克隆音色](./huoshan-streamTTS-voice-cloning.md)
diff --git a/docs/ragflow-integration.md b/docs/ragflow-integration.md
new file mode 100644
index 00000000..135c7de4
--- /dev/null
+++ b/docs/ragflow-integration.md
@@ -0,0 +1,255 @@
+# ragflow 集成指南
+
+本教程主要是是两部分
+
+- 一、如何部署ragflow
+- 二、如何在智控台配置ragflow接口
+
+如果您对ragflow很熟悉,且已经部署了ragflow,可直接跳过第一部分,直接进入第二部分。但是如果你希望有人指导你部署ragflow,让它能够和`xiaozhi-esp32-server`共同使用`mysql`、`redis`基础服务,以减少资源成本,你需要从第一部分开始。
+
+# 第一部分 如何部署ragflow
+## 第一步, 确认mysql、redis是否可用
+
+ragflow需要依赖`mysql`数据库。如果你之前已经部署`智控台`,说明你已经安装了`mysql`。你可以共用它。
+
+你可以你试一下在宿主机使用`telnet`命令,看看能不能正常访问`mysql`的`3306`端口。
+``` shell
+telnet 127.0.0.1 3306
+
+telnet 127.0.0.1 6379
+```
+如果能访问到`3306`端口和`6379`端口,请忽略以下的内容,直接进入第二步。
+
+如果不能访问,你需要回忆一下,你的`mysql`是怎么安装的。
+
+如果你的mysql是通过自己使用安装包安装的,说明你的`mysql`做了网络隔离。你可能先解决访问`mysql`的`3306`端口这个问题。
+
+如果你`mysql`是通过本项目的`docker-compose_all.yml`安装的。你需要找一下你当时创建数据库的`docker-compose_all.yml`文件,修改以下的内容
+
+修改前
+``` yaml
+ xiaozhi-esp32-server-db:
+ ...
+ networks:
+ - default
+ expose:
+ - "3306:3306"
+ xiaozhi-esp32-server-redis:
+ ...
+ expose:
+ - 6379
+```
+
+修改后
+``` yaml
+ xiaozhi-esp32-server-db:
+ ...
+ networks:
+ - default
+ ports:
+ - "3306:3306"
+ xiaozhi-esp32-server-redis:
+ ...
+ ports:
+ - "6379:6379"
+```
+
+注意是将`xiaozhi-esp32-server-db`和`xiaozhi-esp32-server-redis`下面的`expose`改成`ports`。改完后,需要重新启动。以下是重启mysql的命令:
+
+``` shell
+# 进入你docker-compose_all.yml所在的文件夹,例如我的是xiaozhi-server
+cd xiaozhi-server
+docker compose -f docker-compose_all.yml down
+docker compose -f docker-compose.yml up -d
+```
+
+启动完后,在宿主机再使用`telnet`命令,看看能不能正常访问`mysql`的`3306`端口。
+``` shell
+telnet 127.0.0.1 3306
+
+telnet 127.0.0.1 6379
+```
+正常来说这样就可以访问的了。
+
+## 第二步, 创建数据库和表
+如果你的宿主机,能正常访问mysql数据库,那就在mysql上创建一个名字为`rag_flow`的数据库和`rag_flow`用户,密码为`infini_rag_flow`。
+
+``` sql
+-- 创建数据库
+CREATE DATABASE IF NOT EXISTS rag_flow CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+-- 创建用户并授权
+CREATE USER IF NOT EXISTS 'rag_flow'@'%' IDENTIFIED BY 'infini_rag_flow';
+GRANT ALL PRIVILEGES ON rag_flow.* TO 'rag_flow'@'%';
+
+-- 刷新权限
+FLUSH PRIVILEGES;
+```
+
+## 第三步, 下载ragflow项目
+
+你需要在你电脑找一个文件夹,用来存放ragflow项目。例如我在`/home/system/xiaozhi`文件夹。
+
+你可以使用`git`命令,将ragflow项目下载到这个文件夹,本教程使用的是`2025年11月11日`提交的`dd5b8e2e1a877211d17aae5552d8895b1bca763d`版本进行安装部署。
+```
+git clone https://ghfast.top/https://github.com/infiniflow/ragflow.git
+cd ragflow
+git reset --hard dd5b8e2e1a877211d17aae5552d8895b1bca763d
+
+```
+下载完后,进入`docker`文件夹。
+``` shell
+cd docker
+```
+修改`ragflow/docker`文件夹下的`docker-compose.yml`文件,将`ragflow-cpu`和`ragflow-gpu`服务的`depends_on`配置去掉,用于解除`ragflow-cpu`服务对`mysql`的依赖。
+
+这是修改前:
+``` yaml
+ ragflow-cpu:
+ depends_on:
+ mysql:
+ condition: service_healthy
+ profiles:
+ - cpu
+ ...
+ ragflow-gpu:
+ depends_on:
+ mysql:
+ condition: service_healthy
+ profiles:
+ - gpu
+```
+这是修改后:
+``` yaml
+ ragflow-cpu:
+ profiles:
+ - cpu
+ ...
+ ragflow-gpu:
+ profiles:
+ - gpu
+```
+
+接着,修改`ragflow/docker`文件夹下的`docker-compose-base.yml`文件,去掉`mysql`和`redis`的配置。
+
+例如,删除前:
+``` yaml
+services:
+ minio:
+ image: quay.io/minio/minio:RELEASE.2025-06-13T11-33-47Z
+ ...
+ mysql:
+ image: mysql:8.0
+ ...
+ redis:
+ image: redis:6.2-alpine
+ ...
+```
+
+删除后
+``` yaml
+services:
+ minio:
+ image: quay.io/minio/minio:RELEASE.2025-06-13T11-33-47Z
+ ...
+```
+## 第四步,修改环境变量配置
+
+编辑`ragflow/docker`文件夹下的`.env`文件,找到以下配置,逐个搜索,逐个修改!逐个搜索,逐个修改!
+
+``` env
+# ragflow镜像
+RAGFLOW_IMAGE=infiniflow/ragflow@sha256:d9ff494d1bf72138ce6fe0eaf4962cf4bea471c8c266d12b8bfb9d10ac3a2f6e
+# 端口设置
+SVR_WEB_HTTP_PORT=8008 # HTTP端口
+SVR_WEB_HTTPS_PORT=8009 # HTTPS端口
+# MySQL配置 - 修改为您本地MySQL的信息
+MYSQL_HOST=host.docker.internal # 使用host.docker.internal让容器访问主机服务
+MYSQL_PORT=3306 # 本地MySQL端口
+MYSQL_USER=rag_flow # 上面创建的用户名,如果没有这项就增加这一项
+MYSQL_PASSWORD=infini_rag_flow # 上面设置的密码
+MYSQL_DBNAME=rag_flow # 数据库名称
+
+# Redis配置 - 修改为您本地Redis的信息
+REDIS_HOST=host.docker.internal # 使用host.docker.internal让容器访问主机服务
+REDIS_PORT=6379 # 本地Redis端口
+REDIS_PASSWORD= # 如果你的Redis没有设置密码,这里填写None,否则填写密码
+```
+
+注意,如果你的Redis没有设置密码,还要修改`ragflow/docker`文件夹下`service_conf.yaml.template`,将`infini_rag_flow`替换成空字符串。
+
+修改前
+``` shell
+redis:
+ db: 1
+ password: '${REDIS_PASSWORD:-infini_rag_flow}'
+ host: '${REDIS_HOST:-redis}:6379'
+```
+修改后
+``` shell
+redis:
+ db: 1
+ password: '${REDIS_PASSWORD:-}'
+ host: '${REDIS_HOST:-redis}:6379'
+```
+
+## 第五步,启动ragflow服务
+执行命令:
+``` shell
+docker-compose -f docker-compose.yml up -d
+```
+执行成功后,你可以使用`docker logs -n 20 -f docker-ragflow-cpu-1`命令,查看`docker-ragflow-cpu-1`服务的日志。
+
+如果日志中没有报错,说明ragflow服务启动成功。
+
+# 第五步,注册账号
+你可以在浏览器中访问`http://127.0.0.1:8008`,点击`Sign Up`,注册一个账号。
+
+注册成功后,你可以点击`Sign In`,登录到ragflow服务。如果你想关闭ragflow服务的注册服务,不想让其他人注册账号,你可以在`ragflow/docker`文件夹下的`.env`文件中,将`REGISTER_ENABLED`配置项设置为`0`。
+
+``` dotenv
+REGISTER_ENABLED=0
+```
+修改后,重启启动ragflow服务。
+``` shell
+docker-compose -f docker-compose.yml down
+docker-compose -f docker-compose.yml up -d
+```
+
+# 第二部分 配置ragflow服务
+
+# 第一步 登录ragflow服务
+你可以在浏览器中访问`http://127.0.0.1:8008`,点击`Sign In`,登录到ragflow服务。
+
+然后点击右上角的`头像`,进入设置页面。在左侧导航栏中,点击`API`功能,然后点击"API Key"按钮。出现一个弹框,
+
+在弹框中,点击"Create new Key"按钮,生成一个API Key。复制这个`API Key`,你稍后会用到。
+
+# 第二步 配置到智控台
+确保你的智控台版本是`0.8.7`或以上。使用超级管理员账号登录到智控台。在顶部导航栏中,点击`模型配置`,在左侧导航栏中,点击`知识库`。
+
+在列表中找到`RAG_RAGFlow`,点击`编辑`按钮。
+
+在`服务地址`中,填写`http://你的ragflow服务的局域网IP:8008`,例如我的ragflow服务的局域网IP是`192.168.1.100`,那么我就填写`http://192.168.1.100:8008`。
+
+在`API密钥`中,填写之前复制的`API Key`。
+
+最后点击保存按钮。
+
+# 第二步 创建一个知识库
+使用超级管理员账号登录到智控台。在顶部导航栏中,点击`知识库`,在列表左下脚,点击`新增`按钮。填写一个知识库的名字和描述。点击保存。
+
+为了提高大模型对知识库的理解和召回能力,建议在创建知识库时,填写一个有意义的名字和描述。例如,如果你要创建一个关于`公司介绍`的知识库,那么知识库的名字可以是`公司介绍`,描述可以是`关于公司的相关信息例如公司基本信息、服务项目、联系电话、地址等。`。
+
+保存后,你可以在知识库列表中看到这个知识库。点击刚才创建的知识库的`查看`按钮,进入知识库详情页面。
+
+在知识库详情页面中,左下角点击`新增`按钮,可以上传文档到知识库。
+
+上传后,你可以在知识库详情页面中,看到上传的文档。此时可以点击文档的`解析`按钮,解析文档。
+
+解析完成后,你可以查看解析后的切片信息。你可以在知识库详情页面中,点击`召回测试`按钮,可以测试知识库的召回/检索功能。
+
+# 第三步 让小智使用ragflow知识库
+登录到智控台。在顶部导航栏中,点击`智能体`,找到你要配置的智能体,点击`配置角色`按钮。
+
+在意图识别左侧,点击`编辑功能`按钮,弹出一个弹框。在弹框中选择你要添加的知识库。保存即可。
\ No newline at end of file
diff --git a/docs/voiceprint-integration.md b/docs/voiceprint-integration.md
index 9db1af0c..fbc12b1f 100644
--- a/docs/voiceprint-integration.md
+++ b/docs/voiceprint-integration.md
@@ -28,7 +28,7 @@ telnet 127.0.0.1 3306
如果不能访问,你需要回忆一下,你的`mysql`是怎么安装的。
-如果你的mysql是通过自己使用安装包安装的,说明你的`mysql`做了网络隔离。你可能先解访问`mysql`的`3306`端口这个问题。
+如果你的mysql是通过自己使用安装包安装的,说明你的`mysql`做了网络隔离。你可能先解决访问`mysql`的`3306`端口这个问题。
如果你`mysql`是通过本项目的`docker-compose_all.yml`安装的。你需要找一下你当时创建数据库的`docker-compose_all.yml`文件,修改以下的内容
diff --git a/main/xiaozhi-server/docker-compose_all.yml b/main/xiaozhi-server/docker-compose_all.yml
index b3602d45..327676e1 100644
--- a/main/xiaozhi-server/docker-compose_all.yml
+++ b/main/xiaozhi-server/docker-compose_all.yml
@@ -76,7 +76,7 @@ services:
- MYSQL_INITDB_ARGS="--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci"
# redis模块
xiaozhi-esp32-server-redis:
- image: redis
+ image: redis:8.0
expose:
- 6379
container_name: xiaozhi-esp32-server-redis