基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

SEO教程2025-08-0190
    正在检查是否收录...

  随着云原生技术和AI能力的不断成熟,如何将传统数据库、无服务器计算和人工智能有机结合,构建现代化的数据分析平台,并借助阿里云提供的基础组件构建应用。本文基于微软经典的WorldWideImports示例数据库,设计并实现了一个智能销售分析平台的技术原型,并使用通义AI在数据洞察和内容生成方面的智能化能力。通过该Demo项目,我们不仅验证了各个组件的协同可行性,还展示了从购物篮分析、商品关联挖掘到AI营销素材生成的完整技术链路,为类似的企业级应用提供了参考和实现思路。

 

整体架构

架构图

 

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

整个DEMO架构相对简单:

  • 数据存储层 阿里云RDS for SQL Server作为核心数据库,采用微软官方示例数据库
  • 计算编排层:使用阿里云函数计算作为核心引擎,承担了数据查询、业务逻辑处理和服务编排的职责。函数计算的按需付费模式很适合这种DEMO分析场景,既能处理数据库查询,又能对接百炼大模型服务进行智能分析。
  • Web前端:采用纯静态页面的方式,通过HTTP请求直接调用函数计算接口。整体较为简单

 

使用到的云产品简介

阿里云RDS for SQL Server:企业级数据库服务

阿里云RDS for SQL Server是基于微软SQL Server引擎的托管数据库服务,提供了完整的企业级数据管理能力。相比自建数据库,RDS具备自动备份恢复、高可用架构、性能监控等开箱即用的特性,大幅降低了数据库运维复杂度。

 

阿里云函数计算:无服务器计算平台

函数计算(Function Compute)是阿里云提供的事件驱动的全托管计算服务,开发者无需管理服务器即可运行代码。该服务支持多种编程语言运行时,具备毫秒级冷启动、按量付费、自动弹性伸缩等特性。在本项目中,我们使用Python运行时构建了统一的处理函数,通过参数路由实现数据查询、AI分析等多种功能。函数计算的无状态特性和按需执行模式,使得整个系统具备了良好的成本控制能力和高并发处理能力,非常适合构建轻量级的API服务。

 

百炼平台与通义大模型:AI能力的统一入口

百炼是阿里云推出的大模型服务平台,为开发者提供了便捷的AI能力调用接口。通过百炼平台,我们能够轻松接入通义千问和通义万像两大核心模型。通义千问作为大语言模型,具备强大的自然语言理解和生成能力,能够将复杂的数据分析结果转化为易懂的商业洞察和建议。通义万像则专注于图像生成领域,支持根据文本描述创建高质量的营销图片。

 

数据准备

在开始构建智能销售分析平台之前,我们需要先准备好示例数据。WorldWideImports是微软官方提供的SQL Server示例数据库,包含了完整的销售、库存、客户等业务数据,非常适合用于数据分析场景的演示。

 

数据库准备

在https://github.com/Microsoft/sql-server-samples 下载官方示例数据库,并上传到与RDS for SQL Server同一可用区的OSS Bucket中。

在阿里云RDS控制台中

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

两分钟后,我们在控制台看到该数据库已经Ready。

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

 

数据库账号准备

在控制台创建账号,并给与WWI数据库读写权限,如图所示,该账号用于函数计算连接RDS SQL Server

 

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

SQL准备

通过一些复杂的分析SQL,我们可以实现5种与销售分析有关的SQL,如下

