AI驱动TDSQL-C Serverless 数据库技术实战营-与AI的碰撞
目录
一、简介
二、实验介绍
三、结果展示
四、实操指导
4.1 系统设计
4.2 环境搭建(手把手教程)
4.3 应用构建
4.4 效果展示
4.5 踩坑避雷总结
五、清理资源
5.1 删除TDSQL-C Serverless
5.2 删除 HAI 算力
六、实验总结归纳
一、简介
本文主要介绍的是AI驱动的数据库TDSQL-C 操作与电商可视分析。在当今时代,人工智能技术的广泛应用正以其卓越的数据处理能力,为电子商务行业带来革命性的变革。AI技术不仅极大提升了运营流程的效率,更在个性化推荐、用户行为分析、库存管理和市场趋势预测等电商核心领域展现出了不可替代的数据分析优势。在这样的大背景下,打造一个既高效又可靠的AI电商数据分析系统,已经成为行业发展的关键任务。这一系统将能够精准捕捉消费者需求,优化库存策略,并预测市场动向,从而为企业在激烈的市场竞争中赢得先机。
这次的服务大家主要是通过 Python
编程语言和基于 Langchain
的框架,逐步引导开发者完成系统的构建和部署。对于没有开发经验的友友们来说,只要安装按照文章步骤来操作也是没有问题的哦!
二、实验介绍
实验主要是利用腾讯云的高性能应用服务——HAI(高性能AI服务)和TDSQL-C MySQL Serverless版,来构建一个先进的AI电商数据分析解决方案。
HAI,作为一款专为AI和科学计算量身定制的GPU应用服务,具备强大的计算肌肉,能够轻松处理包括大型语言模型(LLM)在内的复杂AI模型,实现快速部署和高效运行,为自然语言处理和图像生成等尖端应用提供强大动力。
TDSQL-C MySQL版,云原生关系型数据库,以其原生的云架构和对MySQL的100%兼容特性,提供了无与伦比的弹性、卓越的性能和稳固的可用性。这些特性使得TDSQL-C MySQL版电商领域海量数据存储和查询的不二之选,尤其适合处理高强度的业务场景。
接下来让我们基于TDSQL-C Mysql Serverless
快速搭建 AI电商数据分析系统,主要是构建流程为:
1、程序流程图设计
2、
TDSQL-C Mysql Serverless
搭建3、
HAI llama
大模型部署4、开发环境搭建
5、AI电商数据分析系统构建
三、结果展示
四、实操指导
看完前面的介绍之后,开始实验操作之前,需要准备好一些开发环境,不然可能会像我一样,Python软件的版本和实验环境版本不一致,防止环境搭建出问题,还是先下载好实验推荐的版本Python 3.10.11版本的,官网下载就行(下面会写下载安装详细流程)。
4.1 系统设计
4.2 环境搭建(手把手教程)
4.2.1 购买 TDSQL-C Mysql Serverless 实例
1、在腾讯云官网申请 TDSQL-C Mysql
服务器
官方地址为:https://cloud.tencent.com/product/tdsqlc
点击立即选购。
2、根据图表信息选定相应的服务器
我们在选择网络的时候没有私网的会加载不出来,这个时候我们需要自己新建网络,点击图片中的新建子网络:
3、新建子网络
然后我们开始创建自己的字网络:可以参照我的选择,ip地址和子网,也可以根据自己的来定义都行,可用区是选择自己所在区域。
然后点击确定,我们就可以看到我们自己的私有网络啦
然后回到服务器申请界面继续操作,然后就能选择我们自己的私有网络了。
然后点击下一步。
4、设置数据库密码与配置信息
然后这里主要是要设置数据库密码,这里的密码根据要求设置就行,设置完之后尽量备份一下,后面登录数据库是需要用到的。
5、点击立即购买
点击的时候会跳出套餐的价格,这个一般我们测试搭建的话,上面的费用显示都是一样,而且也不用担心,会扣费,但是扣的一点都不多,所以可以大胆选择。
6、前往数据库管理界面
购买完成之后,前往数据库管理界面。
7、管理页面中选择指定区域的 TDSQL-C Mysql
服务器
到管理界面,我们可以看到我们已经购买的服务器,左上角可以选择已经购买的不同区域的服务器,服务器下会展示的区域后面的数字表示已经购买的服务器的数量。
8、点击开启实例公网访问
9、授权并创建
授权并创建之后,记得备份外主机和端口信息,后面搭建的时候配置需要用到这个信息。
10、登录在线管理工具
11、新建数据库:shop
选择新建的数据库shop
12、导入数据表
选择shop数据库,然后点击新建SQL查询窗口。
将以下SQL复制到SQL执行窗口,确保当前数据库选中 shop,然后点击执行。
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
官网
官网地址:https://cloud.tencent.com/product/hai
2、点击立即使用
服务授权点击同意:
3、新建服务器
点击新建,费用会在新建服务器并使用后才开始计费
4、根据配置需求选择算力服务器
然后点击立即购买,等待创建就行,创建成功之后进行下一步操作。
5、查看HAI
算力服务器的llama
对外端口
检查是否已经默认开放 6399端口,如下状态即是开放:
6399端口开放的情况:可以直接进行到下一步Python环境的搭建,然后记得公网IP备份一下,后面需要用到的。
6399端口未开放的情况:需要新建配置进行协议配置。
入站规则来源选择 all
,协议输入 tcp:6399
6、浏览器中模型服务配置成功测试
使用刚刚备份的公网ip和端口在浏览器中测试,如果看到以下信息说明ollama服务已经对外监听,可以外部连接服务器的ollama。
到这里恭喜你,llama
大模型服务准备完毕!
4.2.3 本地python环境搭建
1、访问python
官网,并下载符合自己服务器的python版本(推荐3.10.11)
下载地址:https://www.python.org/downloads/release/python-31011/
如果上面那个地址打不开的也可以换这个网站:https://www.python.org/downloads/windows/
2、双击安装包安装python
window
版本需要勾选 add python to PATH
,安装的时候可以选择默认的勾选,然后下一步下一步,然后记一下软件的安装路径。
3、使用pip安装程序使用的依赖包文件
打开电脑终端:
- window系统:右键点击开始图标,选择运行,输入cmd,回车后打开终端
- win键+R
- macos系统:在app界面选择终端(通常系统默认放在其他的选项集合中)
我的是Windows系统,以下就以Windows系统的操作记录。
4、pip安装软件依赖包。
运行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 搭建项目框架
- 新建名为
workspace
文件夹进行保存项目代码 - 在项目文件夹(workspace)中新建配置文件 config.yaml
- 在项目文件夹(workspace)中新建应用主文件 text2sql2plotly.py
1、新建名为 workspace
文件夹进行保存项目代码。
文件名可以自己定义。我自己用的是project1。
2、在项目文件夹(workspace)中新建配置文件 config.yaml
新建文件之后,将文件名称改为config.yaml。
3、在项目文件夹(workspace)中新建应用主文件 text2sql2plotly.py
4.3.2 TDSQL-C 数据库&HAI云算力配置
打开 config.yaml 文件,复制以下内容到配置文件中:这里需要注意以下复制的内容需要改成自己的最开始配置服务器的时候设置的。!!!牢记格式不能乱,我自己踩过坑!!!
database: db_user: rootdb_password: tencent_TDSQLdb_host: sh-cynosdbmysql-grp-9d8prc9o.sql.tencentcdb.comdb_port: 21919db_name: shophai:model: llama3.1:8bbase_url: http://82.156.229.112:6399
这里主要分为 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
的控制台-> 算力管理中找到
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 matplotlibyaml_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)
然后打开终端执行命令:
打开Python软件终端的方式:
- View--Tool Windows--Terminal
- 快捷键:Alt+F12
我们可以在这里先测试一下安装的python软件版本,输入命名测试一下版本
(venv) D:\sc\pythonProject1>python --version
Python 3.10.11
执行以下命令:
(venv) D:\sc\pythonProject1>streamlit run text2sql2plotly.pyYou can now view your Streamlit app in your browser.Local URL: http://localhost:8501Network URL: http://192.168.0.108:8501
然后再这个界面运行成功了,程序在加载后台数据了,这时会跳转到一个默认的浏览器中展示出web页面,我这里是跳转到默认的最老的浏览器中,所以加载会特别慢,我们可以自己复制网址到其他浏览器中打开界面。
到这个查询界面,就说明我们这个搭建就基本上完成了!接下来看查询结果。
4.4 效果展示
1、输入:查询用户信息
测试效果
输入:查询一下每类商品的名称和对应的销售总额
测试效果
4.5 踩坑避雷总结
1、首先我们写入的代码一点要全哈,不然容易缺胳膊少腿的,可以直接复制我的代码粘贴。
2、写入yaml文件的格式要对,好好检查!不然容易出现像我一样的 “:”格式不正常
3、就是输入问题之后会出现各种异常问题,出现类似于下面的问题就不用管,多次反复点击查询直到出现正确的结果。
友情提示:目前不可能做到每次查询都完全没问题,这个取决于多方面的因素:
例如:大语言模型(llm)的模型大小、查询描述的准确性(歧义等沟通问题)等
出现以上这些错误不用管,再次查询
直到出现这个,就说明你成功了!!
推荐的几个查询操作:
- 查询每个用户账号的名称和长度
- 查询一下每类商品的名称和对应的销售总额
- 查询出用户赵强的已支付订单的总额和未支付订单的总额数据
五、清理资源
5.1 删除TDSQL-C Serverless
我们现在要去删除资源了,如果刚刚配置的界面找不到了,可以去我的主页--左上角三条杠那里,选择最近访问页面,里面就有我们刚刚配置的界面信息。
点击退还实例,退还后实例会在回收站中。
点击回收站即可看到已被退还的实例,为了数据安全,实例默认会在回收站中保留3天,如不需要可以进行立即释放。
5.2 删除 HAI 算力
到算力管理那里,点击销毁。
六、实验总结归纳
在本次实验中,我们有效地运用了腾讯云的TDSQL-C MySQL Serverless数据库和高性能应用服务HAI,打造了一个既高效又具备良好扩展性的人工智能电商数据分析解决方案。实验的主要成果和学习经验如下:
- 云原生数据库的优势:利用腾讯云的TDSQL-C MySQL Serverless,我们深刻体会到了云原生数据库在处理海量数据时所展现的灵活性与卓越性能,这对于电商数据的分析至关重要。
- AI模型的GPU加速:借助HAI的GPU加速功能,AI模型的训练和推理效率得到了显著提升,这使得我们的系统能够迅速适应市场动态和用户需求的变化。
- 实践操作的重要性:通过实际案例的深入研究,开发人员不仅掌握了理论知识,还通过亲身实践增强了对系统功能的理解和应用。
- 持续的学习和优化:实验的反馈也揭示了系统当前的局限和潜在的改进方向,激励开发者持续追踪最新技术趋势,学习新方法,以推动系统的持续改进和升级。
随着技术的持续发展,我们对未来实验中能够探索的创新机遇充满期待。同时我们也可以一起挖掘TDSQL-C Serverless与AI结合的更多应用场景,共同推动行业发展和技术创新!希望AI在电商行业拥有更广阔的前景!
相关文章:
AI驱动TDSQL-C Serverless 数据库技术实战营-与AI的碰撞
目录 一、简介 二、实验介绍 三、结果展示 四、实操指导 4.1 系统设计 4.2 环境搭建(手把手教程) 4.3 应用构建 4.4 效果展示 4.5 踩坑避雷总结 五、清理资源 5.1 删除TDSQL-C Serverless 5.2 删除 HAI 算力 六、实验总结归纳 一、简介 本…...
C++之String类(上)
片头 嗨!好久不见~ 今天我们来学习C的Sting类,不过,在学习它之前,我们先来对STL库有一个简单的了解。 STL(standard template library--标准模板库),是C标准库的重要组成部分,不仅是…...
kubernets基础-ingress详细介绍
文章目录 什么是IngressIngress详细说明Ingress示例 Ingress控制器Ingress控制器的工作原理Ingress控制器的特点常见的Ingress控制器 Ingress关联Ingress控制器一、Ingress资源对象二、Ingress控制器三、Ingress与Ingress控制器的关联方式四、注意事项 多实例部署一、Ingress多…...
jenkins部署Maven和NodeJS项目
在 Java 项目开发中,项目的编译、测试、打包等是比较繁琐的,属于重复劳动的工作,浪费人力和时间成本。以往开发项目时,程序员往往需要花较多的精力在引用 jar 包搭建项目环境上,跨部门甚至跨人员之间的项目结构都有可能…...
在unity资源中发现无效引用
本文主要解决在不打开unity的情况下搜索出无效引用的资源的方法 1. 概述 一般只要遍历一下目录里所有资源,判空一下就好了但有些情况下,不希望打开unity, 尤其希望是在资源整合时,想更快验证资源的合法性, 这对合并提交及出包验证时,都要较大的需求 2. 简单的验证方法 简单来…...
C#知识|基于反射和接口实现抽象工厂设计模式
哈喽,你好啊,我是雷工! 01 应用场景 在项目的多数据库支持上、业务的多算法封装、以及各种变化的业务中; 02 抽象工厂组成 抽象工厂包括抽象产品(即业务接口,可以通过抽象类或抽象接口设计)…...
【分布式微服务云原生】gRPC vs RPC:深入探索远程过程调用的现代与经典
摘要 在分布式系统的世界里,gRPC和RPC是两个耳熟能详的术语,但它们之间有何区别和联系?本文将深入探讨gRPC和RPC的概念、关键特性、以及它们在现代软件开发中的应用。你将了解到gRPC如何作为RPC的一种实现,提供高性能的跨语言远程…...
听说这是MATLAB基础?
MATLAB(矩阵实验室)是一个强大的高性能计算环境和编程语言,广泛应用于数学计算、算法开发、数据分析、可视化以及模拟等多个领域。以下是MATLAB的一些基础知识,涵盖其功能、语法、基本操作等方面。 1. MATLAB环境 工作区…...
【CSS/HTML】圣杯布局和双飞翼布局实现两侧宽度固定,中间宽度自适应及其他扩展实现
前沿简介 圣杯布局和双飞翼布局是前端重要的布局方式。两者的功能相同,都是为了实现一个两侧宽度固定,中间宽度自适应的三栏布局。 圣杯布局来源于文章In Search of the Holy Grail,双飞翼布局来源于淘宝UED。 两者的实现方式有差异,但是都…...
数据流和数据流处理技术
一数据流 首先明确数据流概念:数据流是连续不断生成的、快速变化的无界数据序列 数据流类型: 数据流大致可以分为四种类型 1.连续型数据流:不断地产生数据,数据稳定速度输入系统。 2.突发型数据流:在某特定时间或…...
(IDEA)spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案
系列文章目录 文章目录 系列文章目录一、(IDEA)spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案1.资料 一、(IDEA)spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案 1.资料…...
解决TikTok无网络连接问题解析
随着社交媒体的快速发展,TikTok已成为全球用户最喜欢的短视频平台之一,吸引了数以亿计的用户。然而,在享受这个平台时,用户经常会遇到无网络连接的问题,这不仅影响观看体验,还可能导致无法上传内容或参与社…...
k8s中,ingress的实现原理,及其架构。
图片来源:自己画的 图片来源:k8s官网 首先,什么是ingress? 是服务还是控制器? 都不精确 ingress是一个api资源 service和deployment也是api资源。 这几个相互协作,组建成一个对外提供服务的架构。 ingress提供的…...
【数据结构强化】应用题打卡
应用题打卡 数组的应用 对称矩阵的压缩存储 注意: 1. 2.上三角的行优先存储及下三角的列优先存储与数组的下表对应 上/下三角矩阵的压缩存储 注意: 上/下三角压缩存储是将0元素统一压缩存储,而不是将对角线元素统一压缩存储 三对角矩阵的…...
解决 MySQL 服务无法启动:failed to restart mysql.service: unit not found
目录 前言1. 问题描述2. 问题分析3. 解决步骤3.1 检查 MySQL 服务文件3.2 备份旧的服务文件3.3 启动 MySQL 服务3.4 验证服务状态 4. 总结结语 前言 在日常使用 MySQL 数据库时,有时候可能会遇到服务无法正常启动的问题。这类问题通常出现在系统更新或者服务配置文…...
Dubbo和Http的调用有什么区别
背景 我们在项目开发中,需要进行调用外部接口时,往往使用Dubbo和Http方式都能实现远程调用。那么他们在使用上,有什么区别呢? 定位不同 一个是分布式环境下的框架,一个是通信协议。 Dubbo:是一种高性能的…...
ARM 架构、cpu
一、ARM的架构 ARM是一种基于精简指令集(RISC)的处理器架构. 1、ARM芯片特点 ARM芯片的主要特点有以下几点: 精简指令集:ARM芯片使用精简指令集,即每条指令只完成一项简单的操作,从而提高指令的执行效率…...
【React】入门Day03 —— Redux 与 React Router 核心概念及应用实例详解
1. Redux 介绍 // 创建一个简单的Redux store const { createStore } Redux;// reducer函数 function counterReducer(state { count: 0 }, action) {switch (action.type) {case INCREMENT:return { count: state.count 1 };case DECREMENT:return { count: state.count -…...
u2net网络模型训练自己数据集
单分类 下载项目源码 项目源码 准备数据集 将json转为mask json_to_dataset.py import cv2 import json import numpy as np import os import sys import globdef func(file):with open(file, moder, encoding"utf-8") as f:configs json.load(f)shapes configs…...
登录功能开发 P167重点
会话技术: cookie jwt令牌会话技术: jwt生成: Claims:jwt中的第二部分 过滤器: 拦截器: 前端无法识别controller方法,因此存在Dispa什么的...
数据架构图:从数据源到数据消费的全面展示
在这篇文章中,我们将探讨如何通过架构图来展示数据的整个生命周期,从数据源到数据消费。下面是一个使用Mermaid格式的示例数据架构图,展示了数据从源到消费的流动、处理和存储过程。 数据架构图示例 说明 数据源:分为内部数据源&…...
useEffect 与 useLayoutEffect 的区别
useEffect 与 useLayoutEffect 的区别 useEffect和useLayoutEffect是处理副作用的React钩子函数,有以下区别1. 执行时机不同2. 对性能影响不同3. 对渲染的影响不同:4. 使用场景不同 使用建议 useEffect和useLayoutEffect是处理副作用的React钩子函数&…...
OPENCV判断图像中目标物位置及多目标物聚类
文章目录 在最近的项目中,又碰到一个有意思的问题需要通过图像算法来解决。就是显微拍摄的到的医疗图像中,有时候目标物比较偏,也就是在图像的比较偏的位置,需要通过移动样本,将目标物置于视野正中央,然后再…...
分布式理论:拜占庭将军问题
分布式理论:拜占庭将军问题 介绍拜占庭将军的故事将军的难题 解决方案口信消息型拜占庭问题之解流程总结 签名消息型拜占庭问题之解 总结 介绍 拜占庭将军问题是对分布式共识问题的一种情景化描述,由兰伯特于1082首次发表《The Byzantine Generals Prob…...
从零开始Ubuntu24.04上Docker构建自动化部署(三)Docker安装Nginx
安装nginx sudo docker pull nginx 启动nginx 宿主机创建目录 sudo mkdir -p /home/nginx/{conf,conf.d,html,logs} 先启动nginx sudo docker run -d --name mynginx -p 80:80 nginx 宿主机上拷贝docker上nginx服务上文件到本地目录 sudo docker cp mynginx:/etc/nginx/ngin…...
阿里云 SAE Web:百毫秒高弹性的实时事件中心的架构和挑战
作者:胡志广(独鳌) 背景 Serverless 应用引擎 SAE 事件中心主要面向早期的 SAE 控制台只有针对于应用维度的事件,这个事件是 K8s 原生的事件,其实绝大多数的用户并不会关心,同时也可能看不懂。而事件中心,是希望能够…...
人口普查管理系统基于VUE+SpringBoot+Spring+SpringMVC+MyBatis开发设计与实现
目录 1. 系统概述 2. 系统架构设计 3. 技术实现细节 3.1 前端实现 3.2 后端实现 3.3 数据库设计 4. 安全性设计 5. 效果展示 编辑编辑 6. 测试与部署 7. 示例代码 8. 结论与展望 一个基于 Vue Spring Boot Spring Spring MVC MyBatis 的人口普查管理…...
使用VBA快速将文本转换为Word表格
Word提供了一个强大的文本转表格的功能,结合VBA可以实现文本快速转换表格。 示例文档如下所示。 现在需要将上述文档内容转换为如下格式的表格,表格内容的起始标志为。 示例代码如下。 Sub SearchTab()Application.DefaultTableSeparator "*&quo…...
力扣题解1870
这道题是一个典型的算法题,涉及计算在限制的时间内列车速度的最小值。这是一个优化问题,通常需要使用二分查找来求解。 题目描述(中等) 准时到达的列车最小时速 给你一个浮点数 hour ,表示你到达办公室可用的总通勤时…...
D3.js数据可视化基础——基于Notepad++、IDEA前端开发
实验:D3.js数据可视化基础 1、实验名称 D3数据可视化基础 2、实验目的 熟悉D3数据可视化的使用方法。 3、实验原理 D3 的全称是(Data-Driven Documents),是一个被数据驱动的文档,其实就是一个 JavaScript 的函数库,使用它主要是用来做数据可视化的。本次实…...
小企业网站建设的小知识/杭州排名优化公司
很久了一直思考程序员应该先学哪门编程语言,必须掌握哪些编程语言,如何一个学习顺序。正好看到金老师也在研究第一门编程语言选谁(http://blog.csdn.net/bitfan/article/details/7939691),在此也表达一下个人看法。 金老师说到的第一门编程语…...
网站制作好学吗/无锡网络公司
在学习对象数组的时候,对这对象内保存数据的方法比较感兴趣,于是执行了一遍书上给的代码。 function weekTemps(){this.dataStore[];this.addadd;this.averageaverage;}function add(temp){this.dataStore.push(temp);}function average(){var total0;fo…...
做网站企业经营范围/专门的网页制作工具有
开始之前先明白两个概念: 进程之间是天然数据隔离的 线程之间是资源数据共享的 这时候问题来了,如果想要进程之间数据共享,我们就必须借助队列Queue,queue相当于管道和锁的结合。 现在开始硬菜来了,线程既然是数据共享…...
佛山优化公司推广/朝阳seo推广
2019独角兽企业重金招聘Python工程师标准>>> 前段时间,在现网的error.log日志中出现了很多如下的异常 redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool <bean id"jedisPool"class"…...
个人网站设计教程/游戏代理怎么做
文章目录运行环境:思路:1.1 设置固定IP2.1 修改hosts文件3.1 检查是否成功通信4.1 修改bashrc5.1 演示运行环境: ubuntu20.04 noetic 宏基暗影骑士笔记本 思路: 主机启动roscore和乌龟速度订阅节点,从机启动乌龟键盘…...
广州网站建站公司/搜索引擎的四个组成部分及作用
编写Java程序,使用循环结构打印出九九乘法表 效果如下: 实现代码: public class Multiplication99 {public static void main(String[] args) {for (int num1 1; num1 <9; num1) {for (int num2 1; num2 < num1; num2) {System.out.…...