腾讯云AI 驱动的数据库 TDSQL-C 操作与电商可视分析 ---实战体验历险记

news2024/9/28 15:52:52

腾讯云AI 驱动的数据库 TDSQL-C 操作与电商可视分析---实战体验历险记

一、背景介绍

二、实验介绍

三、效果展示

四、实操指导

        4.1 系统设计

        4.2 环境搭建

              4.2.1 购买 TDSQL-C Mysql Serverless 实例

              4.2.2 部署HAI高算力服务器

              4.2.3 本地python环境搭建

        4.3 应用构建

              4.3.1 搭建项目框架

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

              4.3.3 应用开发

              4.3.4 运行程序并测试效果

         4.4 效果展示

五、清理资源

         5.1 删除TDSQL-C Serverless

        5.2 删除 HAI 算力

六、实验小结

一、背景介绍

         2024年9月25日获邀参加腾讯云的AI驱动的TDSQL-Cserverless实战营活动。云服务,云电脑等概念都只是停留在了解的层面,并没有什么实际的实践操作,一直都想尝试体验下,这次机会难得,果断决定试试!

       参阅主办方提供的样例之后,就着手实战操练体验AI驱动的TDSQL-Cserverless数据库的具体使用。

       首先说说活动背景吧。AI 技术的应用极大地提升了运营效率,并为电商行业带来了个性化推荐、用户行为分析、库存管理和市场趋势预测等关键领域的数据分析能力,在这种背景下,构建一个高效、可靠的AI电商数据分析系统显得尤为关键。

         本次活动就是想通过详细细致的指导,让像我们的初级开发者学会如何利用腾讯云的高性能应用服务HAI和TDSQL-C MySQL Serverless版构建AI电商数据分析系统,这只是一个范例,开发者可以更换示例中的数据文件内容,创建自己的数据库。HAI作为一个面向AI和科学计算的GPU应用服务产品,提供了强大的计算能力,使得复杂AI模型如LLM的快速部署和运行成为可能,进而支持自然语言处理和图像生成等高级任务。与此同时,TDSQL-C MySQL版作为一款云原生关系型数据库,其100%的MySQL兼容性,以及极致的弹性、高性能和高可用性,使其成为电商业务中处理海量数据存储和查询的理想选择。

         接下来开发者将通过Python编程语言和基于Langchain的框架,逐步引导开发者完成系统的构建和部署。

二、实验介绍

        本次实验我们将在腾讯云中快速搭建TDSQL-C Mysql Serverless服务器的 AI电商数据分析系统,参加活动营的开发者需要完成下面五项任务:

1、程序流程图设计

2、TDSQL-C Mysql Serverless 搭建

3、HAI llama 大模型部署

4、开发环境搭建

5、AI电商数据分析系统构建

三、效果展示

        当我们搭建成功后,运行python程序时就会打开浏览器出现这个窗口,等待用户输入查询内容。小tips就是需要同时使用Ctrl 和Enter两键,等待结果出现。

四、实操指导

4.1 系统设计

        我们需要完成上述任务,工作的思路就是按照下面的流程图,一步一步来实现。

          程序流程图

4.2 环境搭建

4.2.1 购买TDSQL-C Mysql Serverless 实例

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

点击链接:云原生数据库 TDSQL-C_云原生数据库_企业级分布式云数据库-腾讯云云原生数据库TDSQL-C是腾讯云自研的新一代高性能高可用的企业级分布式云数据库。融合了传统数据库、云计算与新硬件技术的优势,100%兼容 MySQL 和 PostgreSQL,实现超百万级 QPS 的高吞吐,海量分布式智能存储,保障数据安全可靠。icon-default.png?t=O83Ahttps://cloud.tencent.com/product/tdsqlc

        温馨提示:在购买前需要注册腾讯云账号,后面要用到的,最好是实名制,可以免费试用和使用某些产品的体验。