# 1. 热销商品分析查询 # 用途:显示销售额最高的商品及其详细信息,包括收入、客户数量、平均价格等 TOP_SELLING_PRODUCTS_QUERY = """ -- 热销商品分析查询(已验证可用) -- 显示销售额最高的商品及其详细信息 WITH TopProducts AS (SELECT TOP 10 si.StockItemName, si.SearchDetails, \ ISNULL(sc.ColorName, 'Default') as ColorName, \ si.Brand, \ si.Size, \ SUM(ol.Quantity * ol.UnitPrice) as Revenue, \ COUNT(DISTINCT o.CustomerID) as CustomerCount, \ AVG(ol.UnitPrice) as AvgPrice, \ SUM(ol.Quantity) as TotalQuantitySold \ FROM Warehouse.StockItems si \ LEFT JOIN Sales.OrderLines ol ON si.StockItemID = ol.StockItemID \ LEFT JOIN Sales.Orders o ON ol.OrderID = o.OrderID \ LEFT JOIN Warehouse.Colors sc ON si.ColorID = sc.ColorID \ WHERE o.OrderDate >= '2016-01-01' \ GROUP BY si.StockItemID, si.StockItemName, si.SearchDetails, \ sc.ColorName, si.Brand, si.Size \ HAVING SUM(ol.Quantity * ol.UnitPrice) > 0 \ ORDER BY Revenue DESC) SELECT * \ FROM TopProducts; \ """ # 2. 商品关联分析查询(购物篮分析) # 用途:分析哪些商品经常一起被购买,用于推荐系统和交叉销售 PRODUCT_AFFINITY_ANALYSIS_QUERY = """ -- 商品关联分析查询(购物篮分析) -- 分析哪些商品经常一起被购买 WITH ProductAffinityAnalysis AS (SELECT ol1.StockItemID AS Product1, \ ol2.StockItemID AS Product2, \ p1.StockItemName AS Product1Name, \ p2.StockItemName AS Product2Name, \ COUNT(*) AS CoOccurrence, \ COUNT(*) * 1.0 / \ (SELECT COUNT(DISTINCT OrderID) \ FROM Sales.OrderLines \ WHERE StockItemID = ol1.StockItemID) AS SupportScore \ FROM Sales.OrderLines ol1 \ INNER JOIN Sales.OrderLines ol2 \ ON ol1.OrderID = ol2.OrderID AND ol1.StockItemID < ol2.StockItemID \ INNER JOIN Warehouse.StockItems p1 ON ol1.StockItemID = p1.StockItemID \ INNER JOIN Warehouse.StockItems p2 ON ol2.StockItemID = p2.StockItemID \ INNER JOIN Sales.Orders o ON ol1.OrderID = o.OrderID \ WHERE o.OrderDate >= '2016-01-01' \ GROUP BY ol1.StockItemID, ol2.StockItemID, \ p1.StockItemName, p2.StockItemName \ HAVING COUNT(*) >= 3 -- 至少同时出现3次 ) SELECT TOP 20 Product1Name, Product2Name, CoOccurrence, SupportScore FROM ProductAffinityAnalysis ORDER BY SupportScore DESC; \ """ # 3. 库存状态分析查询 # 用途:分析当前库存状态和商品需求,识别库存风险 INVENTORY_STATUS_ANALYSIS_QUERY = """ -- 库存状态分析查询 -- 分析当前库存状态和商品需求 SELECT TOP 30 si.StockItemID, si.StockItemName, si.Brand, si.Size, ISNULL(sih.QuantityOnHand, 0) as CurrentStock, ISNULL(sih.LastCostPrice, 0) as LastCostPrice, COUNT(ol.OrderLineID) as OrderFrequency, AVG(ol.Quantity) AS AvgDemand, SUM(ol.Quantity * ol.UnitPrice) as TotalRevenue, CASE WHEN ISNULL(sih.QuantityOnHand, 0) <= 50 THEN 'Critical' WHEN ISNULL(sih.QuantityOnHand, 0) <= 200 THEN 'Low' ELSE 'Normal' END AS StockStatus FROM Warehouse.StockItems si LEFT JOIN Warehouse.StockItemHoldings sih ON si.StockItemID = sih.StockItemID LEFT JOIN Sales.OrderLines ol ON si.StockItemID = ol.StockItemID LEFT JOIN Sales.Orders o ON ol.OrderID = o.OrderID WHERE o.OrderDate >= '2015-06-01' \ OR o.OrderDate IS NULL GROUP BY si.StockItemID, si.StockItemName, si.Brand, si.Size, sih.QuantityOnHand, \ sih.LastCostPrice ORDER BY OrderFrequency DESC; \ """ # 4. 客户购买行为分析查询 # 用途:分析客户购买模式和价值,用于客户分层和营销策略 CUSTOMER_BEHAVIOR_ANALYSIS_QUERY = """ -- 客户购买行为分析查询 -- 分析客户购买模式和价值 WITH CustomerAnalysis AS (SELECT c.CustomerID, \ c.CustomerName, \ c.DeliveryAddressLine1, \ c.DeliveryAddressLine2, \ COUNT(DISTINCT o.OrderID) as OrderCount, \ SUM(ol.Quantity * ol.UnitPrice) as TotalSpent, \ AVG(ol.Quantity * ol.UnitPrice) as AvgOrderValue, \ MAX(o.OrderDate) as LastOrderDate, \ DATEDIFF(DAY, MAX(o.OrderDate), '2016-05-31') as DaysSinceLastOrder, \ COUNT(DISTINCT ol.StockItemID) as UniqueProductsPurchased \ FROM Sales.Customers c \ INNER JOIN Sales.Orders o ON c.CustomerID = o.CustomerID \ INNER JOIN Sales.OrderLines ol ON o.OrderID = ol.OrderID \ WHERE o.OrderDate >= '2016-01-01' \ GROUP BY c.CustomerID, c.CustomerName, \ c.DeliveryAddressLine1, c.DeliveryAddressLine2) SELECT TOP 20 CustomerName, DeliveryAddressLine2 as Region, OrderCount, TotalSpent, AvgOrderValue, UniqueProductsPurchased, CASE WHEN TotalSpent > 50000 THEN 'VIP' WHEN TotalSpent > 20000 THEN 'Premium' WHEN TotalSpent > 5000 THEN 'Regular' ELSE 'Basic' END AS CustomerTier, CASE WHEN DaysSinceLastOrder <= 30 THEN 'Active' WHEN DaysSinceLastOrder <= 90 THEN 'At Risk' ELSE 'Inactive' END AS CustomerStatus FROM CustomerAnalysis ORDER BY TotalSpent DESC; \ """ # 5. 季节性销售趋势分析查询 # 用途:分析商品在不同月份的销售表现,识别季节性模式 SEASONAL_SALES_TREND_QUERY = """ -- 季节性销售趋势分析查询 -- 分析商品在不同月份的销售表现 SELECT MONTH (o.OrderDate) as OrderMonth, DATENAME(MONTH, o.OrderDate) as MonthName, si.StockItemName, SUM (ol.Quantity * ol.UnitPrice) as MonthlyRevenue, COUNT (DISTINCT o.OrderID) as OrderCount, AVG (ol.Quantity) as AvgQuantityPerOrder, SUM (ol.Quantity) as TotalQuantitySold FROM Sales.Orders o INNER JOIN Sales.OrderLines ol \ ON o.OrderID = ol.OrderID INNER JOIN Warehouse.StockItems si ON ol.StockItemID = si.StockItemID WHERE o.OrderDate >= '2016-01-01' AND si.StockItemName IN ( -- 只分析前10个热销商品的季节性趋势 SELECT TOP 10 si2.StockItemName FROM Warehouse.StockItems si2 INNER JOIN Sales.OrderLines ol2 ON si2.StockItemID = ol2.StockItemID INNER JOIN Sales.Orders o2 ON ol2.OrderID = o2.OrderID WHERE o2.OrderDate >= '2016-01-01' GROUP BY si2.StockItemName ORDER BY SUM (ol2.Quantity * ol2.UnitPrice) DESC ) GROUP BY MONTH (o.OrderDate), DATENAME(MONTH, o.OrderDate), si.StockItemName ORDER BY OrderMonth, MonthlyRevenue DESC; \ """

