以前用过腾讯的TDSQL-MYSQL,TBASE,最近了解到TDSQL-C serverless,本次试验结合的AI大模型驱动来学习实战TDSQL-C serverless,体验服务化的数据库,和一句简单描述进行学生选课系统数据分析;
我使用的分析数据是基于学生选课系统,通过构建学生选课数据库表及数据来完成本次试验
TDSQL-C serverless产品介绍
TDSQL-C
云原生数据库 TDSQL-C(Cloud Native Database TDSQL-C)简称 TDSQL-C。TDSQL-C 是腾讯云自研的新一代高性能高可用的企业级分布式云数据库。融合了传统数据库、云计算与新硬件技术的优势,100%兼容 MySQL 和 PostgreSQL
- 采用存储和计算分离的架构,所有计算节点共享一份数据,提供秒级的配置升降级、秒级的故障恢复
- 既融合了商业数据库稳定可靠、高性能、可扩展的特征,又具有开源云数据库简单开放、高效迭代的优势。TDSQL-C MySQL 版引擎完全兼容原生 MySQL,您可以在不修改应用程序任何代码和配置的情况下,将 MySQL 数据库迁移至 TDSQL-C MySQL 版引擎。
- 自研引擎 LibraDB 提供高效率的复杂数据分析查询,针对业务系统中包含的复杂 SQL 查询、多维数据读取、实时数据分析等场景提供卓越的性能体验
Serverless 服务
腾讯云自研的新一代云原生关系型数据库 TDSQL-C MySQL 版的无服务器架构版,是全 Serverless 架构的云原生数据库,腾讯云针对中小型企业或个人开发者推出的一款数据库,提供了CPU、内存的实时弹性能力,构建了云架构下的数据库产品新形态。
特性:
1、实例创建快速:用户能够在控制台轻松完成数据库申请和创建,数据库实例在几分钟内即可准备就绪并投入使用。
2、高可靠:具有故障自动单点切换、数据库自动备份等功能,保证实例高可用和数据安全。
3、低成本:支付的费用远低于自建数据库所需的成本,用户可以根据需求选择不同套餐,以很低的价格得到一整套专业的数据库支持服务。
高性能应用服务(Hyper Application Inventor,HAI)
高性能应用服务(Hyper Application Inventor,HAI)是一款面向AI、科学计算的GPU算力服务产品,提供即插即用的澎湃算力与常见环境。助力中小企业及开发者快速部署LLM、AI作画、数据科学等高性能应用,原生集成配套的开发工具与组件,大幅提高应用层的开发生产效率。
应用场景
1、AI 作画/设计
设计师和开发者可以使用高性能应用服务 HAI 快速地部署和优化 AI 绘画模型。高性能应用服务 HAI 预置 Stable Diffusion 等主流 AI 作画模型及常用插件,提供 GUI 图形化界面即开即用,大幅降低上手门槛。
2、AI 对话/写作
研究者和开发者可以使用高性能应用服务 HAI 快速部署和运行大型语言模型,如 LLAMA2、ChatGLM 等,进行自然语言处理任务,如文本生成、情感分析、文本分类等。高性能应用服务 HAI 提供的算力支持和优化环境确保了语言模型可以在最短的时间内进行部署,同时还能保持高稳定性和可靠性。
3、AI 开发测试
高性能应用服务 HAI 的预配置环境支持大多数流行的 AI 框架和工具,如 TensorFlow、PyTorch 等,使得开发者可以专注于算法设计和模型优化。AI 研究者可以在高性能应用服务 HAI 上进行模型的开发、训练、测试和优化,无需担心硬件兼容性和软件配置问题。如新算法的原型开发、模型微调与迁移学习、深度学习框架的交叉测试等。
4、数据科学
数据科学家们可使用高性能应用服务 HAI,快速进行数据分析和图标处理。高性能应用服务 HAI 预置了 Notebook、Python 环境,以及主流分析软件。
如果想要了解更多可以移步官方文档。
AI 驱动的数据库 TDSQL-C 学生选课数据分析系统
1、试验介绍
基于 TDSQL-C Mysql Serverless 快速搭建 AI学生选课数据分析系统,通过 Python 编程语言和基于 Langchain 的框架,逐步引导开发者完成系统的构建和部署。
2、python环境部署
为了节约使用TDSQL-C Mysql Serverless和高性能应用服务(Hyper Application Inventor,HAI)时间,我们先把python环境准备好
安装python环境直接官网下载安装包就可以不再赘述
下载地址:https://www.python.org/downloads/release/python-31011/
推荐3.10.11
运行pip命令安装依赖包,
国内源下载比较慢,耽误时间比较多,推荐几个国内的源
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple
豆瓣:http://pypi.douban.com/simple
例子
pip install openai -I https://pypi.tuna.tsinghua.edu.cn/simple
在cmd下请分别运行以下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
3、购买 TDSQL-C Mysql Serverless 实例
访问腾讯云官网申请 TDSQL-C Mysql 服务器
点击链接:https://cloud.tencent.com/product/tdsqlc
选定的服务器为 serverless 的服务器,(私有网络新账号一般都没有,需要新建vpc私有网络)
点击新建私有网络创建私有vpc网络
设置数据库密码与配置信息并购买(大小写选择不敏感)
前往数据库管理界面选择指定区域的 TDSQL-C Mysql 服务器
开启实例公网访问
登录在线管理工具
新建数据库 school,并导入数据表
将以下选课系统的SQL复制到SQL执行窗口,确保当前数据库选中 school
CREATE TABLE students (
student_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '学生ID',
name VARCHAR(50) NOT NULL COMMENT '学生姓名',
age INT COMMENT '年龄',
major VARCHAR(100) COMMENT '专业',
email VARCHAR(100) UNIQUE COMMENT '电子邮件'
);
INSERT INTO students (name, age, major, email) VALUES
('张三', 20, '计算机科学', 'zhangsan@example.com'),
('李四', 21, '电子工程', 'lisi@example.com'),
('王五', 19, '数学', 'wangwu@example.com'),
('赵六', 22, '物理', 'zhaoliu@example.com'),
('钱七', 20, '化学', 'qianqi@example.com'),
('孙八', 21, '生物', 'sunba@example.com'),
('周九', 19, '历史', 'zhoujiu@example.com'),
('吴十', 22, '哲学', 'wushi@example.com'),
('郑十一', 20, '艺术', 'zhengshiyi@example.com'),
('王十二', 21, '音乐', 'wangshier@example.com'),
('陈十三', 19, '体育', 'chenshisan@example.com'),
('冯十四', 22, '英语', 'fengshisi@example.com'),
('董十五', 20, '法语', 'dongshiwu@example.com'),
('萧十六', 21, '德语', 'xiaoshiliu@example.com'),
('曹十七', 19, '日语', 'caoshiqi@example.com'),
('许十八', 22, '韩语', 'xushiba@example.com'),
('蒋十九', 20, '西班牙语', 'jiangshijiu@example.com'),
('沈二十', 21, '意大利语', 'shenshier@example.com'),
('韩二十一', 19, '心理学', 'hanershiyi@example.com'),
('杨二十二', 22, '社会学', 'yangershi@example.com');
CREATE TABLE courses (
course_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '课程ID',
course_name VARCHAR(100) NOT NULL COMMENT '课程名称',
credits INT COMMENT '学分',
teacher_id INT COMMENT '教师ID'
);
INSERT INTO courses (course_name, credits, teacher_id) VALUES
('数据结构', 4, 1),
('微积分', 3, 2),
('编程基础', 3, 3),
('物理实验', 2, 4),
('化学原理', 3, 5),
('生物技术', 4, 6),
('历史概论', 2, 7),
('哲学思考', 3, 8);
CREATE TABLE enrollments (
enrollment_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '选课记录ID',
student_id INT NOT NULL COMMENT '学生ID',
course_id INT NOT NULL COMMENT '课程ID',
grade FLOAT COMMENT '成绩'
);
INSERT INTO enrollments (student_id, course_id, grade) VALUES
(1, 1, 85.5),
(2, 2, 90.0),
(3, 3, 78.5),
(4, 4, 82.0),
(5, 5, 88.5),
(6, 6, 75.0),
(7, 7, 80.5),
(8, 8, 87.0),
(9, 1, 81.0),
(10, 2, 85.5),
(11, 3, 79.0),
(12, 4, 83.0),
(13, 5, 86.5),
(14, 6, 77.0),
(15, 7, 82.5),
(16, 8, 88.0),
(17, 1, 84.0),
(18, 2, 87.5),
(19, 3, 80.0),
(20, 4, 85.0),
(21, 5, 83.5),
(22, 6, 78.0),
(23, 7, 81.5),
(24, 8, 86.0),
(25, 1, 82.0),
(26, 2, 84.5),
(27, 3, 79.5),
(28, 4, 83.0),
(29, 5, 86.5),
(30, 6, 77.5);
4、部署HAI高算力服务器
访问腾讯云 HAI
官网
官网地址:https://cloud.tencent.com/product/hai
点击立即使用
点击新建按钮,新建服务器(费用会在新建服务器并使用后才开始计费)
根据配置需求选择算力服务器(安土上选择,存储选择最小就可以),然后点击立即购买
查看HAI
算力服务器的llama
对外端口并检查是否已经默认开放 6399端口,如下状态即是开放
5、应用构建
python客户端工具可以用PyCharm,vscode,甚至可以直接用文本编辑器
1、新建名为 workspace
文件夹进行保存项目代码
创建一个工作文件夹,位置自定即可
2、在项目文件夹(workspace)中新建配置文件 config.yaml
打开 config.yaml 文件,复制以下内容到配置文件中:
database:
db_user: root
db_password: oracle123!
db_host: bj-cynosdbmysql-grp-80oh0z5q.sql.tencentcdb.com
db_port: 25930
db_name: school
hai:
model: llama3.1:8b
base_url: http://49.232.184.109: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
可以在集群列表中找到
3、在项目文件夹(workspace)中新建应用主文件 text2sql2plotly.py
将以下程序代码复制并保存到 text2sql2plotly.py
文件中
(修改代码这个位置为自己的系统名称:streamlit.title('AI驱动的数据库TDSQL-C 选课系统分析小助手'))
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)
4、运行程序并测试结果
打开终端cmd执行以下命令
streamlit run text2sql2plotly.py
执行命令后会有一个email提示直接回车即可
命令运行后在浏览器中打开UI界面
5、效果展示
在窗口输入:每门课程名称的最高分是多少
6、清理资源
1、删除TDSQL-C Serverless
点击退还实例,退还后实例会状态为隔离中,会放在回收站中,可以在回收站删除
2、 删除 HAI 算力
7、实验总结
随着 AI 技术的不断发展和普及,TDSQL-C Serverless 和 HAI 服务的结合将在更多领域发挥重要作用。未来,我们可以期待更多创新的应用场景和解决方案的出现,为企业数字化转型和智能化升级提供更加有力的支持。同时,随着技术的不断进步和成本的进一步降低,该方案将更加普及和实用化,为更多中小企业和个人开发者带来便利和收益。
但是身为一个技术人员,感觉到了深深的压力,AI技术的发展真的是冲击着各行各业,以前报表产出最少开发通过sql,加数据可视化来实现,AI技术加上serverless数据库,哪怕没有经验的人都可以随随便便实现,数据库是服务即开即用,一句简单的描述即可实现数据分析报表展现,学无止境
学习收获:
-
云原生数据库的优势:通过使用
TDSQL-C MySQL Serverless
,我们体验了云原生数据库在处理大规模数据时的弹性和高性能,这对于数据库系统分析尤为重要。 -
GPU加速的AI模型:
HAI
提供的GPU
加速能力显著提升了AI模型的训练和推理速度,使得系统能够快速响应市场变化和用户需求。 -
实战演练的价值:通过具体的案例研究,开发者不仅理解了理论知识,还通过实际操作加深了对系统功能的认识。
-
持续学习与改进:实验的总结也指出了系统可能存在的局限性和改进空间,鼓励开发者持续学习最新的技术和方法,以不断优化和升级系统。