2.根据图表选择选定服务器

           选定Serverless的服务器

            点击上面的链接,就会跳转到当前页面,如下图所示:依次选定自己想要的配置,其中位置选择离你物理位置最近的为最佳,当然你家网络超级好而且家里有矿,可以随意选择,因为这些云服务器需要你按小时或包月包年付费 ,如果网络流畅的话直接选择系统默认的网络就行,否则就需要自己动手创建了。

           蓝色按钮就是我的最佳选择,这里有一难点就是私有网络的创建。选择蓝色小字中的新建私有网络,跳转出如下界面。

            选择新建,跳转出下面的表格,主要是网络名称和子网名称不要设置相同就好,IPV4 CIDR选择192开头的较好。其他的选择默认状态,最后点击确定。

                  创建完毕,返回到刚才的页面点击下一步,进入到数据库基本信息填写

3.设置数据库密码与配置信息

          如上图所示,设定登录密码,记住账号名为root,端口选择默认即可。

          接着点击高级设置,表名大小写选择不敏感选项。

                勾选同意复选框,点击立即购买按钮,跳转到付费为页面。

4.点击立即购买,支付成功后,进入到此页面,点击前往管理页面。

5.前往数据库管理界面

6.管理页面中选择指定区域的 TDSQL-C Mysql 服务器

        在管理页面,首先选定你刚才创建的那个服务器,点击右上角的启动,读写实例中,将外网开启,这里的服务器主机名和端口复制备用。

7.开启实例公网访问

8.登录在线管理工具

             点击上面页面中的授权并创建,就进入到登录在线管理页面。

              输入账号名,密码,点击登录进入下一页面。

            可以看到实例的基本信息。

9.新建数据库 shopping

       数据库的名称可以自定义,一定要记牢,后面有用。

       先点击库管理,再点击新建数据库,输入库名。