示例结果如图

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

 

配置大模型访问

进入阿里云百炼控制台https://bailian.console.aliyun.com/ ,获取用于调用大模型的API Key,这里我们的文本模式使用qwen-max,图片生成模型使用 wanx2.1-t2i-plus

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

 

对于这5种销售分析场景,我们分别将提示词封装到类中,将SQL Server返回的数据配合固定的系统提示词与用户提示词传给代码,核心代码如下:

class AIEnhance: """封装对大语言模型的调用,用于数据分析""" def __init__(self, model='qwen-max', image_model='wanx2.1-t2i-plus'): self.model = model self.image_model = image_model def analyze_top_selling_products(self, products_data): system_prompt = "你是一位资深的数据分析师。" user_prompt = ("请根据以下热销商品数据,生成一段简洁、深刻的分析报告。\n" "报告应包括:\n" "1. 总结关键的销售趋势。\n" "2. 指出表现最突出的几款商品及其特点。\n" "3. 基于数据,提出1-2条具体的商业建议。") return self._execute_analysis_prompt(system_prompt, user_prompt, products_data) def analyze_product_affinity(self, affinity_data): system_prompt = "你是一位零售策略师,擅长通过购物篮分析提升交叉销售。" user_prompt = ("请分析以下商品关联数据(哪些商品经常被一起购买)。\n" "分析应包括:\n" "1. 识别出关联性最强的几组商品(基于SupportScore和CoOccurrence)。\n" "2. 提出具体的营销建议,如商品捆绑、组合折扣或在商品页面进行推荐。\n" "3. 指出是否有任何非直观的、有趣的商品组合值得关注。") return self._execute_analysis_prompt(system_prompt, user_prompt, affinity_data) def analyze_inventory(self, inventory_data): system_prompt = "你是一位供应链和库存管理专家。" user_prompt = ("请根据下面的库存状态和销售数据进行分析。\n" "分析应包括:\n" "1. 识别出有风险的商品,特别是库存状态为'Critical'且订单频率(OrderFrequency)较高的商品,并建议立即采取行动。\n" "2. 找出库存积压的商品(库存量大但订单频率低),并建议处理方式(如促销、清仓)。\n" "3. 对整体库存健康状况给出一个简要评价。") return self._execute_analysis_prompt(system_prompt, user_prompt, inventory_data) def analyze_customer_behavior(self, customer_data): system_prompt = "你是一位客户关系管理(CRM)与营销专家。" user_prompt = ("请分析以下客户行为和分层数据。\n" "分析应包括:\n" "1. 总结客户群体的构成(如VIP, Premium客户的占比和特点)。\n" "2. 为不同客户状态('Active', 'At Risk', 'Inactive')的客户群体提出差异化的营销策略。\n" "3. 描述高价值客户的核心特征,为精准营销提供依据。") return self._execute_analysis_prompt(system_prompt, user_prompt, customer_data) def analyze_seasonal_trends(self, seasonal_data): system_prompt = "你是一位市场分析师,精通销售预测和季节性趋势分析。" user_prompt = ("请分析以下热销商品的月度销售数据,识别季节性趋势。\n" "分析应包括:\n" "1. 指出哪些商品有明显的销售旺季和淡季。\n" "2. 总结哪些月份是整体销售的高峰期和低谷期。\n" "3. 基于这些季节性模式,为库存规划和营销活动提供具体建议。") return self._execute_analysis_prompt(system_prompt, user_prompt, seasonal_data)

 

