0


AI驱动TDSQL-C Serverless数据库技术实战营--- 操作与电商可视分析

** 一:概述**

                  **  AI技术的融入显著增强了运营效率,为电商领域带来了在个性化推荐、用户行为剖析、库存管控及市场趋势预测等核心环节上的强大数据分析能力。因此,构建一个既高效又稳定的AI驱动的电商数据分析系统,显得至关重要。**

** 本文将基于腾讯云的高性能应用服务HAI和TDSQL-C MYSQL Serverless版构建AI电商数据分析系统。HAI作为一个面向AI和科学计算的GPU应用服务产品,它具有强大的计算能力,让复杂的AI模型的快速部署和运行的可行性加大,进而支持自然语言处理和图形生成等高级任务。TDSQL-C MYSQL版是一款云原生关系型数据库,其100%的MySQL兼容性,以及极致的弹性、高性能和高可用性,是电商业务中处理海量数据存储和查询的理想选择。本文实践除了使用TDSQL-C MYSQL外,通过python语言和基于Langchain的框架,逐步去完成这个电商数据分析系统的构建和部署。**

** ** 二:AI电商数据分析系统实践

** <1>程序流程图**

                    ![](https://i-blog.csdnimg.cn/direct/de887bd5c1354f1cadc2ced9a9372e4d.png)

** <2>环境搭建**

2.1 购买TDSQL-C Mysql Serverless实例

1. 访问腾讯云官网申请TDSQL-C Mysql服务器

购买申请链接https://cloud.tencent.com/product/tdsqlc![](https://i-blog.csdnimg.cn/direct/407d799475e84f9ea99907ae466d04e4.png)

2.根据图表选择选定服务器
选定的实例服务器为Serverless,数据库引擎为MySQL,剩下的具体选择如下图所示:

    在这里还需要新建子网,详细步骤如下所示:

    直接在这里选择子网是不行的,那个新建的按钮点击不了,在这里你需要退回上一个页面去点击选择创建私域网络,然后选择自己想要创建的地区以及其他相关信息。

    然后创建完成之后再返回页面选择创建,创建之后,它就会跳转到数据库的正式创建页面,然后在页面中,配置相关的用户名和密码。

    ![](https://i-blog.csdnimg.cn/direct/2dc70af4b0b14171a74313e7b9e350a0.png)![](https://i-blog.csdnimg.cn/direct/c78c257d233642ee9476a2ed610912c6.png)![](https://i-blog.csdnimg.cn/direct/a3c4943ce17b42fe9c78682e4a86aec3.png)

    然后根据下图创建数据库,详细过程如下面图片所示:

         新建SQL,并将下面的代码粘贴在这个查询中,然后点击运行创建。
CREATE TABLE `ecommerce_sales_stats` (
  `category_id` int NOT NULL COMMENT '分类ID(主键)',
  `category_name` varchar(100) NOT NULL COMMENT '分类名称',
  `total_sales` decimal(15,2) NOT NULL COMMENT '总销售额',
  `steam_sales` decimal(15,2) NOT NULL COMMENT 'Steam平台销售额',
  `offline_sales` decimal(15,2) NOT NULL COMMENT '线下实体销售额',
  `official_online_sales` decimal(15,2) NOT NULL COMMENT '官方在线销售额',
  PRIMARY KEY (`category_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 COMMENT='电商分类销售统计表';
INSERT INTO `ecommerce_sales_stats` VALUES (1,'电子产品',150000.00,80000.00,30000.00,40000.00),(2,'服装',120000.00,20000.00,60000.00,40000.00),(3,'家居用品',90000.00,10000.00,50000.00,30000.00),(4,'玩具',60000.00,5000.00,30000.00,25000.00),(5,'书籍',45000.00,2000.00,20000.00,23000.00),(6,'运动器材',70000.00,15000.00,25000.00,30000.00),(7,'美容护肤',80000.00,10000.00,30000.00,40000.00),(8,'食品',50000.00,5000.00,25000.00,20000.00),(9,'珠宝首饰',30000.00,2000.00,10000.00,18000.00),(10,'汽车配件',40000.00,10000.00,15000.00,25000.00),(11,'手机配件',75000.00,30000.00,20000.00,25000.00),(12,'电脑配件',85000.00,50000.00,15000.00,20000.00),(13,'摄影器材',50000.00,20000.00,15000.00,15000.00),(14,'家电',120000.00,60000.00,30000.00,30000.00),(15,'宠物用品',30000.00,3000.00,12000.00,16800.00),(16,'母婴用品',70000.00,10000.00,30000.00,30000.00),(17,'旅行用品',40000.00,5000.00,15000.00,20000.00),(18,'艺术品',25000.00,1000.00,10000.00,14000.00),(19,'健康产品',60000.00,8000.00,25000.00,27000.00),(20,'办公用品',55000.00,2000.00,20000.00,33000.00);
CREATE TABLE `users` (
  `user_id` int NOT NULL AUTO_INCREMENT COMMENT '用户ID(主键,自增)',
  `full_name` varchar(100) NOT NULL COMMENT '用户全名',
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `email` varchar(100) NOT NULL COMMENT '用户邮箱',
  `password_hash` varchar(255) NOT NULL COMMENT '用户密码的哈希值',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_active` tinyint(1) DEFAULT '1' COMMENT '是否激活',
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `email` (`email`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4  COMMENT='用户表';
INSERT INTO `users` VALUES (1,'张伟','zhangwei','[email protected]','hashed_password_1','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(2,'李娜','lina','[email protected]','hashed_password_2','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(3,'王芳','wangfang','[email protected]','hashed_password_3','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(4,'刘洋','liuyang','[email protected]','hashed_password_4','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(5,'陈杰','chenjie','[email protected]','hashed_password_5','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(6,'杨静','yangjing','[email protected]','hashed_password_6','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(7,'赵强','zhaoqiang','[email protected]','hashed_password_7','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(8,'黄丽','huangli','[email protected]','hashed_password_8','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(9,'周杰','zhoujie','[email protected]','hashed_password_9','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(10,'吴敏','wumin','[email protected]','hashed_password_10','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(11,'郑伟','zhengwei','[email protected]','hashed_password_11','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(12,'冯婷','fengting','[email protected]','hashed_password_12','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(13,'蔡明','caiming','[email protected]','hashed_password_13','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(14,'潘雪','panxue','[email protected]','hashed_password_14','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(15,'蒋磊','jianglei','[email protected]','hashed_password_15','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(16,'陆佳','lujia','[email protected]','hashed_password_16','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(17,'邓超','dengchao','[email protected]','hashed_password_17','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(18,'任丽','renli','[email protected]','hashed_password_18','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(19,'彭涛','pengtao','[email protected]','hashed_password_19','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(20,'方圆','fangyuan','[email protected]','hashed_password_20','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(21,'段飞','duanfei','[email protected]','hashed_password_21','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(22,'雷鸣','leiming','[email protected]','hashed_password_22','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(23,'贾玲','jialing','[email protected]','hashed_password_23','2024-08-18 04:07:18','2024-08-18 04:07:18',1);
CREATE TABLE `orders` (
  `order_id` int NOT NULL AUTO_INCREMENT,
  `user_id` int DEFAULT NULL,
  `order_amount` decimal(10,2) DEFAULT NULL,
  `order_status` varchar(20) DEFAULT NULL,
  `order_time` datetime DEFAULT NULL,
  PRIMARY KEY (`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 ;
INSERT INTO `orders` VALUES (1,3,150.50,'已支付','2024-08-23 10:01:00'),(2,7,89.20,'待支付','2024-08-23 10:03:15'),(3,12,230.00,'已支付','2024-08-23 10:05:30'),(4,2,99.90,'已发货','2024-08-23 10:07:45'),(5,15,120.00,'待发货','2024-08-23 10:10:00'),(6,21,180.50,'已支付','2024-08-23 10:12:15'),(7,4,105.80,'待支付','2024-08-23 10:14:30'),(8,18,210.00,'已支付','2024-08-23 10:16:45'),(9,6,135.20,'已发货','2024-08-23 10:19:00'),(10,10,160.00,'待发货','2024-08-23 10:21:15'),(11,1,110.50,'已支付','2024-08-23 10:23:30'),(12,22,170.80,'待支付','2024-08-23 10:25:45'),(13,8,145.20,'已发货','2024-08-23 10:28:00'),(14,16,190.00,'待发货','2024-08-23 10:30:15'),(15,11,125.50,'已支付','2024-08-23 10:32:30'),(16,19,165.20,'待支付','2024-08-23 10:34:45'),(17,5,130.00,'已发货','2024-08-23 10:37:00'),(18,20,175.80,'待发货','2024-08-23 10:39:15'),(19,13,140.50,'已支付','2024-08-23 10:41:30'),(20,14,155.20,'待支付','2024-08-23 10:43:45'),(21,9,135.50,'已发货','2024-08-23 10:46:00'),(22,23,185.80,'待发货','2024-08-23 10:48:15'),(23,17,160.50,'已支付','2024-08-23 10:50:30'),(24,12,145.20,'待支付','2024-08-23 10:52:45'),(25,3,130.00,'已发货','2024-08-23 10:55:00'),(26,8,115.50,'已支付','2024-08-23 10:57:15'),(27,19,120.20,'待支付','2024-08-23 10:59:30'),(28,6,145.50,'已发货','2024-08-23 11:01:45'),(29,14,130.20,'待支付','2024-08-23 11:04:00'),(30,5,125.50,'已支付','2024-08-23 11:06:15'),(31,21,135.20,'待支付','2024-08-23 11:08:30'),(32,7,140.50,'已发货','2024-08-23 11:10:45'),(33,16,120.20,'待支付','2024-08-23 11:13:00'),(34,10,135.50,'已支付','2024-08-23 11:15:15'),(35,2,140.20,'待支付','2024-08-23 11:17:30'),(36,12,145.20,'待支付','2024-08-23 12:00:00'),(37,15,130.20,'已支付','2024-08-23 12:02:15'),(38,20,125.50,'待发货','2024-08-23 12:04:30'),(39,17,135.20,'已支付','2024-08-23 12:06:45'),(40,4,140.50,'待支付','2024-08-23 12:09:00'),(41,10,120.20,'已发货','2024-08-23 12:11:15'),(42,13,135.50,'已支付','2024-08-23 12:13:30'),(43,18,145.20,'待支付','2024-08-23 12:15:45'),(44,6,130.20,'已发货','2024-08-23 12:18:00'),(45,11,125.50,'已支付','2024-08-23 12:20:15'),(46,19,135.20,'待支付','2024-08-23 12:22:30'),(47,5,140.50,'已发货','2024-08-23 12:24:45'),(48,20,120.20,'待支付','2024-08-23 12:27:00'),(49,17,135.50,'已支付','2024-08-23 12:29:15'),(50,4,145.20,'待支付','2024-08-23 12:31:30'),(51,10,130.20,'已发货','2024-08-23 12:33:45'),(52,13,125.50,'已支付','2024-08-23 12:36:00'),(53,18,135.20,'待支付','2024-08-23 12:38:15'),(54,6,140.50,'已发货','2024-08-23 12:40:30'),(55,11,120.20,'待支付','2024-08-23 12:42:45'),(56,19,135.50,'已支付','2024-08-23 12:45:00'),(57,5,145.20,'待支付','2024-08-23 12:47:15'),(58,20,130.20,'已发货','2024-08-23 12:49:30'),(59,17,125.50,'已支付','2024-08-23 13:01:45'),(60,4,135.20,'待支付','2024-08-23 13:04:00'),(61,10,140.50,'已发货','2024-08-23 13:06:15'),(62,13,120.20,'待支付','2024-08-23 13:08:30'),(63,18,135.50,'已支付','2024-08-23 13:10:45'),(64,6,145.20,'待支付','2024-08-23 13:13:00'),(65,11,130.20,'已发货','2024-08-23 13:15:15'),(66,19,125.50,'已支付','2024-08-23 13:17:30'),(67,5,135.20,'待支付','2024-08-23 13:19:45'),(68,20,140.50,'已发货','2024-08-23 13:22:00'),(69,17,120.20,'待支付','2024-08-23 13:24:15'),(70,4,135.50,'已支付','2024-08-23 13:26:30'),(71,10,145.20,'待支付','2024-08-23 13:28:45'),(72,13,130.20,'已发货','2024-08-23 13:31:00'),(73,18,125.50,'已支付','2024-08-23 13:33:15'),(74,6,135.20,'待支付','2024-08-23 13:35:30'),(75,11,140.50,'已发货','2024-08-23 13:37:45'),(76,19,120.20,'待支付','2024-08-23 13:40:00'),(77,5,135.50,'已支付','2024-08-23 13:42:15'),(78,20,145.20,'待支付','2024-08-23 13:44:30'),(79,17,130.20,'已发货','2024-08-23 13:46:45'),(80,4,125.50,'已支付','2024-08-23 13:49:00'),(81,10,135.20,'待支付','2024-08-23 13:51:15'),(82,13,140.50,'已发货','2024-08-23 13:53:30'),(83,18,120.20,'待支付','2024-08-23 13:55:45'),(84,6,135.50,'已支付','2024-08-23 13:58:00'),(85,11,145.20,'待支付','2024-08-23 14:00:15'),(86,19,130.20,'已发货','2024-08-23 14:02:30'),(87,5,125.50,'已支付','2024-08-23 14:04:45'),(88,20,135.20,'待支付','2024-08-23 14:07:00'),(89,17,140.50,'已发货','2024-08-23 14:09:15'),(90,4,120.20,'待支付','2024-08-23 14:11:30'),(91,10,135.50,'已支付','2024-08-23 14:13:45'),(92,13,145.20,'待支付','2024-08-23 14:16:00'),(93,18,130.20,'已发货','2024-08-23 14:18:15'),(94,6,125.50,'已支付','2024-08-23 14:20:30'),(95,11,135.20,'待支付','2024-08-23 14:22:45'),(96,19,140.50,'已发货','2024-08-23 14:25:00'),(97,5,120.20,'待支付','2024-08-23 14:27:15'),(98,20,135.50,'已支付','2024-08-23 14:29:30'),(99,17,145.20,'待支付','2024-08-23 14:31:45'),(100,4,130.20,'已发货','2024-08-23 14:34:00'),(101,10,125.50,'已支付','2024-08-23 14:36:15'),(102,13,135.20,'待支付','2024-08-23 14:38:30'),(103,18,140.50,'已发货','2024-08-23 14:40:45'),(104,16,120.20,'待支付','2024-08-23 14:43:00'),(105,12,135.50,'已支付','2024-08-23 14:45:15'),(106,3,145.20,'待支付','2024-08-23 14:47:30'),(107,8,130.20,'已发货','2024-08-23 14:49:45'),(108,19,125.50,'已支付','2024-08-23 14:52:00'),(109,6,135.20,'待支付','2024-08-23 14:54:15'),(110,14,140.50,'已发货','2024-08-23 14:56:30'),(111,10,120.20,'待支付','2024-08-23 14:58:45'),(112,13,135.50,'已支付','2024-08-23 15:01:00'),(113,18,145.20,'待支付','2024-08-23 15:03:15'),(114,6,130.20,'已发货','2024-08-23 15:05:30'),(115,11,125.50,'已支付','2024-08-23 15:07:45'),(116,19,135.20,'待支付','2024-08-23 15:10:00'),(117,5,140.50,'已发货','2024-08-23 15:12:15'),(118,20,120.20,'待支付','2024-08-23 15:14:30'),(119,17,135.50,'已支付','2024-08-23 15:16:45'),(120,4,145.20,'待支付','2024-08-23 15:19:00'),(121,10,130.20,'已发货','2024-08-23 15:21:15'),(122,13,125.50,'已支付','2024-08-23 15:23:30'),(123,18,135.20,'待支付','2024-08-23 15:25:45'),(124,6,140.50,'已发货','2024-08-23 15:28:00'),(125,11,120.20,'待支付','2024-08-23 15:30:15'),(126,19,135.50,'已支付','2024-08-23 15:32:30'),(127,5,145.20,'待支付','2024-08-23 15:34:45'),(128,20,130.20,'已发货','2024-08-23 15:37:00'),(129,17,125.50,'已支付','2024-08-23 15:39:15'),(130,4,135.20,'待支付','2024-08-23 15:41:30'),(131,10,140.50,'已发货','2024-08-23 15:43:45'),(132,13,120.20,'待支付','2024-08-23 15:46:00'),(133,18,135.50,'已支付','2024-08-23 15:48:15'),(134,6,145.20,'待支付','2024-08-23 15:50:30'),(135,11,130.20,'已发货','2024-08-23 15:52:45'),(136,19,125.50,'已支付','2024-08-23 15:55:00'),(137,5,135.20,'待支付','2024-08-23 15:57:15'),(138,20,140.50,'已发货','2024-08-23 15:59:30'),(139,17,120.20,'待支付','2024-08-23 16:01:45'),(140,4,135.50,'已支付','2024-08-23 16:04:00'),(141,10,145.20,'待支付','2024-08-23 16:06:15'),(142,13,130.20,'已发货','2024-08-23 16:08:30'),(143,18,125.50,'已支付','2024-08-23 16:10:45'),(144,6,135.20,'待支付','2024-08-23 16:13:00'),(145,11,140.50,'已发货','2024-08-23 16:15:15'),(146,19,120.20,'待支付','2024-08-23 16:17:30'),(147,5,135.50,'已支付','2024-08-23 16:19:45'),(148,20,145.20,'待支付','2024-08-23 16:22:00'),(149,17,130.20,'已发货','2024-08-23 16:24:15'),(150,4,125.50,'已支付','2024-08-23 16:26:30'),(151,10,135.20,'待支付','2024-08-23 16:28:45'),(152,13,140.50,'已发货','2024-08-23 16:31:00'),(153,18,120.20,'待支付','2024-08-23 16:33:15'),(154,6,135.50,'已支付','2024-08-23 16:35:30'),(155,11,145.20,'待支付','2024-08-23 16:37:45'),(156,19,130.20,'已发货','2024-08-23 16:40:00'),(157,5,125.50,'已支付','2024-08-23 16:42:15'),(158,20,135.20,'待支付','2024-08-23 16:44:30'),(159,17,140.50,'已发货','2024-08-23 16:46:45'),(160,4,120.20,'待支付','2024-08-23 16:49:00'),(161,10,135.50,'已支付','2024-08-23 16:51:15'),(162,13,145.20,'待支付','2024-08-23 16:53:30'),(163,18,130.20,'已发货','2024-08-23 16:55:45'),(164,6,125.50,'已支付','2024-08-23 16:58:00'),(165,11,135.20,'待支付','2024-08-23 17:00:15'),(166,19,140.50,'已发货','2024-08-23 17:02:30'),(167,5,120.20,'待支付','2024-08-23 17:04:45'),(168,20,135.50,'已支付','2024-08-23 17:07:00'),(169,17,145.20,'待支付','2024-08-23 17:09:15'),(170,4,130.20,'已发货','2024-08-23 17:11:30'),(171,10,125.50,'已支付','2024-08-23 17:13:45'),(172,13,135.20,'待支付','2024-08-23 17:16:00'),(173,18,140.50,'已发货','2024-08-23 17:18:15'),(174,6,120.20,'待支付','2024-08-23 17:20:30'),(175,11,135.50,'已支付','2024-08-23 17:22:45'),(176,19,145.20,'待支付','2024-08-23 17:25:00'),(177,5,130.20,'已发货','2024-08-23 17:27:15'),(178,20,125.50,'已支付','2024-08-23 17:29:30'),(179,17,135.20,'待支付','2024-08-23 17:31:45'),(180,4,140.50,'已发货','2024-08-23 17:34:00'),(181,10,120.20,'待支付','2024-08-23 17:36:15'),(182,13,135.50,'已支付','2024-08-23 17:38:30'),(183,18,145.20,'待支付','2024-08-23 17:40:45'),(184,6,130.20,'已发货','2024-08-23 17:43:00'),(185,11,125.50,'已支付','2024-08-23 17:45:15'),(186,19,135.20,'待支付','2024-08-23 17:47:30'),(187,5,140.50,'已发货','2024-08-23 17:49:45'),(188,20,120.20,'待支付','2024-08-23 17:52:00'),(189,17,135.50,'已支付','2024-08-23 17:54:15'),(190,4,145.20,'待支付','2024-08-23 17:56:30'),(191,10,130.20,'已发货','2024-08-23 17:58:45'),(192,13,125.50,'已支付','2024-08-23 18:01:00'),(193,18,135.20,'待支付','2024-08-23 18:03:15'),(194,6,140.50,'已发货','2024-08-23 18:05:30'),(195,11,120.20,'待支付','2024-08-23 18:07:45'),(196,19,135.50,'已支付','2024-08-23 18:10:00'),(197,5,145.20,'待支付','2024-08-23 18:12:15'),(198,20,130.20,'已发货','2024-08-23 18:14:30'),(199,17,125.50,'已支付','2024-08-23 18:16:45'),(200,4,135.20,'待支付','2024-08-23 18:19:00'),(201,10,140.50,'已发货','2024-08-23 18:21:15'),(202,13,120.20,'待支付','2024-08-23 18:23:30'),(203,18,135.50,'已支付','2024-08-23 18:25:45'),(204,6,145.20,'待支付','2024-08-23 18:28:00'),(205,11,130.20,'已发货','2024-08-23 18:30:15'),(206,19,125.50,'已支付','2024-08-23 18:32:30'),(207,5,135.20,'待支付','2024-08-23 18:34:45'),(208,20,140.50,'已发货','2024-08-23 18:37:00'),(209,17,120.20,'待支付','2024-08-23 18:39:15'),(210,4,135.50,'已支付','2024-08-23 18:41:30'),(211,10,145.20,'待支付','2024-08-23 18:43:45');

    上面这个红框里面的内容,在后面进行本地运行相应的python代码会用到。

    到此为止,这个TDSQL MySQL Serverless就创建完毕了。

** <3>部署HAI高算力服务器 **

访问腾讯云HAI官网 腾讯HAI官网https://cloud.tencent.com/product/hai 详细的创建过程如下面集合图片所示:

    点击新建按钮,新建服务器(费用会在新建服务器并使用后才开始计费)

    根据需求选择选择算力服务器。

    查看HAI算力服务器的llama对外端口,在后面我们会使用到。

    检查这个6399端口是否已经对外开放,默认情况下是开放的。

    难免会出现一些特殊的情况,如果没有开放就点击新建配置,进行协议配置

    ![](https://i-blog.csdnimg.cn/direct/eb3b10268e3e4f7f89193417e165717b.png)

    入站规则选择All,协议tcp,输入6399.

    到此为止,这个HAI算力服务器准备完毕。

<4>本地python环境搭建

4.1访问
python

官网,并下载符合自己服务器的python版本(推荐3.10.11)

下载地址:

https://www.python.org/downloads/release/python-31011/

  1. 双击安装包安装pythonwindow版本需要勾选add python to PATH

  2. 打开电脑终端:

    window系统:右键点击开始图标,选择运行,输入cmd,回车后打开终端
    

  • macos系统:在app界面选择终端(通常系统默认放在其他的选项集合中)

运行pip命令安装依赖包,请分别运行以下pip命令逐个安装

pip install openai 
pip install langchain 
pip install langchain-core 
pip install langchain-community 
pip install mysql-connector-python 
pip install streamlit 
pip install plotly 
pip install numpy
pip install pandas
pip install watchdog
pip install matplotlib
pip install kaleido

    以上的python环境搭建是基于官方文档中的内容,并且官方文档是以这个Vscode为模板去搭建的环境。

** 4.2 下面我会用另一种方式去来搭建这个所需的python开发环境。**

             我介绍的这种方式是基于conda以及Pycharm来搭建环境的,为什么会选用这两个呢,因为conda下载这个固定版本的python相对简单并且可以选择好几个版本。我在利用这个conda来搭建环境时发现这个相应的kaleido包下载时会出现找不到的情况,所以我选择Pycharm中导入这个conda环境,然后在pycharm当中利用配置源然后下载这个对应的kaleido包。

      注意:使用conda来搭建环境时,首先电脑上需要安装Anaconda,安装之后就可以在命令行中去下载和配置相应的环境。Anaconda的安装在这里我就不讲述了。我主要就怎样去使用这个conda来搭起来这个所需要的一部分环境。

4.2.1 首先打开应用,选择Anaconda Prompt

            这个详细的步骤如下图所示:![](https://i-blog.csdnimg.cn/direct/c984dd5486c04cb7a1b02cfa8ce7e67f.png)

    ![](https://i-blog.csdnimg.cn/direct/8fc7749a8e2346ee95ac68a5a92444b7.png)

            点击这个,然后进入到下面这个命令行终端页面。

    在正式下载之前,我们需要去先配置这个国内的源,如果直接使用这个默认的源的话,它的下载是比较慢的,为了提高这个速度我们首先配置配置文件中的channels参数,通过它来设置所需要的源。

    打开C盘用户目录,找到.condarc文件,然后利用编辑器或者记事本打开进行修改。

    我们需要修改的是一开头这个文件中的channels参数,详细内容如下所示:
channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
  - defaults
    上面我用的是清华源的源。只用了几个地址。

下面是其他源的一些配置书写,详细如下所示:

 **   阿里云:**
channels:
  - defaults
show_channel_urls: true
default_channels:
  - http://mirrors.aliyun.com/anaconda/pkgs/main
  - http://mirrors.aliyun.com/anaconda/pkgs/r
  - http://mirrors.aliyun.com/anaconda/pkgs/msys2
custom_channels:
  conda-forge: http://mirrors.aliyun.com/anaconda/cloud
  msys2: http://mirrors.aliyun.com/anaconda/cloud
  bioconda: http://mirrors.aliyun.com/anaconda/cloud
  menpo: http://mirrors.aliyun.com/anaconda/cloud
  pytorch: http://mirrors.aliyun.com/anaconda/cloud
  simpleitk: http://mirrors.aliyun.com/anaconda/cloud
  **  中科大源:**
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/
conda config --set show_channel_urls yes

** 北外conda源:**

conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/main/
#Conda Forge
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/conda-forge/
#msys2(可略)
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/msys2/
#bioconda(可略)
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/bioconda/
#menpo(可略)
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/menpo/
#pytorch
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/pytorch/
# for legacy win-64(可略)
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/peterjc123/
conda config --set show_channel_urls yes
中科大conda镜像
    上面的源配置完成之后,接下来我们就可以利用conda来创建一部分环境了。

进入到那个Anaconda Prompt命令行界面,进行相应的操作。

    利用下面命令可以查看conda目前所下载的包。
conda list

    使用下面的命令查看所有环境。
conda env list
    ![](https://i-blog.csdnimg.cn/direct/2151497d159748b9a72fa8a9b3b32dcf.png)

    这个就是我创建用来搭建这个实验环境的一个env。

利用下面这个命令可以查看conda的基础配置信息

conda config --show

    创建这个env环境的命令如下所示:
conda create -n 需要创建的环境名 python==具体的pyrhon环境的版本号,在这里文档中推荐使用的是3.10.11
    创建完成之后,可以用conda env list查看是否有自己所创建的环境。

    在进行下载所需要的包时我们首先需要用下面这个命令来激活这个env环境.
conda activate 所要激活的env环境的名字

如果这个最前面括号里面的环境名称变成为了你想要的环境证明就激活切换成功。切换成功之后,然后去下载所需要下载的包。

    下载的命令如下所示:
 conda install 包名=版本号

如果要一次性下载多个可以使用下面这个方式

conda install 包名=版本号 包名=版本号
    用我那个所配置的清华源,给的所有需要下载的包中,除了最后一个包kaleido不能去下载之外,其余的下载完全没问题。如果用这个下载kaleido会出现如下的情况。

    所以最后一个包我选择去在Pycharm中去下载。也有可能你配置的源利用这个也可以直接下载成功,如果和我这个情况一样,就选择去用下面的方式去下载最后一个包。

    首先我们需要打开Pycharm,第一步还是配置国内源,国内源的常用地址如下所示:
https://pypi.tuna.tsinghua.edu.cn/simple
https://mirrors.aliyun.com/pypi/simple/
https://pypi.mirrors.ustc.edu.cn/simple/
https://pypi.hustunique.com/
https://pypi.sdutlinux.org/
https://pypi.douban.com/simple/
    Pycharm中详细的配置方法如下所示:

            ![](https://i-blog.csdnimg.cn/direct/f5e2b5d5744740c3a7113fbca90ce443.png)

    ![](https://i-blog.csdnimg.cn/direct/054ddf33966b4222b7ee3ee110be2f5f.png)

    我使用的是较新版本的Pycharm,如果你使用的版本较低,它相应的位置是在settings里面的。

<5>应用构建

** 5.1 搭建项目框架**

  1. 新建名为 workspace 文件夹进行保存项目代码
  2. 在项目文件夹(workspace)中新建配置文件 config.yaml
  3. 在项目文件夹(workspace)中新建应用主文件 text2sql2plotly.py

5.2 TDSQL-C 数据库&HAI云算力配置

打开 config.yaml 文件,复制以下内容到配置文件中:

这里主要分为

database

配置 和

hai

的配置

  • database 的配置详解: - db_user: 数据库账号,默认为 root- db_password: 创建数据库时的密码- db_host: 数据库连接地址- db_port: 数据库公网端口- db_name 创建的数据库名称,如果按手册来默认是 shop
  • hai 配置详解: - model 使用的大模型- base_url 模型暴露的 api 地址,是公网 ip 和端口的组合,默认 llama端口是6399
database

中填入

TDSQL-C

的相关配置,

db_host

db_port

可以在集群列表中找到

hai
base_url

将实例的ip进行替换,ip可以在

HAI

的控制台-> 算力管理中找到

5.3 应用开发

将以下程序代码复制并保存到

text2sql2plotly.py

文件中

from langchain_community.utilities import SQLDatabase
from langchain_core.prompts import ChatPromptTemplate
from langchain_community.chat_models import ChatOllama
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
import yaml
import mysql.connector
from decimal import Decimal
import plotly.graph_objects as go
import plotly
import pkg_resources
import matplotlib

yaml_file_path = 'config.yaml'

with open(yaml_file_path, 'r') as file:
    config_data = yaml.safe_load(file)

#获取所有的已安装的pip包
def get_piplist(p):
    return [d.project_name for d in pkg_resources.working_set]

#获取llm用于提供AI交互
ollama = ChatOllama(model=config_data['hai']['model'],base_url=config_data['hai']['base_url'])

db_user = config_data['database']['db_user']
db_password = config_data['database']['db_password']
db_host = config_data['database']['db_host']
db_port= config_data['database']['db_port']
db_name = config_data['database']['db_name']
# 获得schema
def get_schema(db):
    
    schema = mysql_db.get_table_info()
    return schema
def getResult(content):
    global mysql_db
    # 数据库连接
    mysql_db = SQLDatabase.from_uri(f"mysql+mysqlconnector://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}")
    # 获得 数据库中表的信息
    #mysql_db_schema = mysql_db.get_table_info()
    #print(mysql_db_schema)
    template = """基于下面提供的数据库schema, 根据用户提供的要求编写sql查询语句,要求尽量使用最优sql,每次查询都是独立的问题,不要收到其他查询的干扰:
    {schema}
    Question: {question}
    只返回sql语句,不要任何其他多余的字符,例如markdown的格式字符等:
    如果有异常抛出不要显示出来
    """
    prompt = ChatPromptTemplate.from_template(template)
    text_2_sql_chain = (
                RunnablePassthrough.assign(schema=get_schema)
                | prompt
                | ollama
                | StrOutputParser()
        )
    
    # 执行langchain 获取操作的sql语句
    sql = text_2_sql_chain.invoke({"question": content})

    print(sql)
    #连接数据库进行数据的获取
    # 配置连接信息
    conn = mysql.connector.connect(
    
        host=db_host,
        port=db_port,
        user=db_user,
        password=db_password,
        database=db_name
    )
    # 创建游标对象
    cursor = conn.cursor()
    # 查询数据
    cursor.execute(sql.strip("```").strip("```sql"))
    info = cursor.fetchall()
    # 打印结果
    #for row in info:
        #print(row)
    # 关闭游标和数据库连接
    cursor.close()
    conn.close()
    #根据数据生成对应的图表
    print(info)
    template2 = """
    以下提供当前python环境已经安装的pip包集合:
    {installed_packages};
    请根据data提供的信息,生成是一个适合展示数据的plotly的图表的可执行代码,要求如下:
        1.不要导入没有安装的pip包代码
        2.如果存在多个数据类别,尽量使用柱状图,循环生成时图表中对不同数据请使用不同颜色区分,
        3.图表要生成图片格式,保存在当前文件夹下即可,名称固定为:图表.png,
        4.我需要您生成的代码是没有 Markdown 标记的,纯粹的编程语言代码。
        5.生成的代码请注意将所有依赖包提前导入, 
        6.不要使用iplot等需要特定环境的代码
        7.请注意数据之间是否可以转换,使用正确的代码
        8.不需要生成注释
    data:{data}

    这是查询的sql语句与文本:

    sql:{sql}
    question:{question}
    返回数据要求:
    仅仅返回python代码,不要有额外的字符
    """
    prompt2 = ChatPromptTemplate.from_template(template2)
    data_2_code_chain = (
                RunnablePassthrough.assign(installed_packages=get_piplist)
                | prompt2
                | ollama
                | StrOutputParser()
        )
    
    # 执行langchain 获取操作的sql语句
    code = data_2_code_chain.invoke({"data": info,"sql":sql,'question':content})
    
    #删除数据两端可能存在的markdown格式
    print(code.strip("```").strip("```python"))
    exec(code.strip("```").strip("```python"))
    return {"code":code,"SQL":sql,"Query":info}

# 构建展示页面
import streamlit
# 设置页面标题
streamlit.title('AI驱动的数据库TDSQL-C 电商可视化分析小助手')
# 设置对话框
content = streamlit.text_area('请输入想查询的信息', value='', max_chars=None)
# 提问按钮 # 设置点击操作
if streamlit.button('提问'):
    #开始ai及langchain操作
    if content:
        #进行结果获取
        result = getResult(content)
        #显示操作结果
        streamlit.write('AI生成的SQL语句:')
        streamlit.write(result['SQL'])
        streamlit.write('SQL语句的查询结果:')
        streamlit.write(result['Query'])
        streamlit.write('plotly图表代码:')
        streamlit.write(result['code'])
        # 显示图表内容(生成在getResult中)
    streamlit.image('./图表.png', width=800) 

pkg_resources,这个包在运行时会出现这个弃用的提醒这个是不影响运行的,在没有其他错误时,除了训练营官方文档中给出的所需要下的包,在运行之后,可能还会出现下面的报错。解决办法就是用上面在Pycharm中下载包的方法,去下载相应的包。

File "D:\Programming\Anaconda3\envs\TDSQL-Serverless\lib\site-packages\streamlit\runtime\scriptrunner\exec_code.py", line 85, in exec_func_with_error_handling
    result = func()
File "D:\Programming\Anaconda3\envs\TDSQL-Serverless\lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 576, in code_to_exec
    exec(code, module.__dict__)
File "E:\Code\Python\IntelligenceProject\demo1\TDSQL C-Serverless\text2sql2plotly.py", line 136, in <module>
    result = getResult(content)
File "E:\Code\Python\IntelligenceProject\demo1\TDSQL C-Serverless\text2sql2plotly.py", line 120, in getResult
    exec(code.strip("```").strip("```python"))
File "<string>", line 5, in <module>
File "D:\Programming\Anaconda3\envs\TDSQL-Serverless\lib\site-packages\matplotlib\__init__.py", line 159, in <module>
    from . import _api, _version, cbook, _docstring, rcsetup
File "D:\Programming\Anaconda3\envs\TDSQL-Serverless\lib\site-packages\matplotlib\rcsetup.py", line 28, in <module>
    from matplotlib.colors import Colormap, is_color_like
File "D:\Programming\Anaconda3\envs\TDSQL-Serverless\lib\site-packages\matplotlib\colors.py", line 52, in <module>
    from PIL import Image
File "D:\Programming\Anaconda3\envs\TDSQL-Serverless\lib\site-packages\PIL\Image.py", line 100, in <module>
    from . import _imaging as core

解决这个报错问题,可采取以下的步骤解决

    错误是由于 Python 环境中的 PIL(现在通常用作 Pillow)库无法正确加载其依赖的 DLL 文件 
_imaging

。通常是因为 Pillow 库的安装问题或者系统环境变量配置不正确导致的。

要解决这个问题,您可以尝试以下几个步骤:

  1. 确认 Pillow 安装: 确保您的环境中安装了 Pillow,并且是与您的 Python 版本兼容的版本。您可以通过运行以下命令来安装或更新 Pillow:pip install --upgrade Pillow
  2. 检查系统路径: 确保系统的 PATH 环境变量中包含了 Python 和相关库的路径。有时候,如果 DLL 文件没有被正确地添加到系统路径中,可能会导致加载失败。
  3. 重新安装依赖: 有时候,重新安装相关的库可以解决问题。您可以尝试卸载然后重新安装 matplotlib 和 Pillow:
pip uninstall matplotlib Pillow 
pip install matplotlib Pillow
  1. 使用虚拟环境: 如果您不在虚拟环境中工作,建议创建一个新的虚拟环境来避免系统级的包冲突。使用 Anaconda,您可以这样做:1conda create -n newenv python=3.x 2conda activate newenv 3pip install matplotlib Pillow
  2. 检查 DLL 文件: 确认 _imaging.cp3x-win_amd64.pyd(其中 cp3x 对应您的 Python 版本,比如 cp38 代表 Python 3.8)是否存在于您的 Pillow 安装目录的 PIL 文件夹下。如果不存在,可能是 Pillow 安装不完整。
  3. 查看错误日志: 仔细检查错误日志,看看是否有其他提示可能帮助您定位问题的根源。
  4. Deprecation Warning: 关于 pkg_resources 的弃用警告,虽然这不会直接影响您的程序运行,但建议您查找替代方法来处理资源包的需求,比如使用 importlib.resources

5.4 终端利用steamlit命令运行python代

streamlit run text2sql2plotly.py
    运行之后如果没有报错,实验就成功了。这个AI的对这个要求条件比较苛刻,如果条件错误或者数据中没有相应的数据就会出现找不到的问题。我在第一次运行时,它出现了这个数据库shop中找不到那个表。所以它的运行不是很稳定,可以多试几次。
标签: serverless 云原生

本文转载自: https://blog.csdn.net/chasemydreamidea/article/details/142551410
版权归原作者 chasemydreamidea 所有, 如有侵权,请联系我们删除。

“AI驱动TDSQL-C Serverless数据库技术实战营--- 操作与电商可视分析”的评论:

还没有评论