腾讯云TDSQL-C MySQL Serverless和HAI应用助力电商企业AI海报文案和“数据飞轮”分析方案最佳实践落地
Ollama是一个开源的大模型管理工具,提供了丰富的功能,包括模型的训练、部署、监控等。通过Ollama,你可以轻松地管理本地的大模型,提高模型的部署效率。ChatOllama是一个开源的大模型聊天机器人框架,它允许开发者基于自己的数据集训练出定制化的对话模型,基于大规模对话数据集进行训练,采用高效的算法和硬件加速技术,确保模型训练和推理的速度。
前言:
近年来,随着深度学习、大数据、人工智能、AI等技术领域的不断发展,机器学习是目前最火热的人工智能分支之一,是使用大量数据训练计算机程序,以实现智能决策、语音识别、图像处理等任务,各种AI技术与产品层出不穷,怎么样结合自身公司业务打造一个AI智能平台呢?
1. AI海报与分享文案生成:
通过TDSQL-C MySQL Serverless存储活动相关提示词,再生成活动任务,通过腾讯云HAI Llama3.1 8B项目的ChatOllama大模型来进行提示词文案解析再生成相关内容,可以通过AI生成海报与分享文案提高文案编辑人员的效率,降低人力成本。
2. AI数据飞轮驱动数据分析:
结合腾讯云HAI提供的各种开箱即用的AI 大模型,降低数据使用门槛,业务人员通过自然语言AI对话即可完成围绕业务指标的分析和洞察,对话内容可保存成文档用于工作汇报,或创建仪表盘进行持续的数据变化跟踪,大幅提升工作效率。
3. AI智能客服查询系统:
结合腾讯云HAI提供的各种开箱即用的AI Llama大模型,通过结合自然语言处理等先进技术,实现与客户之间的自然语言交互,从而提供高效、便捷的客户服务。可以快速响应客户请求,有效解决客户问题,提升服务效率,同时,帮助企业实现自动化办公,降低运营成本。
4. 腾讯云TDSQL-C MySQL Serverless饮水式弹性付费使用:
在业务波动较大的场景下,普通数据库实例和TDSQL-C MySQL Serverless数据库实例资源使用和规格变化情况,可以看出普通实例在波谷期浪费的资源较多,在高峰期资源不足会导致客户业务受损,而TDSQL-C MySQL Serverless数据库实例凭借其极致的弹性,完美的支持了客户不同时段的业务负载,并且在最大程度上避免了资源的浪费,节省了大量的成本。
一、使用腾讯云HAI + TDSQL-C MySQL Serverless实现AI海报文案智能生成:
互联网产品的核心就是流量生意,由于运营活动部门,主要负责公司的活动策划与方案落地,高效的拉来流量并进行转化,经常需要使用小程序中的海报功能用于业务推广,而且活动的类型也比较繁杂,比如清理库存、新品上市、阶梯式折扣、促销活动、秒杀活动等等。
但是,想要写好海报文案和分享文案需要很多技巧,以确保信息清晰、吸引人,并能有效传达意图。同时,也需要花费大量的时间来思考,通常运营人员需要大量百度一些文案来参考,非常的耗费时间、人力、资源。
【实验手册思维发散】:
既然实验手册能通过自然语言AI生成需要分析的SQL语句,那么是不是可以通过一些提示词来给AI来生成所需要的海报、分享的文案呢?顺着这个思路,马上把实验手册Demo的示例改改来实现一下,思路是如下:
- ①. 定义好提示词,即生成文案的主题、使用场景、受众等信息。
- ②. 通过ChatOllama模型来AI生成相关需要的海报、分享的文案。
由于也是刚刚接触AI相关的技术领域,对于代码不是很熟悉,刚好腾讯云出品了一款“AI代码助手”,让他来帮助我们一起来帮我学、帮我做、帮我写,有效的加快我们学习的步伐,通过简单的嵌套VsCode IDE中使用,非常方便。
1. 什么是ChatOllama?
Ollama是一个开源的大模型管理工具,提供了丰富的功能,包括模型的训练、部署、监控等。 通过Ollama,你可以轻松地管理本地的大模型,提高模型的部署效率。
ChatOllama是一个开源的大模型聊天机器人框架,它允许开发者基于自己的数据集训练出定制化的对话模型,基于大规模对话数据集进行训练,采用高效的算法和硬件加速技术,确保模型训练和推理的速度。以下是ChatOllama的详细描述:
2. 关键代码解释:
在查看手册提示的示例代码时,发现主要逻辑还是在ChatPromptTemplate.from_template和text_2_sql_chain2、text_2_sql_chain.invoke这三块代码逻辑上,这里应该就是AI生成代码的主要逻辑,因为也不太清楚啥意思,放到腾讯云AI代码助手上进行解释:
经过对代码的研究和不断的优化相关提示词的实践过程,最终,改造为以下的代码逻辑后,即可通过ChatOllama模型生成了一些符合要求的文案(是一个持续迭代优化提示词的过程):
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
#获取llm用于提供AI交互
ollama = ChatOllama(model='llama3.1:8b',base_url='http://150.109.254.40:6399/')
# 获得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://{'用户名'}:{密码}@{'IP地址'}:{端口号}/{'数据库名称'}")
# 获得 数据库中表的信息
#mysql_db_schema = mysql_db.get_table_info()
#print(mysql_db_schema)
template = """
帮我生成海报相关的文案,需要返回4条数据
Question: {question}
"""
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)
getResult("创意主题是上海城市需要进行爱肯拿狗粮的中秋活动,需要生成海报文案,文案需要包括上海的一些地标名称,文案需要包含表情")
最终在修改手册提供的代码后,通过传入不同的主题提示词来生成不同的文案,上面只是一个简单的Demo演示,在生产环境中还是需要不断的优化“tempate” – 即AI中需要用到的Prompt(提示词)。
Prompt在自然语言处理中的应用非常广泛,从简单的问答系统到更复杂的机器翻译和文本生成,甚至包括在法律、金融和医疗领域中的应用。Prompt的设计不仅仅是简单地将问题转换为指令,而且要考虑到上下文、语法和语言风格等多个方面。
【文案生成方案落地】:
- ①. 活动文案管理模块:将不同活动的提示词存到TDSQL-C MySQL Serverless数据库中。
- ②. 活动文案详情模块:在不同的活动创建文案记录时,根据提示词调用HAI提供ChatOllama在线API服务来AI生成相关需要的海报、分享的文案,并且处理返回的文本数据结构化。
- ③. 活动文案审核模块:生成的AI文案,也可以进行修改,在不同的环节也可以进行拒绝和修改,或者AI重新批量生成一批、生成单个。
3. 活动文案管理模块:
不同的活动生成的提示词肯定是不通用的,如果要实现系统化的功能,肯定是需要将不同活动的提示词存到在数据库TDSQL-C MySQL Serverless中,这样的话当进行不同活动调用公共服务HAI ChatOllama模型的时候,可以传入不同的参数,再生成不同的结果文案。
先在TDSQL-C MySQL Serverless中,创建一张活动的主表,id表示活主表的主键ID,activityName表示活动的名称,activityPrompt表示活动的提示词,status表示状态。
CREATE TABLE `activitys` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`activityName` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`activityPrompt` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`status` char(1) COLLATE utf8mb4_unicode_ci DEFAULT 1,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
创建数据表完成后,即可使用Go的Gin框架代码添加相关Form表单字段写入数据库中,因为ID是自增主键、状态设置了默认值,只需要定义2个字段(activityName、activityPrompt)的Activitys结构体即可,以下是活动主表CURD四种操作的代码:
type Activitys struct {
ID int `json:"id"`
ActivityName string `json:" activity_name"`
ActivityPrompt string `json:" activity_prompt "`
}
func createActivity(c *gin.Context) {
var activity Activity
if err := c.ShouldBindJSON(&activity); err!= nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
activities = append(activities, activity)
c.JSON(http.StatusCreated, activity)
}
func getActivity(c *gin.Context) {
id := c.Param("id")
for _, activity := range activities {
if activity.ID == id {
c.JSON(http.StatusOK, activity)
return
}
}
c.JSON(http.StatusNotFound, gin.H{"error": "Activity not found"})
}
func updateActivity(c *gin.Context) {
id := c.Param("id")
var activity Activity
if err := c.ShouldBindJSON(&activity); err!= nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
for i, a := range activities {
if a.ID == id {
activity.ID = id
activities[i] = activity
c.JSON(http.StatusOK, activity)
return
}
}
c.JSON(http.StatusNotFound, gin.H{"error": "Activity not found"})
}
func deleteActivity(c *gin.Context) {
id := c.Param("id")
for i, activity := range activities {
if activity.ID == id {
activities = append(activities[:i], activities[i+1:]...)
c.JSON(http.StatusOK, gin.H{"message": "Activity deleted"})
return
}
}
c.JSON(http.StatusNotFound, gin.H{"error": "Activity not found"})
}
前端使用的是Vue3的技术栈写的Form表单与Table列表的代码,使用的是element-ui,以下是前端Vue3的相关代码:
<el-table
:data="state.tableList"
border
style="width: 100%"
:header-cell-style="{ background: 'linear-gradient(rgb(244, 247, 254) 0%, rgb(228, 237, 255) 100%)', color: '#333333' }"
header-align="center"
>
<el-table-column type="index" label="序号" width="60" header-align="center" align="center"/>
<el-table-column prop="activityName" label="活动任务名称" width="250" header-align="center" align="center"/>
<el-table-column prop="activityPrompt" label="活动任务提示词" header-align="center" align="center" />
<el-table-column prop="status" label="状态" width="160" header-align="center" align="center">
<template #default="scope">
<div>{{ state. activityStatus[scope.row.status] || '' }}</div>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" align="center" width="120">
<template #default="scope">
<div style="display: flex;align-items: center;justify-content: center;">
<div style="color: #409eff;font-size: 14px;font-weight: 500;padding: 0 10px;cursor: pointer;" @click="show(scope.row)">详情</div>
<div style="color: #409eff;font-size: 14px;font-weight: 500;padding: 0 10px;cursor: pointer;" @click="editor(scope.row)">编辑</div>
</div>
</template>
</el-table-column>
</el-table>
4. HAI提供ChatOllama在线API服务
高性能应用服务(Hyper Application Inventor,HAI)是一款面向 AI 、科学计算 的 GPU 应用服务产品,提供即插即用的澎湃算力与常见环境,助力中小企业及开发者快速部署 LLM。
在(https://cloud.tencent.com/product/hai)[高性能应用服务HAI]链接可以点击“立即使用”,可以在“算力管理”中进行“新建”,这里支持多种 AI 环境快速部署,如 ChatGLM-6B、StableDiffusion等,使用户可专注业务及应用场景创新。
高性能应用服务 HAI 拥有丰富的预装应用,可以将开源社区的前沿模型快速转化为您专有的部署实践,一键拉起,即开即用。现已支持在HAI购买页的社区应用中,找到Llama 3.1等应用的入口,简单选型后,即可一键启动推理服务。
Llama3.1 8B项目介绍:
该项目利用langchain思想,实现了基于本地知识库的问答应用,支持市面上主流的开源 LLM、 Embedding 模型与向量数据库,可实现全部使用开源模型离线私有部署。与此同时,该项目也支持 OpenAI GPT API 的调用。
开通服务很简单,只需要简简单单的下一步即可,需要注意一下地域的选择,最后选择离你最近的城市,这里最好优化一下,地域默认在“首尔”了,最好是自动选择到离我最近的城市。
通过访问(IP地址+端口号6399)后,如果提示“Ollama is running”的提示,即可表示完成llama 大模型服务准备完毕。
5. 活动任务task生成:
上面已经部署了llama大模型,现在根据活动主表,生成不同的任务,这些任务是有任务流程的,比如说文案环节就是编辑文案和确认文案,到了设计就是根据文案的内容,进行海报的设计,确认海报的内容,最终是项目人员确定发布。
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
#获取llm用于提供AI交互
ollama = ChatOllama(model='llama3.1:8b',base_url='http://150.109.254.40:6399/')
# 获得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://{'用户名'}:{密码}@{'IP地址'}:{端口号}/{'数据库名称'}")
# 获得 数据库中表的信息
#mysql_db_schema = mysql_db.get_table_info()
#print(mysql_db_schema)
template = """
帮我生成海报相关的文案,需要返回4条数据
Question: {question}
"""
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})
return sql
func getActivity(c *gin.Context) {
id := c.Param("id")
for _, activity := range activities {
if activity.ID == id {
get_schema(activity.activityPrompt)
return
}
}
c.JSON(http.StatusNotFound, gin.H{"error": "Activity not found"})
}
通过对HAI的Llama3.1 8B项目和TDSQL-C MySQL Serverless结合起来,可以使用AI的文本处理的能力来完成一个AI海报文案、分享文案的实践。
二、使用腾讯云HAI + TDSQL-C MySQL Serverless实现AI数据飞轮:
试想一下,在0到1的创业公司,在没有技术团队的情况下,如何进行数据报表相关的分析呢,公司也是在早期10人团队中,使用Excel报表时代,陆陆续续成立技术团队,再到后面使用BI大数据系统开发,其中,发现大多数业务需求都是业务在驱动,即业务需要什么纬度的数据展示,就开发哪种数据纬度。甚至,有许多功能都是为了开发而开发。
在最近研究的“数据飞轮”能够帮助企业激活数据的潜在价值,可以将“沉睡”的数据转化为实实在在的业务价值,通过全面关注数据生命周期的各个阶段:源数据收集、二次数据清选、结构化加工、数据模型分析、数据挖掘,实现数据的有效利用和业务价值的提升。
那么,数据飞轮如何有效的进行“唤醒”数据,让数据中台继续焕发活力?企业如何利用数据飞轮实现数据驱动呢?通过对手册学习后,发现可以使用AI 技术手段的应用极大地提升了运营效率,并为电商行业带来了个性化推荐、用户行为分析、库存管理和市场趋势预测等关键领域的数据分析能力,在这种背景下,构建一个高效、可靠的AI电商数据分析系统显得尤为关键。
2.1 公司业务背景介绍:
公司是一家宠物饲料生产及销售商的新零售公司,线下有一部分实体店,线上通过互联网、电商模式帮助实体零售店改善线上下单流程,提升销售数据(下图为最近公司的相关展厅活动)。
2.2 公司BI系统业务痛点分析:
公司从最早期的excel统计时代,到后面成立技术部,经过公司不同的发展阶段,也迭代开发出了几个版本的数字化平台体系建设,在目前现有的OLTP数据分析场景中,将数据统一汇聚到一个数据BI系统平台中。
目前数据中台的架构方案:
- (1). 通过ETL开发后,源数据管理中定义好数据映射的相关字段,从非结构化数据提取并整合成自定义预期的结构化数据。
- (2). 通过DW数据仓库,将元数据经过数据治理方案,对接到下游的数字化体系应用,如驾驶舱、数据大屏、BI系统、数据可视化系统中。
【痛点一】:在此过程中,企业的数据分散于多个系统中,由于数据标准不统一,时间标签缺失等问题,导致数据质量问题。另外,随着企业的业务技术改造和业务流程的不断变化,原有数据可能失去时效性而不再适用,容易造成“假数据”、“脏数据”、“死数据”。
【痛点二】:另外一个现象是过度依赖IT技术团队,经常认为只要开发了某个东西就一定能提高业绩,需知系统只是辅助业务的一种手段,经常存在IT与业务脱节的现象,即IT人员缺乏对业务理解转换,业务人员又不懂IT技术,这严重阻碍了数据价值的充分挖掘与转化,只是为了开发而开发。
企业需要加大力度培养既懂业务又懂IT的复合型人才,形成一股数据文化,让AI数据驱动决策的理念深入人心,数据应用的真正挑战在于理念的转变与深化。
2.3 如何改造现有平台改为AI驱动数据分析平台:
首先准备一个商城的订单表做为数据源来进行分析,帮助我们使用AI的查询方式来,将自然语言的语句AI转化为SQL语句,再通过结果转换为可视化的图表功能。
环境安装篇:
首先项目中需要使用到python3的环境,并且需要使pip包管理工具可以进行安装一些python的库与包,以下为安装命令:
apt install -y python3
apt install -y python3-pip
pip3安装相关的包与库:
pip3 install openai langchain langchain-core langchain-community mysql-connector-python streamlit plotly numpy pandas watchdog matplotlib kaleido
pip install --upgrade pip
# 查看版本信息
python3 -V
pip3 -V
在安装完成需要的软件完成后,可以使用pip3 list来查看所有的安装过的python包。
在TDSQL-C MySQL Serverless准备一张订单orders相关的数据表,里面有订单的一些信息,比如商品名称、订单时间、订单的数量、订单的总价格(订单数据 * 商品数量)等字段的相关信息:
【场景一】:查询最近一年销量前10名的商品?
提问之后自动帮我生成相关的SQL语句:
SELECT
goods_name,
COUNT(*) AS sales_volume
FROM orders
WHERE order_time >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)
GROUP BY goods_name
ORDER BY sales_volume DESC
LIMIT 10;
plotly图表代码:
import plotly.graph_objects as go
import numpy as np
# data
data = [('2瓶东古一品鲜酱油', 5110), ('无荧光剂洗衣液5斤', 3972), ('1瓶东古一品鲜酱油', 1354), ('大连鸿淼海蜇皮200*5', 976), ('铁棍山药龙须面100g*5', 594), ('盐水猪肝2袋共1斤', 365), ('大连虾片160g*3', 297), ('星厨汇盐水肠480克', 286), ('真心罐头760克*2', 252), ('喜润汇猪梅花肉400g', 249)]
# extract names and sales volumes
names = [item[0] for item in data]
sales_volumes = [item[1] for item in data]
# create a figure with multiple bars for each category
fig = go.Figure(data=[go.Bar(
name='Sales Volume',
x=names,
y=sales_volumes,
marker_color=['red', 'green', 'blue', 'yellow', 'purple', 'orange', 'pink', 'brown', 'gray', 'black']
)])
# layout
fig.update_layout(
title_text='Sales Volume of Top 10 Goods',
xaxis_title_text='Goods Name',
yaxis_title_text='Sales Volume'
)
# save to file
fig.write_image('图表.png')
【场景二】:分析一下每个季度销量趋势?
提问之后自动帮我生成相关的SQL语句:
SELECT
EXTRACT(YEAR FROM STR_TO_DATE(order_time, '%Y-%m-%d %H:%i:%s')) AS year,
EXTRACT(QUARTER FROM STR_TO_DATE(order_time, '%Y-%m-%d %H:%i:%s')) AS quarter,
COUNT(*) AS sales
FROM orders
GROUP BY year, quarter
ORDER BY year, quarter;
plotly图表代码:
import plotly.graph_objects as go
import pandas as pd
# 生成虚拟数据
data = [(2023, 4, 2), (2024, 1, 19466), (2024, 2, 5150), (2024, 3, 35)]
# 将数据转换为数据框
df = pd.DataFrame(data, columns=['year', 'quarter', 'sales'])
# 根据季度进行分类
df['quarter_name'] = df['quarter'].apply(lambda x: 'Q1' if x == 1 else 'Q2' if x == 2 else 'Q3' if x == 3 else 'Q4')
# 对 sales 进行排序
df = df.sort_values(by='year').sort_values(by='quarter_name')
# 根据季度进行分组
grouped_df = df.groupby('quarter_name')['sales'].sum().reset_index()
# 使用不同颜色区分每个季度
colors = ['red', 'green', 'blue', 'purple']
# 生成柱状图
fig = go.Figure(data=[go.Bar(x=grouped_df['quarter_name'], y=grouped_df['sales'], marker_color=colors)])
# 设定字体
fig.update_layout(
font_family='WenQuanYi Zen Hei',
title_text="每季度销量趋势",
xaxis_title="季度",
yaxis_title="销量"
)
# 保存图表为图片
fig.write_image("图表.png") import plotly.graph_objects as go
import pandas as pd
# 生成虚拟数据
data = [(2023, 4, 2), (2024, 1, 19466), (2024, 2, 5150), (2024, 3, 35)]
# 将数据转换为数据框
df = pd.DataFrame(data, columns=['year', 'quarter', 'sales'])
# 根据季度进行分类
df['quarter_name'] = df['quarter'].apply(lambda x: 'Q1' if x == 1 else 'Q2' if x == 2 else 'Q3' if x == 3 else 'Q4')
# 对 sales 进行排序
df = df.sort_values(by='year').sort_values(by='quarter_name')
# 根据季度进行分组
grouped_df = df.groupby('quarter_name')['sales'].sum().reset_index()
# 使用不同颜色区分每个季度
colors = ['red', 'green', 'blue', 'purple']
# 生成柱状图
fig = go.Figure(data=[go.Bar(x=grouped_df['quarter_name'], y=grouped_df['sales'], marker_color=colors)])
# 设定字体
fig.update_layout(
font_family='WenQuanYi Zen Hei',
title_text="每季度销量趋势",
xaxis_title="季度",
yaxis_title="销量"
)
# 保存图表为图片
fig.write_image("图表.png")
【场景三】:分析一下商品库存情况,前10名商品?
提问之后自动帮我生成相关的SQL语句:
SELECT goods_name, goods_number FROM orders ORDER BY goods_number DESC LIMIT 10;
plotly图表代码:
import plotly.graph_objects as go
from typing import Tuple
# Your data
data = [
('2瓶东古一品鲜酱油', 10394),
('测试1', 3454),
('测试1', 3394),
('测试31', 2222),
('测试商品002', 1239),
('测试168', 432),
('测试1', 432),
('2瓶东古一品鲜酱油', None),
('2瓶东古一品鲜酱油', None),
('2瓶东古一品鲜酱油', None)
]
# Extract names and numbers
names = [item[0] for item in data]
numbers = [item[1] for item in data]
# Filter out None values
numbers = [num for num in numbers if num is not None]
# Sort the data by numbers in descending order
sorted_data = sorted(zip(names, numbers), key=lambda x: x[1], reverse=True)
# Separate names and numbers into lists
names, numbers = zip(*sorted_data)
# Create a color palette
color_palette = ["red", "green", "blue", "yellow", "purple", "orange", "pink"]
# Generate the plot
fig = go.Figure(data=go.Bar(x=[name for name in names], y=numbers, marker_color=color_palette[:len(numbers)]))
# Set font family and size
fig.update_layout(
title='商品库存情况前10名',
xaxis_title='商品名称',
yaxis_title='库存数量',
font_family='Wqy Zen Hei',
font_size=12,
)
# Save the plot as an image file
fig.write_image("图表.png")
在传统消费行业,时间都用来找数据、对指标、学工具了?专业 BI 工具又难又贵?信息滞后且分析难度大,数据飞轮通过综合AI分析实时数据和历史数据,帮助企业高效洞察用户真实需求,制定更加精准的销售计划和营销策略。
AI 帮你快速分析全渠道店铺(淘宝、京东、拼多多以及电商)运营指标,用低成本和低门槛获得更快数据洞察,加速改善运营流程:
- 运营部门可以通过高频数据消费制定合理的销售计划,比如换季狗粮、套餐狗粮、满减活动
- 仓库部门可以通过滞销的货物,进行有效的促销活动
- 业务部门可以快速测试新品市场接受度
- 供应链部门则能了解市场现状,提高排产准确性,实现产销协同
三、使用腾讯云HAI + TDSQL-C MySQL Serverless实现AI智能客服系统:
绝大多数提供互联网应用的公司都会存在在线客服的岗位,以往客服单位需要招在大量专业人员,经过内部培训一段周期再上岗作业,往往会存在一些问题:
序号 | 分类 | 描述 |
---|---|---|
1 | 人工座席高强负荷运转 | 人工座席无法应对高峰期海量访客,造成服务响应缓慢、排队等待过长及服务专业性不足等各种情况 |
2 | 核心数据外泄风险 | 人工座席能够触及的客户资料数据覆盖面广,部分敏感业务数据存在暴露风险,可能导致数据信息外泄 |
3 | 7*24服务 | 很多时候,客服人员在下班或者休假的时候,还要频繁工作,导致客服工作时长久 |
4 | 业务“Serverless化服务” | 当遇到业务比较忙时,需要招大量的人力来支撑业务发展,当业务低谷期,又需要减员来保证公司的正常支出 |
通过使用腾讯云HAI + TDSQL-C MySQL Serverless实现AI智能客服系统,可以有效的通过AI的技术,为客户提供交互式服务的智能客服系统。这种系统通过自然语言处理技术、语音识别技术、机器学习技术等,能够理解客户的需求、回答客户的问题、提供解决方案等
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'])
# 获得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
)
print(conn)
# 创建游标对象
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 = """
根据返回的{info}信息查找{question}的相关信息
返回数据要求:
仅仅返回python代码,不要有额外的字符
对于返回的{info},不对nil、空值、null做处理
"""
prompt2 = ChatPromptTemplate.from_template(template2)
data_2_code_chain = (
RunnablePassthrough.assign()
| prompt2
| ollama
| StrOutputParser()
)
# 执行langchain 获取操作的sql语句
code = data_2_code_chain.invoke({'question':content})
#删除数据两端可能存在的markdown格式
print(code)
先将代码进行修改,主要的逻辑功能分为3步:
- ①. 通过第一步,匹配自己的用户是wangwu,并且通过ollama查询我的订单信息
- ②. Python代码原生SQL查询结果,通过生成的SQL在TDSQL-C MySQL Serverless中查询到需要的结果
- ③. 再通过ollama进行python代码逻辑处理
但是逻辑得到的结果,就是查出来数据库的一些字段返回,但是得到的是一些字段信息,用户无法去理解。
再将代码进行修改,主要的逻辑功能分为4步:
- ①. 通过第一步,匹配自己的用户是wangwu,并且通过ollama查询我的订单信息
- ②. Python代码原生SQL查询结果,通过生成的SQL在TDSQL-C MySQL Serverless中查询到需要的结果
- ③. 再通过ollama进行python代码逻辑处理
- ④. Python代码进行逻辑处理,主要是把返回的数据,通过自然语言映射出需要的字段,其中不需要处理的数据字段空值、nil值、null值等等
与传统的客户服务相比,基于“高性能应用服务HAI”应用式AI功能能够利用自然语言提示词进行自动化机器人程序开发,在大语言模型(LLM)的加持下,提升智能化问题解决效率,加速问题的有效处理。
四、腾讯云TDSQL-C MySQL Serverless“饮水机式”使用云数据库:
传统的数据库服务并不能很好的解决“数据库的访问量存在高峰期和低谷期”,只能依赖反复的人工升降配,即不安全稳定,又会造成额外的IT运维成本以及人力资源成本,因此在客户的强烈的降本增效呼声之中,腾讯云TDSQL-C MySQL Serverless数据库应运而生。
-
业务的高峰期:
- ①. 客户选择的小规格的数据库服务无法承载业务的高额负载。
- ②. 为避免出现数据库服务不可用的情况,需要做临时的规格升配。
- ③. 或者在一开始就选择够买大规格的云数据库实例。
-
业务的低谷期:
- ①. 客户又会发现大规格的数据库服务在每天产生高额的账单。
- ②. 导致了很多不必要的费用。
3.1 TDSQL-C MySQL Serverless数据库实例的优势:
与普通MySQL数据库实例相比,TDSQL-C MySQL Serverless数据库实例有如下6点明显的优势:
- ①. 由于其规格随业务需求量随时调整,总体浪费的资源很少,提升了资源利用率,降低了资源使用量。
- ②. 在高峰期也能完全满足业务需求,保证业务不受损,提高了系统的稳定性。
- ③. 打破固定资源付费的模式,做到真正负载与资源动态匹配的按量付费,可节省大量成本。
- ④. 无需手动变配,提高了运维效率,降低了运维管理人员和开发人员的运维成本。
- ⑤. 支持自动启停能力,当没有连接时,实例自动暂停,释放计算成本;当请求连接时,自动无感启动。
- ⑥. 对高吞吐写入场景和高并发业务进行了设计优化,同时提供了弹性伸缩能力,适合业务数据量大、并具有典型的业务访问波峰波谷场景。
TDSQL-C MySQL Serverless数据库可以根据业务负载自动扩缩容实例,开发者无需关心底层资源问题,支持自定义自动暂停时间,在业务不间断情况下实现秒级冷启动,提供多种灵活计费方式供用户选择。
Serverless计费方式无需按固定资源付费,按照实际使用量进行收费,不使用不付费,根据业务负载自适应动态匹配资源,秒级弹性升降资源与计费,助力企业降本增效,最高可降低成本90%。
3.2 TDSQL-C MySQL Serverless数据库服务特性:
TDSQL-C MySQL 版提供 Serverless 服务以满足企业对特定业务场景的数据库服务要求,助力企业降本增效。
TDSQL-C MySQL Serverless数据库实例提供计算资源按需计费的能力,具有资源用量低、简单易用、弹性灵活和价格低廉等优点,赋能用户面向业务峰谷时对计算能力进行快速且独立的扩缩要求,做到快速响应业务变化的同时,合理优化使用成本,进一步助务企业降本增效。
3.3 TDSQL-C MySQL Serverless的总体架构:
Serverless 服务是腾讯云自研的新一代云原生关系型数据库 TDSQL-C MySQL 版的无服务器架构版,是全 Serverless 架构的云原生数据库。Serverless 服务支持按实际计算和存储资源使用量收取费用,不用不付费,将腾讯云云原生技术普惠用户。
上图为TDSQL-C MySQL Serverless的总体架构,核心模块为中控节点(svls scheduler)。中控节点接收计算层采集的内存/CPU/访问情况等监控数据,根据策略决定是否扩缩容,启停实例,以及按照计费规则上报云控制台计费。
TDSQL-C MySQL Serverless有faker模块,暂停计算节点时会把四层的vip:vport绑定到faker端口,用户请求过来后,识别为有效的MySQL协议,则通知中控模块将实例重新拉起,其优点在于用户不需要为代理节点付费。
3.4 资源扩缩范围(CCU):
可调整 CCU 弹性扩缩容的范围,Serverless 集群会在该范围内根据实际业务压力自动增加或减少 CCU。
CCU(TDSQL-C Compute Unit)为 Serverless 的计算计费单位,一个 CCU 近似等于1个CPU和2GB内存的计算资源,每个计费周期的 CCU 使用数量为:数据库所使用的 CPU 核数 与 内存大小的1/2 二者中取最大值。
Serverless 服务需要设定弹性范围,详细弹性范围区间可参考 (算力配置)[https://cloud.tencent.com/document/product/1003/81821]。
通过TDSQL-C MySQL Serverless实例资源的算力配置,最低可选择0.25CCU,代表0.25的CPU以及0.5GB内存,最高可选择64CCU,代表64的CPU以及128G的内存,足以应付很多场景的覆盖。
建议在第一次设置弹性范围时,最小容量配置为0.25 CCU,最大容量选择较高的值。较小的容量设置可以让集群在完全空闲时最大限度地进行缩减,避免产生额外的费用,较大的容量可以在集群负载过大时最大限度地进行扩展,稳定度过业务峰值。
通过指定实例资源波动的上下限,以CCU作为单位,让数据库服务变的更加灵活,切实的帮助企业达成降本增效的目标 。
3.5 弹性策略:
Serverless 集群会持续监控用户的 CPU、内存等 workload 负载情况,根据一定的规则触发自动扩缩容策略。
3.5.1 传统Serverless架构中的自动扩缩容方案:
下图左侧传统Serverless架构中会有一个共享的虚拟机池,里面存放的是不同大小的规格,假设需要从1核2G扩大到2核4G,则从池子里面找到2核4G的虚拟机,将对应的数据盘挂载到虚拟机,并将访问切到该虚拟机,即可完成自动扩容。
传统Serverless架构中自动扩容存在的问题点:
- ①. 假设用户就只需要4核8G,传统Serverless架构仍需要从1核2G、2核4G、4核8G逐渐递增上去,扩容耗时偏长。
- ②. 由于选择新的虚拟机扩容,会导致BP失效,访问将经历一次冷启动过程,用户体验不是太友好。
3.5.2 传统TDSQL-C Serverless架构中的自动扩缩容方案:
而上图右侧TDSQL-C Serverless架构中,用户在购买时选择最小规格为1核2G,最大规格为4核8G。TDSQL-C Serverless会在初始就给用户提供最大CPU规格,内存则从最小规格开始。可以看出,TDSQL-C Serverless的CPU资源不会受限,可以在设置的最大规格内任意使用。优点是用户性能不受限,引入的缺点是可能整机出现满负载。
基于以下两点,TDSQL-C Serverless可以很好应对自动扩缩容:
- ①. 由于TDSQL-C采用存算分离架构,一旦监控到整机资源超过阈值,就进行快速迁移,迅速在另外一台相对空闲的机器重新拉起实例,秒级完成,在资源负载上可以精准控制。
- ②. 云数据库整机利用率偏低。
3.6 自动启停:
Serverless 服务支持自定义实例自动暂停时间,无连接时实例会自动暂停。当有任务连接接入时,实例会秒级无间断自动唤醒。
当没有数据库请求时,监控服务会触发计算资源的回收,并通知接入层。当用户再次访问时,接入层则会唤醒集群,再次提供访问。
五、腾讯云高性能应用服务HAI介绍:
腾讯云推出了一款“高性能应用服务HAI”,是一款面向 Al、科学计算的 GPU 应用服务产品,以应用为中心,匹配GPU云算力资源,AI 2.0时代 GPU 新品,预装LLM、AI作画、数据科学等高性能应用,实现即插即用,助力中小企业及开发者快速部署LLM、AI作画、数据科学等高性能应用。
4.1 高性能应用服务HAI介绍:
“高性能应用服务HAI”,它具有澎湃算力,即开即用,基于腾讯云GPU云服务器底层算力,提供开箱即用的高性能云服务。以应用为中心,匹配GPU云算力资源,助力中小企业及开发者快速部署LLM、AI作画、数据科学等高性能应用。
尤其值得一提的是针对开发者,使用可视化的webUI界面和“可视化IDE”的jupyterlab大大的降低了调试的复杂度、降低应用使用的门槛,甚至经过简单的培训,让非开发者(运维人员)也可以参与到使用中来。
4.2 高性能应用服务HAI的产品的价值:
大幅降低GPU云服务器使用门槛,多角度优化产品使用体验,低门槛、开箱即用。
4.3 多种高性能应用部署场景,轻松拿捏:
可以看出以下的对比,“自己选购部署”与“高性能应用服务HAI”在以下7点存在业务痛点,“高性能应用服务HAI”大大的降低了使用的门槛、降低了学习的成本,让更多的企业、开发者能够加入到AI应用的行业中来。
通过“腾讯云高性能应用服务HAI”实践了AI作画、AI深度学习、AI LLM模型的案例,可以体验到简易部署、便捷维护,减少工作量、步骤繁琐、效率低和时间成本的问题,同时提升系统整体性能和用户体验。
以下为在体验过程中,个人觉得非常提效的几个点:
以下是公司经过了初创期、爬坡期,在行业内快速的吸引客户,并且占有一定的业务量,后续在原有的业务基础上,提高市场的竞争力,以及对公司一些CostDown原则的实施,希望能通过更多的AIGC的工具链路,帮助企业实施AI的战略布局。
高性能应用服务(Hyper Application Inventor,HAI)是一款面向AI、科学计算的GPU应用服务产品,提供即插即用的澎湃算力与常见环境。助力中小企业及开发者快速部署LLM、AI作画、数据科学等高性能应用,原生集成配套的开发工具与组件,大幅提高应用层的开发生产效率、降低运营成本、提高产品质量和优化资源利用等。
更多推荐
所有评论(0)