配置函数计算

进入函数计算控制台https://fcnext.console.aliyun.com/ ,创建函数

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

 

函数类型选择“任务函数”。

 

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

 

部署代码

创建完成后,部署代码,入口代码如下,通过解析简单的QueryString获取参数,通过不同的访问类别调用不同的SQL与大模型分析,典型的访问请求例如:

https://自定义函数地址.cn-beijing.fcapp.run?analysis_type=product_affinity&ai_result=true&generate_image=true

import json import logging # 配置日志 logger = logging.getLogger() logger.setLevel(logging.INFO) from database_wrapper import WideWorldImportersDB from ai_enhance import create_ai_analyzer db = WideWorldImportersDB() ai_service = create_ai_analyzer() def handler(event, context): """ 函数入口点 (事件驱动) Args: event (dict): 期望包含: - analysis_type: 分析类型 (必需) - ai_result: 是否需要AI分析 (可选,值为 'true' 时启用) - generate_image: 是否生成图片 (可选,值为 'true' 时启用,仅支持 product_affinity) Returns: dict: 包含原始数据或AI分析结果的字典 """ # 解析事件数据 if isinstance(event, bytes): event = json.loads(event.decode('utf-8')) elif isinstance(event, str): event = json.loads(event) # 获取分析类型参数 analysis_type = event.get('analysis_type') if not analysis_type: query_params = event.get('queryParameters', {}) analysis_type = query_params.get('analysis_type') if not analysis_type: return {"status": "error", "message": "请求中缺少 'analysis_type' 参数"} # 获取其他可选参数 ai_result = event.get('ai_result') or event.get('queryParameters', {}).get('ai_result') generate_image = event.get('generate_image') or event.get('queryParameters', {}).get('generate_image') logging.info(f"处理请求: analysis_type={analysis_type}, ai_result={ai_result}, generate_image={generate_image}") try: # 获取原始数据 raw_data = get_raw_data(analysis_type) if not raw_data: return {"status": "error", "message": f"未找到 {analysis_type} 类型的数据"} # 构建基础返回结果 result = { "status": "success", "analysis_type": analysis_type, "data_count": len(raw_data), "raw_data": raw_data } # 如果需要AI分析结果 if ai_result == 'true': logging.info(f"开始执行AI分析: {analysis_type}") analysis_result = get_ai_analysis(analysis_type, raw_data) result["ai_analysis"] = analysis_result logging.info("AI分析完成") # 如果需要生成图片(目前只支持商品关联分析) if generate_image == 'true': if analysis_type == 'product_affinity': logging.info("开始生成商品组合图片") image_result = ai_service.generate_product_bundle_image(raw_data) result["generated_image"] = image_result logging.info("图片生成完成") else: result["image_warning"] = f"图片生成功能目前只支持 'product_affinity' 类型,当前类型为 '{analysis_type}'" return result except Exception as e: error_msg = f"处理 {analysis_type} 请求时发生错误: {str(e)}" logging.error(error_msg) return {"status": "error", "message": error_msg} def get_raw_data(analysis_type): """ 根据分析类型获取原始数据 Args: analysis_type (str): 分析类型 Returns: list: 原始数据列表,如果类型不支持则返回 None """ if analysis_type == 'top_selling_products': return db.get_top_selling_products(10) elif analysis_type == 'product_affinity': return db.get_product_affinity_analysis(min_occurrence=5, limit=15) elif analysis_type == 'inventory_status': return db.get_inventory_status_analysis(30) elif analysis_type == 'customer_behavior': return db.get_customer_behavior_analysis(20) elif analysis_type == 'seasonal_sales': return db.get_seasonal_sales_trend(10) else: logging.warning(f"不支持的分析类型: {analysis_type}") return None def get_ai_analysis(analysis_type, data): """ 根据分析类型和数据获取AI分析结果 Args: analysis_type (str): 分析类型 data (list): 原始数据 Returns: str: AI分析结果文本 """ if analysis_type == 'top_selling_products': return ai_service.analyze_top_selling_products(data) elif analysis_type == 'product_affinity': return ai_service.analyze_product_affinity(data) elif analysis_type == 'inventory_status': return ai_service.analyze_inventory(data) elif analysis_type == 'customer_behavior': return ai_service.analyze_customer_behavior(data) elif analysis_type == 'seasonal_sales': return ai_service.analyze_seasonal_trends(data) else: return f"不支持的分析类型: {analysis_type}"

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

 

