1. 项目简介

项目名称: 智能报表分析助手(AI Data Insight)
主要功能:

2. 系统架构

[Web前端(Vue/ECharts)] 
        ↓
[Spring Boot后端API]
  ↔ 调用 →
[AI微服务(FastAPI + LangChain)]
        ↓
   [MySQL/ClickHouse 数据源]
        ↓
   [Redis 缓存]

3. 模块设计

1. AI 微服务

2. Java 后端

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.md

6. 接口设计

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. 启动步骤

  1. 启动数据库 docker-compose up -d mysql
  2. 启动 AI 服务 uvicorn app:app --port 8000
  3. 启动 Java 后端 mvn spring-boot:run
  4. 启动前端 npm run dev
  5. 访问 http://localhost:5173