前言:

近年来,随着深度学习、大数据、人工智能、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核心数据外泄风险人工座席能够触及的客户资料数据覆盖面广,部分敏感业务数据存在暴露风险,可能导致数据信息外泄
37*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作画、数据科学等高性能应用,原生集成配套的开发工具与组件,大幅提高应用层的开发生产效率、降低运营成本、提高产品质量和优化资源利用等。

在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