前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >腾讯云TDSQL-C MySQL Serverless和HAI应用助力电商企业AI海报文案和“数据飞轮”分析方案最佳实践落地

腾讯云TDSQL-C MySQL Serverless和HAI应用助力电商企业AI海报文案和“数据飞轮”分析方案最佳实践落地

原创
作者头像
用户10585271
修改2024-10-18 21:28:05
1620
修改2024-10-18 21:28:05

前言:

近年来,随着深度学习、大数据、人工智能、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模型生成了一些符合要求的文案(是一个持续迭代优化提示词的过程):

代码语言:js
复制
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表示状态。

代码语言:js
复制
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四种操作的代码:

代码语言:js
复制
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的相关代码:

代码语言:js
复制
<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大模型,现在根据活动主表,生成不同的任务,这些任务是有任务流程的,比如说文案环节就是编辑文案和确认文案,到了设计就是根据文案的内容,进行海报的设计,确认海报的内容,最终是项目人员确定发布。

代码语言:js
复制
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的库与包,以下为安装命令:

代码语言:js
复制
apt install -y python3
apt install -y python3-pip

pip3安装相关的包与库:

代码语言:js
复制
pip3 install openai langchain langchain-core langchain-community mysql-connector-python streamlit plotly numpy pandas watchdog matplotlib kaleido
代码语言:js
复制
pip install --upgrade pip
# 查看版本信息
python3 -V
pip3 -V

在安装完成需要的软件完成后,可以使用pip3 list来查看所有的安装过的python包。

在TDSQL-C MySQL Serverless准备一张订单orders相关的数据表,里面有订单的一些信息,比如商品名称、订单时间、订单的数量、订单的总价格(订单数据 * 商品数量)等字段的相关信息:

【场景一】:查询最近一年销量前10名的商品?

提问之后自动帮我生成相关的SQL语句:

代码语言:js
复制
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;
代码语言:js
复制
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语句:

代码语言:js
复制
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图表代码:

代码语言:js
复制
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语句:

代码语言:js
复制
SELECT goods_name, goods_number FROM orders ORDER BY goods_number DESC LIMIT 10;

plotly图表代码:

代码语言:js
复制
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的技术,为客户提供交互式服务的智能客服系统。这种系统通过自然语言处理技术、语音识别技术、机器学习技术等,能够理解客户的需求、回答客户的问题、提供解决方案等

代码语言:js
复制
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)的加持下,<font color="red"><b>提升智能化问题解决效率,加速问题的有效处理</b></font>。


三、腾讯云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作画、数据科学等高性能应用,原生集成配套的开发工具与组件,大幅提高应用层的开发生产效率、降低运营成本、提高产品质量和优化资源利用等。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
    • 1. AI海报与分享文案生成:
      • 2. AI数据飞轮驱动数据分析:
        • 3. AI智能客服查询系统:
          • 4. 腾讯云TDSQL-C MySQL Serverless饮水式弹性付费使用:
          • 一、使用腾讯云HAI + TDSQL-C MySQL Serverless实现AI海报文案智能生成:
            • 1. 什么是ChatOllama?
              • 2. 关键代码解释:
                • 3. 活动文案管理模块:
                  • 4. HAI提供ChatOllama在线API服务
                    • Llama3.1 8B项目介绍:
                  • 5. 活动任务task生成:
                  • 二、使用腾讯云HAI + TDSQL-C MySQL Serverless实现AI数据飞轮:
                    • 2.1 公司业务背景介绍:
                      • 2.2 公司BI系统业务痛点分析:
                        • 2.3 如何改造现有平台改为AI驱动数据分析平台:
                          • 环境安装篇:
                      • 三、使用腾讯云HAI + TDSQL-C MySQL Serverless实现AI智能客服系统:
                      • 三、腾讯云TDSQL-C MySQL Serverless“饮水机式”使用云数据库:
                        • 3.1 TDSQL-C MySQL Serverless数据库实例的优势:
                          • 3.2 TDSQL-C MySQL Serverless数据库服务特性:
                            • 3.3 TDSQL-C MySQL Serverless的总体架构:
                              • 3.4 资源扩缩范围(CCU):
                                • 3.5 弹性策略:
                                  • 3.5.1 传统Serverless架构中的自动扩缩容方案:
                                  • 3.5.2 传统TDSQL-C Serverless架构中的自动扩缩容方案:
                                • 3.6 自动启停:
                                • 四、腾讯云高性能应用服务HAI介绍:
                                  • 4.1 高性能应用服务HAI介绍:
                                    • 4.2 高性能应用服务HAI的产品的价值:
                                      • 4.3 多种高性能应用部署场景,轻松拿捏:
                                      相关产品与服务
                                      TDSQL MySQL 版
                                      TDSQL MySQL 版(TDSQL for MySQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
                                      领券
                                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档