先看我弄好的效果 

我的数据库表 三个表  一个用户 一个角色表 一个用户角色关联表

输入:统计本月各种角色注册数量

它最终给的网站地址 打开的效果:

它生成的sql 

SELECT r.role_id, r.role_name, COUNT(DISTINCT ur.user_id) AS count FROM sys_role r LEFT JOIN sys_user_role ur ON r.role_id = ur.role_id LEFT JOIN sys_user u ON ur.user_id = u.user_id WHERE u.create_time >= DATE_FORMAT(CURDATE(), '%Y-%m-01') AND u.create_time < DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01') AND u.del_flag = '0' AND r.status = '0' GROUP BY r.role_id, r.role_name ORDER BY r.role_sort;

然后自动调用API执行的结果

最后自动根据 json   SQL 执行结果: [
  { ROLE_NAME: '超级管理员', REGISTER_COUNT: 1 },
  { ROLE_NAME: '普通客户', REGISTER_COUNT: 3 }
]生成网站如图  

附带表格效果

所需要准备

1.本地搭建dify 

2.ollama 拉取 deepseek -R1至少14B以上版本体验才够好

3.准备两个api  (我是让AI直接给我生成的nodejs服务端)一个用于执行AI生成的sql  执行后返回json结果  一个用于将AI生成的html代码生成html文件生成网站

流程大致说明:

使用dify创建工作流

1.开始: 准备两个变量  你的描述 和你要生成的类型 表格代码 还是生成统计图

2.将mysql表结构给到deepseek 加入你的描述

3.提取ds生成的sql文件 拿到后请求API执行 

4.接下来创建条件判断 是否查到数据 查到继续调用ds 将内容生成html代码

这次 你选择的类型就有用了 

提取html代码 将特殊符号转换

调用API生成网站

输出结果

两个API如下: app.js用于执行AI生成的sql 然后返回json结果

//数据库配置文件
module.exports  = {
  host: 'localhost',
  user: 'root',
  password: 'root',
  database: 'ry-vue',
  port: 3306,
  dialect: 'mysql'
};
// app.js  
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const mysql = require('mysql2/promise'); // 使用Promise接口 
const dbConfig = require('./config/db');

const app = express();
app.use(bodyParser.json());
app.use(cors());

// 配置MySQL连接池(推荐)
const pool = mysql.createPool({
  host: dbConfig.host,
  port: dbConfig.port,
  user: dbConfig.user,
  password: dbConfig.password,
  database: dbConfig.database,
  waitForConnections: true,
  connectionLimit: 10,
  queueLimit: 0,
  ssl: { rejectUnauthorized: false } // MySQL 8.0可能需要SSL配置 
});

// API端点 
const allowedSQLOperations = ['SELECT', 'SHOW']; // 仅允许查询操作 
app.post('/execute-sql', async (req, res) => {
  try {
    //const { sql } = req.body; 
    const sql = req.body.sql.trim().toUpperCase();
    const token = req.body.token;

    // 基础token校验(生产环境需加强)
    if (!token || typeof token !== 'string') {
      return res.status(400).json({ error: 'Invalid token statement' });
    }

    // 基础SQL校验(生产环境需加强)
    if (!sql || typeof sql !== 'string') {
      return res.status(400).json({ error: 'Invalid SQL statement' });
    }
    if (!allowedSQLOperations.some(op => sql.startsWith(op))) {
      return res.status(403).json({ error: 'Operation not allowed' });
    }

    const connection = await pool.getConnection();
    try {
      console.log('执行的SQL:', sql);
      const [results] = await connection.query(sql);
      console.log('SQL 执行结果:', results);
      res.json({
        success: true,
        data: results,
        meta: {
          affectedRows: results.affectedRows,
          insertId: results.insertId
        }
      });
    } finally {
      connection.release();  // 释放连接回连接池 
    }
  } catch (error) {
    console.error('SQL  Error:', error);
    res.status(500).json({
      success: false,
      error: {
        code: error.code,
        message: error.sqlMessage || error.message
      }
    });
  }
});

// 启动服务 
const PORT = 3000;
app.listen(PORT, () => {
  console.log(`API 服务已启动:http://localhost:${PORT}`);
});

//用于将生成的html代码生成html文件生成访问地址
const express = require('express'); 
const fs = require('fs'); 
const path = require('path'); 
const app = express(); 
const port = 3001; 
 
// 解析 JSON 格式的请求体 
app.use(express.json());  
 
// 处理 POST 请求 
app.post('/create-html',  (req, res) => { 
    // 从请求体中获取 HTML 代码 
    var htmlCode = req.body.html;  
     htmlCode = htmlCode.replace(/#XP#/g,  '"'); 
 
    if (!htmlCode) { 
        return res.status(400).send(' 请提供有效的 HTML 代码'); 
    } 
 
    // 生成一个唯一的文件名 
    const fileName = `generated-${Date.now()}.html`;  
    const filePath = path.join(__dirname,  'html-files', fileName); 
 
    // 创建保存 HTML 文件的目录(如果不存在) 
    const dir = path.dirname(filePath);  
    if (!fs.existsSync(dir))  { 
        fs.mkdirSync(dir,  { recursive: true }); 
    } 
 
    // 将 HTML 代码写入文件 
    fs.writeFile(filePath,  htmlCode, (err) => { 
        if (err) { 
            console.error(err);  
            return res.status(500).send(' 保存 HTML 文件时出错'); 
        } 
 
        // 返回文件路径 
        const fileUrl = `http://10.10.7.196:3001/html-files/${fileName}`; 
        res.status(200).send(`网站已经生成地址是:${fileUrl}`); 
    }); 
}); 
 
// 静态文件服务,用于提供生成的 HTML 文件 
app.use('/html-files',  express.static(path.join(__dirname,  'html-files'))); 
 
// 启动服务器 
app.listen(port,  () => { 
    console.log(` 服务器运行在 http://localhost:${port}`); 
}); 

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