1. 项目简介
项目名称: 智能报表分析助手(AI Data Insight)
主要功能:
- 用户输入自然语言问题(如:“10月的退款金额是多少?”)
- AI 自动生成 SQL 查询数据库
- 返回结果 + 图表可视化 + 自然语言分析说明
2. 系统架构
[Web前端(Vue/ECharts)]
↓
[Spring Boot后端API]
↔ 调用 →
[AI微服务(FastAPI + LangChain)]
↓
[MySQL/ClickHouse 数据源]
↓
[Redis 缓存]3. 模块设计
1. AI 微服务
- 接口:
/nl2sql,/analyze - 职责:自然语言转SQL、结果分析
2. Java 后端
- 接口:
/api/query,/api/history - 职责:调用AI服务、执行SQL、缓存结果
4. 技术选型
| 层级 | 技术栈 |
|---|---|
| 前端 | Vue3 + ECharts |
| 后端 | Spring Boot 3 + MyBatis + Redis |
| AI层 | Python + FastAPI + LangChain |
| 数据库 | MySQL + ClickHouse |
| 部署 | Docker Compose + Nginx |
5. 项目结构目录
ai-data-insight/
├── backend-java/
│ ├── src/main/java/com/ai/report/
│ └── resources/application.yml
├── ai-service/
│ ├── app.py
│ └── prompts/
│ └── nl2sql_prompt.txt
├── frontend/
│ └── src/views/ReportPage.vue
├── docker-compose.yml
└── README.md6. 接口设计
Python 微服务
/nl2sql
{ "question": "10月退款金额是多少?" }返回:
{ "sql": "SELECT SUM(refund_amount)...", "explain": "计算2025年10月退款总额" }/analyze
{ "data": [{"refund_amount": 18933.5}], "context": "10月退款金额" }返回:
{ "summary": "10月退款金额为18933.5元,较9月上升12%" }Java 后端 /api/query
{ "question": "10月退款金额是多少?" }返回:
{
"sql": "...",
"data": [{"refund_amount": 18933.5}],
"analysis": "10月退款金额为18933.5元",
"chartType": "bar"
}7. Prompt 模板
文件:prompts/nl2sql_prompt.txt
你是一个资深的数据分析师。
根据数据库结构生成SQL,输出JSON:{"sql":"...","explain":"..."}文件:prompts/analysis_prompt.txt
你是一个业务分析师。
根据数据生成中文分析报告。8. 数据库结构
CREATE TABLE orders (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT,
pay_time DATETIME,
order_status VARCHAR(20),
amount DECIMAL(10,2),
refund_amount DECIMAL(10,2)
);9. Docker Compose
version: '3.8'
services:
mysql:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: ai_report
ports: ["3306:3306"]
redis:
image: redis:7
ports: ["6379:6379"]
ai-service:
build: ./ai-service
ports: ["8000:8000"]
backend:
build: ./backend-java
ports: ["8080:8080"]10. 启动步骤
- 启动数据库
docker-compose up -d mysql - 启动 AI 服务
uvicorn app:app --port 8000 - 启动 Java 后端
mvn spring-boot:run - 启动前端
npm run dev - 访问 http://localhost:5173