Spring AI 2 ERP RAG 智能助手,支持 Tool Calling、PgVector 和多模型对话。
1.6K
基于 Spring Boot 4 和 Spring AI 2 构建的 ERP RAG 智能助手示例。
项目集成 Spring AI Tool Calling 和 RAG,支持实时 ERP 业务数据查询、产品手册知识检索、流式对话、会话记忆、多租户隔离和 Token 用量统计。
在 Tool Calling 查询到结构化业务数据后,系统可以自动生成相应的业务图表,并与文字回答一起返回前端展示。

推荐使用最新版本:
docker pull ly753/spring-ai-rag-demo:latest
| 层级 | 技术 |
|---|---|
| 运行环境 | Java 17 |
| 应用框架 | Spring Boot 4.0.7 |
| AI 框架 | Spring AI 2.0.0 |
| 对话模型 | DeepSeek / 通义千问 / Google Gemini |
| 向量数据库 | PostgreSQL 16 + PgVector |
| ERP 业务数据库 | MySQL 8 |
| 数据访问 | Spring JDBC + MyBatis-Plus |
| 前端 | HTML / CSS / JavaScript |
| 图表引擎 | Apache ECharts |
| 流式传输 | SSE |
完整环境包含以下三个容器:
rag-demo:Spring Boot 应用,包含前端页面pgvector:向量数据库mysql-erp:ERP 业务数据、会话记录和用量数据访问 DeepSeek API Keys,登录后创建一个 API Key。
请妥善保存 API Key,不要把它提交到 Git 仓库,也不要直接写入 docker-compose.yml。
.env在准备运行项目的目录中新建 .env 文件:
# 替换成刚刚创建的 DeepSeek API Key
DEEPSEEK_API_KEY=sk-your-real-deepseek-api-key
# 自行设置一个强数据库密码,建议使用至少 16 位随机字符
DB_PASSWORD=replace-with-a-strong-database-password
.env包含敏感信息,请勿上传到 GitHub 或分享给其他人。
docker-compose.yml在同一目录中新建 docker-compose.yml:
name: spring-ai-rag-demo
services:
app:
image: ly753/spring-ai-rag-demo:latest
container_name: rag-demo
ports:
- "8080:8080"
environment:
SPRING_DATASOURCE_PGVECTOR_URL: jdbc:postgresql://pgvector:5432/rag_demo
SPRING_DATASOURCE_PGVECTOR_USERNAME: postgres
SPRING_DATASOURCE_PGVECTOR_PASSWORD: ${DB_PASSWORD:?请在 .env 中设置 DB_PASSWORD}
SPRING_DATASOURCE_ERP_URL: jdbc:mysql://mysql:3306/erp?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8&allowPublicKeyRetrieval=true
SPRING_DATASOURCE_ERP_USERNAME: root
SPRING_DATASOURCE_ERP_PASSWORD: ${DB_PASSWORD:?请在 .env 中设置 DB_PASSWORD}
DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:?请在 .env 中设置 DEEPSEEK_API_KEY}
depends_on:
pgvector:
condition: service_healthy
mysql:
condition: service_healthy
restart: unless-stopped
pgvector:
image: pgvector/pgvector:pg16
container_name: pgvector
environment:
POSTGRES_DB: rag_demo
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${DB_PASSWORD:?请在 .env 中设置 DB_PASSWORD}
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d rag_demo"]
interval: 5s
timeout: 5s
retries: 20
restart: unless-stopped
mysql:
image: mysql:8.0
container_name: mysql-erp
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:?请在 .env 中设置 DB_PASSWORD}
MYSQL_DATABASE: erp
MYSQL_CHARSET: utf8mb4
volumes:
- mysqldata:/var/lib/mysql
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$${MYSQL_ROOT_PASSWORD} --silent"]
interval: 5s
timeout: 5s
retries: 30
restart: unless-stopped
volumes:
pgdata:
mysqldata:
确保 Docker Desktop 已启动,然后在 docker-compose.yml 所在目录执行:
docker compose up -d
首次启动需要下载镜像并初始化数据库,请等待容器健康检查完成:
docker compose ps
启动完成后访问:
http://localhost:8080
查看容器状态:
docker compose ps
查看应用日志:
docker compose logs -f app
停止服务并保留数据:
docker compose stop
重新启动:
docker compose start
删除容器但保留数据库数据卷:
docker compose down
docker compose down -v会同时删除 MySQL 和 PgVector 数据,请谨慎使用。
ent_code 的多租户隔离当 Spring AI Tool Calling 查询到结构化 ERP 业务数据时,系统会在正常生成文字回答的同时尝试生成图表。
图表生成遵循以下规则:
当前支持以下 23 种图表:
| 序号 | 图表类型 | 适用场景 |
|---|---|---|
| 1 | 环形图 | 状态、类别占比 |
| 2 | 旭日图 | 多层级分类数据 |
| 3 | 条形图 | 分类数据对比 |
| 4 | 瀑布图 | 数值增减及累计变化 |
| 5 | 子弹图 | 实际值、目标值和范围对比 |
| 6 | 面积图 | 连续时间趋势及累计变化 |
| 7 | 阶梯图 | 阶段性、离散时间变化 |
| 8 | 雷达图 | 多指标能力对比 |
| 9 | 散点图 | 两个指标之间的关系 |
| 10 | 气泡图 | 三个指标之间的关系 |
| 11 | 直方图 | 连续数值的频率分布 |
| 12 | 箱线图 | 分组数据分布及异常值 |
| 13 | 热力图 | 双维度数据密度和强度 |
| 14 | 桑基图 | 节点之间的流向与数量 |
| 15 | 矩形树图 | 层级数据及占比 |
| 16 | 甘特图 | 生产计划及任务排期 |
| 17 | 漏斗图 | 阶段转化和流程分布 |
| 18 | 词云图 | 关键词及类别频次 |
| 19 | 仪表盘图 | 单项指标及目标进度 |
| 20 | 水位图 | 单项指标占比或完成度 |
| 21 | 平行坐标图 | 多维指标综合对比 |
| 22 | 折线图 | 时间序列变化趋势 |
| 23 | 饼图 | 分类数据占比 |






