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