10.导入数据表

        将下面的数据复制到SQL执行窗口中,即“执行”下面的“1”后面的方框中,确保当前数据库选中shopping。

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','zhangwei@example.com','hashed_password_1','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(2,'李娜','lina','lina@example.com','hashed_password_2','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(3,'王芳','wangfang','wangfang@example.com','hashed_password_3','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(4,'刘洋','liuyang','liuyang@example.com','hashed_password_4','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(5,'陈杰','chenjie','chenjie@example.com','hashed_password_5','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(6,'杨静','yangjing','yangjing@example.com','hashed_password_6','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(7,'赵强','zhaoqiang','zhaoqiang@example.com','hashed_password_7','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(8,'黄丽','huangli','huangli@example.com','hashed_password_8','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(9,'周杰','zhoujie','zhoujie@example.com','hashed_password_9','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(10,'吴敏','wumin','wumin@example.com','hashed_password_10','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(11,'郑伟','zhengwei','zhengwei@example.com','hashed_password_11','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(12,'冯婷','fengting','fengting@example.com','hashed_password_12','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(13,'蔡明','caiming','caiming@example.com','hashed_password_13','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(14,'潘雪','panxue','panxue@example.com','hashed_password_14','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(15,'蒋磊','jianglei','jianglei@example.com','hashed_password_15','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(16,'陆佳','lujia','lujia@example.com','hashed_password_16','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(17,'邓超','dengchao','dengchao@example.com','hashed_password_17','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(18,'任丽','renli','renli@example.com','hashed_password_18','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(19,'彭涛','pengtao','pengtao@example.com','hashed_password_19','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(20,'方圆','fangyuan','fangyuan@example.com','hashed_password_20','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(21,'段飞','duanfei','duanfei@example.com','hashed_password_21','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(22,'雷鸣','leiming','leiming@example.com','hashed_password_22','2024-08-18 04:07:18','2024-08-18 04:07:18',1),(23,'贾玲','jialing','jialing@example.com','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');

        上面三幅图分别是数据库里的三大项内容。到这里TDSQL-C Mysql Serverless 数据库服务器搭建完毕!

4.2.2 部署HAI高算力服务器

1.访问腾讯云HAI官网  

  官网地址:高性能应用服务HAI_GPU云服务器_腾讯云高性能应用服务是一款面向 AI 、科学计算 的GPU 应用服务产品,提供即插即用的澎湃算力与常见环境。助力中小企业及开发者快速部署LLM、AI作画、数据科学等高性能应用,原生集成配套的开发工具与组件,大幅提高应用层的开发生产效率。icon-default.png?t=O83Ahttps://cloud.tencent.com/product/hai

2.点击立即使用,进入到同意授权页面。

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

4.根据配置需求选择算力服务器

            购买成功后进入此页面,稍等片刻即可创建完成。

5.查看并设置HAI算力服务器的llama对外端口

          检查灰色地方,是否已经默认开放 6399端口,如未开放点击新建配置进行协议配置,入站规则来源选择 all,协议输入 tcp:6399,如下图设置即可。

    创建成功后,会在下面有两行小字,其中有llama is running,表明llama大模型服务准备完毕!

4.2.3 本地python环境搭建

        1.访问python官网,并下载符合自己服务器的python版本(推荐3.10.11),我是Windows系统,以此为例。下载地址:https://www.python.org/downloads/release/python-31011/

        温馨小提示:注意版本选择。我开始用的是2024年4月3.12.5版,下一步中需要的安装包也能够成功安装,但测试就是不能通过,折腾了整整一天,换成推荐版本,才成功出现提问窗口。

   2.双击安装包安装python,window版本,需要勾选add python to PATH选项

3.使用pip安装程序使用的依赖包文件

         等待python安装完成,进行需要的库安装。

        第一步打开电脑终端:

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

        第二步运行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

到此,我们的开发环境准备完毕!

4.3 应用构建​​​​​​

4.3.1搭建项目框架

         1.新建名为workspace文件夹用来保存项目代码,最好建在python文件运行的信任位置,否则会出现意想不到的的麻烦,尤其对新手如此。我用的开发工具是Pycharm,其他类似工具也可以,如VS Code。

         2.在项目文件夹(workspace)中新建配置文件 config.yaml,具体方法是新建一个文本文件,重命名为config.yaml。

        3.在项目文件夹(workspace)中新建应用主文件 text2sql2plotly.py,方法同上。

        4.用开发工具打开刚才新建的两个空文件,如下图Pycharm打开窗口。

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

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

database: 
  db_user: root
  db_password: 修改为之前设定的密码
  db_host: sh-cynosdbmysql-grp-9d8prc9o.sql.tencentcdb.com
  db_port: 21919
  db_name: shop
 
hai:
  model: llama3.1:8b
  base_url: http://82.156.229.112:6399

 这里主要分为database配置和HAI的配置

        database的配置详解:

        db_user: 数据库账号,默认为 root

        db_password: 创建数据库时的密码

        db_host: 数据库连接地址

        db_port: 数据库公网端口

        db_name 创建的数据库名称,如我的数据库名称是shopping

HAI配置详解:

        model使用的大模型llama3.1

        base_url 模型暴露的 API 地址,是公网 ip 和端口的组合,默认 llama端口是6399。

        database 中填入 TDSQL-C 的相关配置,db_host、db_port可以在集群列表中找到

HAI base_url将实例的ip进行替换,ip可以在HAI的控制台中的算力管理中找到。

4.3.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('提问'):
    #开始ailangchain操作
    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) 

4.3.4 运行程序并测试效果

           打开终端,执行以下命令 streamlit run text2sql2plotly.py,

          命令运行后,会在浏览器中打开UI界面

4.4 效果展示

          输入:查询一下每类商品的名称和对应的销售总额 测试效果。

         友情小提示:目前不可能做到每次查询都完全没问题,这个取决于多方面的因素:

         例如:大语言模型(llm)的模型大小、查询描述的准确性(歧义等沟通问题)等。

         查询每个用户账号的名称和长度,例如:潘雪。

         查询一下每类商品的名称和对应的销售总额,例如:珠宝首饰。

         查询出用户吴敏的已支付订单的总额和未支付订单的总额数据。

五、清理资源

5.1 删除TDSQL-C Serverless

        点击退还实例,退还后,实例会在回收站中。

         点击回收站即可看到已被退还的实例,为了数据安全,实例默认会在回收站中保留3天,如不需要可以进行立即释放。

5.2 删除 HAI 算力

六、实验小结

        在本次体验活动中,我成功地利用了腾讯云TDSQL-C MySQL Serverless和高性能应用服务HAI,构建了一个高效、可扩展的AI电商数据分析系统。以下是提验的关键成果和学习点:

        云原生数据库的优势:通过使用TDSQL-C MySQL Serverless,我体验到了云原生数据库在处理大规模数据时的弹性和高性能,这对于电商数据分析尤为重要。

      GPU加速的AI模型:HAI提供的GPU加速能力显著提升了AI模型的训练和推理速度,使得系统能够快速响应市场变化和用户需求。

       实战演练的价值:通过具体的案例研究,我不仅理解了理论知识,还通过实际操作加深了对系统功能的认识。

        持续学习与改进:实验的总结也指出了系统可能存在的局限性和改进空间,鼓励大家持续学习最新的技术和方法,以不断优化和升级系统。

        通过这几天的学习体验,感觉作为开发入门者学习的难度,遇到问题,有时候不能得到有效快速的解决,让我感到很无助。尝试多次无果,网上查询失败,一度准备放弃,幸亏有像码银,程序儒等大佬们的及时帮助,才得以完成本次体验任务,由于自己电脑的配置,有些场景还没有体验出来,花费20元,就是因为没有及时关闭服务器,后台一直扣费,期待下次有更精彩表现。初级开发者在开发过程中遇到的一个小问题,可能需要很多知识和经验来解决,更需要有热心大佬们的画龙点睛之语来开悟问道。

        最后欢迎大家一起来探寻腾讯云的TDSQL-C Serverless+AI更多的场景应用,为提高大家的技术和能力而奋力前行!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2173984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

短视频电影直播多功能主题第二套Streamlab主题

需要搭配苹果cms使用.本源码只是主题,非整套 适配移动端到32寸显示器,内置6种幻灯片风格,100%DIY布局功能给你自由设计模板的能力,不会代码也能随意修改布局,修改数据显示,拒绝千篇一律的网站风格

IIS开启后https访问出错net::ERR_CERT_INVALID

问题 访问http正常,访问https出错: 解决方案 从这里找到解决方案:https://learn.microsoft.com/en-us/answers/questions/1517411/how-to-fix-the-err-ssl-key-usage-incompatible-micr 1、管理员打开powershell,执行下面命令…

人只活一次,活出一道光吧

人只活一次, 你怎么舍得让自己的短暂的一生是丑陋的, 你怎么舍得让自己短暂的一生, 只是在往下坠落, 即便是坠落, 也应该具有落日般的华丽吧, 你会漫漫的活成一束光, 谁若接近你, 就是接近光, 【人人都想向上,人人都想老而不衰,但现实是当你想活成一道光…

帕金森早期四大隐秘“预警灯“,你不可不知的健康警报!

在这个快节奏的时代,健康似乎成了我们最容易忽视却又最为宝贵的财富。今天,我们要揭开一个常被误解与忽视的医学领域——帕金森病。它不仅仅是老年人的专利,更可能在你我未曾留意的瞬间悄悄降临。了解帕金森早期的四个“信号”,就…

笔试练习day6

目录 大数加法题目解析解法代码 链表相加(二)题目解析解法逆序链表函数代码 大数乘法题目解析解法代码 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 🥸🥸🥸 C语言 &a…

ansible 配置

目录 1.集群自动化维护工具 ansible 2.ansible管理架构 3.安装ansible 4.Iventory主机模式 5.通过ping验证 6.ansible常用模块 7.命令行模块 7.1command模块 7.2shell模块 7.3scripts模块 7.4file模块 7.5copy模块​ 7.6yum模块 1.集群自动化维护工具 ansibl…

关于三维布尔运算的思考(2)

1.前言 三维布尔运算是几何内核的核心算法之一,博主前述文章中提到过布尔算法有多种,可以根据几何数据表达方式分为Brep布尔运算、CSG布尔运算、网格布尔运算等,而网格布尔运算又又多种,如BSP方式、八叉树方式,详细可参…

BFS 解决最短路问题详解

BFS 解决最短路问题 题目一:迷宫中离⼊⼝最近的出⼝1. 题⽬链接:2. 题⽬描述:3.算法思路:4.代码 题目二. 最⼩基因变化1. 题⽬链接:2. 题⽬描述:3.算法思路:4.代码 题目三:单词接⻰…

【WSL安装后,如何互相访问文件系统】

WSL安装后,无法访问linux文件系统 WSL的一个优点就是可以可以直接访问 Windows 文件系统,反之亦然,方便文件共享和操作。 那么安装好以后,WSL的linux文件系统的目录在磁盘哪个位置呢? 在 WSL 中,Linux 文…

【React】react项目中的redux使用

1. store目录结构设计 2. react组件中使用store中的数据——useSelector 3. react组件中修改store中的数据——useDispatch 4. 示例 react-basic\src\store\moduels\counterStore.js import { createSlice } from reduxjs/toolkitconst counterStore createSlice({name: cou…

数据结构-3.5.队列的顺序实现

一.队列的顺序实现&#xff0c;初始化操作以及判断队列是否为空&#xff1a; 1.图解&#xff1a; 2.代码&#xff1a; #include<stdio.h> #define MaxSize 10 //定义一个队列最多存储的元素个数 ​ typedef struct {int data[MaxSize]; //用静态数组存放队列元素int f…

UART 如何实现波特率自动检测原理介绍

为什么需要波特率自动检测机制 我们都知道&#xff0c;串口通讯是需要约定波特率才能够进行准确的通讯。此时假设&#xff0c;你们公司开发了一个板子&#xff0c;有一个串口与外接设备进行通讯。因为你们公司开发的产品要提供给多个客户&#xff0c;而有些客户可能之前就有一…

E9OA解决文档附件没有关联文档正文问题

业务背景&#xff1a; OA通知流程已经提交后在审批中发现漏上传了文档附件。临时放开审批结点文档附件编辑&#xff0c;请审批结点领导将附件上传后再审批。最终在流程中查看可以看到正文和附件&#xff0c;但是在通知文档正文中没有关联文档附件&#xff0c;导致大多数人员在通…

crypto-js解密报错malformed utf-8 data

在进行加解密处理时出现这个问题。 但是当在一个完整程序运行环境内加密字符串&#xff0c;解密字符串是没问题的。 当把加密的字符存储到txt文件&#xff0c;在读取解密时出现错误无法解密。 最后&#xff0c;使用res.replace(/\s/g,‘’)正则过滤掉txt文件内的空格就成功了。…

电商技术选型:Spring Boot在线商城系统

4 系统设计 ONLY在线商城系统的设计方案比如功能框架的设计&#xff0c;比如数据库的设计的好坏也就决定了该系统在开发层面是否高效&#xff0c;以及在系统维护层面是否容易维护和升级&#xff0c;因为在系统实现阶段是需要考虑用户的所有需求&#xff0c;要是在设计阶段没有经…

[ComfyUI]Flux:太美了!古风华服与现代DJ演绎。灼灼荷花瑞,亭亭出水中

大家好我是安琪&#xff01;&#xff01;&#xff01; F.1-汉服人像艺术-国风-氛围感 简介 今天介绍一款Flux LORA模型&#xff1a;F.1-汉服人像艺术-国风-氛围感-liangyi&#xff0c;这是一款以古代汉服女性写真为主题的Flux LORA模型。属于人物主体&#xff0c;增加中国传统…

Java项目实战II基于Java+Spring Boot+MySQL的学院班级回忆录(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 在时光的长河中&#xff0c;班级的记忆如同璀璨星辰&#xff0c;照亮了我们共同的青春岁月。为了珍藏…

Redis篇(应用案例 - 商户查询缓存)

目录 一、什么是缓存? 二、为什么要使用缓存 三、如何使用缓存 四、添加商户缓存 1. 缓存模型和思路 2. 代码如下 五、缓存更新策略 1. 内存淘汰 2. 超时剔除 3. 主动更新 六、数据库缓存不一致解决方案 1. 数据库缓存不一致解决方案 2. 数据库和缓存不一致采用什…

C++之STL—常用集合算法

set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest); // 求两个集合的交集 // **注意:两个集合必须是有序序列** // beg1 容器1开始迭代器 // end1 容器1结束迭代器 // beg2 容器2开始迭代器 // end2 容器2结束迭代器 //…

评估员工绩效的 5 个最佳实践

使用目标。 员工目标是设定期望和评估员工绩效的最有效、最客观的方式。由于目标是在年初或季度初由员工和经理共同制定的&#xff0c;因此双方可以在此过程中讨论他们期望在特定时期内完成的目标&#xff0c;并就成功的样子达成一致。 例如&#xff0c;如果内容营销人员的个人…