值得注意的是,函数计算中需要依赖的类库需要手动安装,依赖的类库如下:

requirements.txt

pymssql==2.3.7 requests==2.31.0 dashscope==1.14.1 alibabacloud-tea-openapi==0.3.7

 

在打包上传代码之前,可以使用下面命令部署依赖包:

pip install -r requirements.txt -t .

 

配置环境变量&设置端口

函数中,我们部署环境变量,存入RDS SQL Server的地址、用户名与密码,以及百炼的API Key,这里当然也可以使用KMS,但为了DEMO简单起见,使用环境变量方式

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

 

通过创建触发器,允许函数通过HTTP请求触发,如下图:

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

 

为了DEMO简单,选择无需认证,但在生产环境中不能这么做。

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

 

验证函数

函数创建完成后,调用函数查看结果,看起来一切正常:

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

 

 

前端

前端使用Flask + 静态页面的方式进行。较为简单,核心代码如下:

from flask import Flask, render_template, jsonify, request import requests import logging import os # Initialize Flask app with explicit template folder app = Flask(__name__, template_folder=os.path.join(os.path.dirname(os.path.abspath(__file__)), 'templates')) app.secret_key = 'your-secret-key-here' # 配置日志 logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) # API基础URL API_BASE_URL = "https://sales-insights-zfdsymcpgw.cn-beijing.fcapp.run" # 分析类型配置 ANALYSIS_TYPES = { 'top_selling_products': { 'name': '热销商品分析', 'description': '展示销售额最高的商品及其详细信息,包括收入、客户数量、平均价格等', 'icon': '🏆', 'color': 'from-blue-400 to-blue-600', 'supports_image': False }, 'product_affinity': { 'name': '商品关联分析', 'description': '分析哪些商品经常一起被购买,用于推荐系统和交叉销售', 'icon': '🔗', 'color': 'from-green-400 to-green-600', 'supports_image': True }, 'inventory_status': { 'name': '库存状态分析', 'description': '分析当前库存状态和商品需求,识别库存风险', 'icon': '📦', 'color': 'from-yellow-400 to-yellow-600', 'supports_image': False }, 'customer_behavior': { 'name': '客户行为分析', 'description': '分析客户购买模式和价值,用于客户分层和营销策略', 'icon': '👥', 'color': 'from-purple-400 to-purple-600', 'supports_image': False }, 'seasonal_sales': { 'name': '季节性销售趋势', 'description': '分析商品在不同月份的销售表现,识别季节性模式', 'icon': '📊', 'color': 'from-red-400 to-red-600', 'supports_image': False } } @app.route('/') def index(): """主页面 - 展示所有分析类型""" return render_template('index.html', analysis_types=ANALYSIS_TYPES) @app.route('/analysis/<analysis_type>') def analysis_detail(analysis_type): """分析详情页面""" if analysis_type not in ANALYSIS_TYPES: return "分析类型不存在", 404 config = ANALYSIS_TYPES[analysis_type] return render_template('analysis.html', analysis_type=analysis_type, config=config) @app.route('/api/get_data/<analysis_type>') def get_raw_data(analysis_type): """获取原始数据的API端点""" try: url = f"{API_BASE_URL}?analysis_type={analysis_type}" response = requests.get(url, timeout=30) response.raise_for_status() return jsonify(response.json()) except requests.exceptions.RequestException as e: logger.error(f"获取原始数据失败: {str(e)}") return jsonify({"status": "error", "message": f"获取数据失败: {str(e)}"}), 500 @app.route('/api/get_ai_analysis/<analysis_type>') def get_ai_analysis(analysis_type): """获取AI分析结果的API端点""" try: url = f"{API_BASE_URL}?analysis_type={analysis_type}&ai_result=true" response = requests.get(url, timeout=60) response.raise_for_status() return jsonify(response.json()) except requests.exceptions.RequestException as e: logger.error(f"获取AI分析失败: {str(e)}") return jsonify({"status": "error", "message": f"获取AI分析失败: {str(e)}"}), 500 # 替换现有的 generate_image 路由 @app.route('/api/generate_image/<analysis_type>') def generate_image(analysis_type): """生成图片 - 调用包含AI分析和图片生成的完整API""" if analysis_type != 'product_affinity': return jsonify({"status": "error", "message": "图片生成功能只支持商品关联分析"}), 400 try: # 调用包含AI分析和图片生成的完整API url = f"{API_BASE_URL}?analysis_type={analysis_type}&ai_result=true&generate_image=true" logger.info(f"调用完整API(含图片生成): {url}") response = requests.get(url, timeout=120) # 增加超时时间,因为图片生成需要更长时间 response.raise_for_status() result = response.json() # 只返回图片相关的数据 if result.get('status') == 'success' and result.get('generated_image'): return jsonify({ "status": "success", "generated_image": result['generated_image'] }) else: return jsonify({ "status": "error", "message": result.get('message', '图片生成失败') }), 500 except requests.exceptions.Timeout: logger.error("图片生成超时") return jsonify({"status": "error", "message": "图片生成超时,请稍后重试"}), 500 except requests.exceptions.RequestException as e: logger.error(f"生成图片失败: {str(e)}") return jsonify({"status": "error", "message": f"生成图片失败: {str(e)}"}), 500 @app.errorhandler(404) def not_found(error): return render_template('404.html'), 404 @app.errorhandler(500) def internal_error(error): return render_template('500.html'), 500 if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=5000)

 