启动项目后,可以在“智能”或“数据查询”模式中输入以下问题:
查询2026年3月1日至3月31日的售后工单,按处理状态统计工单数量,并使用环形图展示各状态占比。
查询2026年3月1日至3月31日的销售订单,按产品汇总销售数量,并使用条形图展示各产品销量。
查询委外订单OO20260301的来料、回货和退料记录,按产品展示数量变化,并使用瀑布图展示。
查询采购订单PO20260302的收货情况,使用子弹图对比温度传感器NTC10K的订购数量和已收数量。
查询2026年3月1日至3月31日的销售订单,按订单日期展示销售金额变化,并使用面积图展示销售金额趋势。
查询2026年3月1日至3月31日的出入库记录,按日期展示出入库数量变化,并使用阶梯图展示。
查询2026年3月1日至3月31日开始的生产工单,使用甘特图展示各产品生产工单的计划开始日期和计划结束日期。
系统支持上传 PDF、Word、Excel 和 TXT 文档,并将内容切分后写入 PgVector 向量数据库。
知识问答模式会优先检索已导入的知识库内容,并基于检索结果回答问题。
主要能力包括:
500MB550MBDocker Compose 会创建以下数据卷:
spring-ai-rag-demo_pgdataspring-ai-rag-demo_mysqldata停止或重新创建容器不会删除这些数据卷。
GitHub:
https://github.com/ly1836/spring-ai-rag-demo
docker-compose.yml.env 文件提交到 Git 仓库8080,数据库仅供 Compose 内部网络访问Content type
Image
Digest
sha256:aa8c1c0bd…
Size
445.6 MB
Last updated
10 days ago
docker pull ly753/spring-ai-rag-demo