整体效果

前端启动后,下面是最终效果。

主页

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

 

热销商品分析

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

 

季节销售趋势分析

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

 

商品关联分析并生成关联商品的营销图

基于阿里云RDS SQL Server + 函数计算 + 通义AI构建智能销售分析平台Demo

 

 

 

小结

本文展示了如何利用云原生技术栈构建现代化的智能销售分析平台,实现了传统数据库、无服务器计算和人工智能的深度融合。通过阿里云RDS for SQL Server、函数计算和百炼大模型的协同工作,构建了一个具备数据洞察和内容生成能力的端到端解决方案。

核心技术亮点:

  • 无服务器架构:采用函数计算作为核心引擎,实现按需付费和自动弹性伸缩,显著降低运维成本
  • AI原生设计:集成通义千问和通义万像,将数据分析结果转化为商业洞察和营销素材
  • 完整分析链路:从购物篮分析、商品关联挖掘到AI营销素材生成的全流程自动化

 

这种架构模式特别适合中小企业快速构建数据分析能力,也为大型企业的数字化转型提供了轻量级的试点方案。后续可以扩展支持更多数据源、增加实时分析能力,或集成更多AI模型来满足不同业务场景的需求。

通过该Demo项目,现代云服务和AI技术的组合能够以较低的成本和复杂度,为传统业务带来智能化提升。

评论

昵称
邮箱
主页