1. 项目概述
"基于微信小程序的故宫博物院文创个性化推荐系统"是一个融合移动互联网技术与文化创意产业的毕业设计项目。该系统旨在通过微信小程序这一轻量级平台,为游客提供个性化的故宫文创产品推荐服务,同时为故宫博物院搭建数字化营销渠道。
作为一名在文化科技领域深耕多年的从业者,我见证了许多博物馆数字化转型的案例。这个项目最吸引我的地方在于它巧妙地将推荐算法与传统文化IP相结合,既满足了年轻用户对便捷购物体验的需求,又实现了文化价值的传播。
2. 系统架构设计
2.1 技术栈选型
前端技术栈:
- 微信小程序原生框架(WXML+WXSS+JS)
- WeUI组件库(保持与微信生态一致的UI风格)
- ECharts-for-WeChat(数据可视化展示)
选择微信小程序作为前端载体主要基于三点考虑:
- 用户无需下载安装,符合旅游场景下的即时使用需求
- 微信生态完善的支付、分享、客服等配套功能
- 10亿+的微信用户基础,降低获客成本
后端技术栈:
- SpringBoot 2.7.x(快速构建RESTful API)
- MyBatis-Plus(简化数据库操作)
- Redis 6.x(缓存热门商品和用户行为数据)
- Elasticsearch 7.x(商品搜索和推荐)
数据库设计:
-- 用户表 CREATE TABLE `user` ( `id` bigint NOT NULL AUTO_INCREMENT, `openid` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '微信openid', `nickname` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL, `avatar` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, `gender` tinyint DEFAULT '0' COMMENT '0-未知 1-男 2-女', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `idx_openid` (`openid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -- 商品表 CREATE TABLE `product` ( `id` bigint NOT NULL AUTO_INCREMENT, `name` varchar(100) COLLATE utf8mb4_general_ci NOT NULL, `description` text COLLATE utf8mb4_general_ci, `price` decimal(10,2) NOT NULL, `stock` int NOT NULL DEFAULT '0', `category_id` int NOT NULL COMMENT '商品分类', `cultural_value` text COLLATE utf8mb4_general_ci COMMENT '文化价值说明', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_category` (`category_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -- 用户行为表 CREATE TABLE `user_behavior` ( `id` bigint NOT NULL AUTO_INCREMENT, `user_id` bigint NOT NULL, `product_id` bigint NOT NULL, `behavior_type` tinyint NOT NULL COMMENT '1-浏览 2-收藏 3-加购 4-购买', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_user_product` (`user_id`,`product_id`), KEY `idx_time` (`create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;2.2 系统模块划分
用户模块:
- 微信授权登录
- 用户画像构建
- 收藏/购物车管理
商品模块:
- 文创商品管理
- 分类体系(按文物类型/价格区间/适用场景)
- 文化背景展示
推荐模块:
- 基于内容的推荐(商品标签匹配)
- 协同过滤推荐(用户行为相似度)
- 热门商品推荐
- 场景化推荐(根据用户位置/访问时间)
订单模块:
- 微信支付集成
- 订单状态管理
- 物流跟踪
数据统计模块:
- 用户行为分析
- 商品转化率统计
- 推荐效果评估
3. 核心功能实现
3.1 个性化推荐算法
系统采用混合推荐策略,结合多种算法提升推荐准确度:
基于内容的推荐:
public List<Product> recommendByContent(Long userId) { // 获取用户画像标签 UserProfile profile = userService.getUserProfile(userId); // 使用Elasticsearch进行相似度搜索 NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder(); queryBuilder.withQuery(QueryBuilders.moreLikeThisQuery( new String[]{"name", "description", "tags"}, new String[]{profile.getInterestTags()}, null)); // 设置返回数量 queryBuilder.withPageable(PageRequest.of(0, 10)); // 执行搜索 SearchHits<Product> searchHits = elasticsearchRestTemplate.search( queryBuilder.build(), Product.class); return searchHits.stream() .map(SearchHit::getContent) .collect(Collectors.toList()); }协同过滤推荐:
# 使用Python的Surprise库进行离线计算 from surprise import Dataset, KNNBasic from surprise.model_selection import train_test_split # 加载用户行为数据 data = Dataset.load_from_df(behavior_df[['user_id','product_id','rating']], reader=Reader(rating_scale=(1, 5))) # 划分训练测试集 trainset, testset = train_test_split(data, test_size=0.25) # 使用KNN算法 algo = KNNBasic(k=40, min_k=1, sim_options={'user_based': False}) algo.fit(trainset) # 为指定用户生成推荐 user_inner_id = algo.trainset.to_inner_uid(target_user_id) user_neighbors = algo.get_neighbors(user_inner_id, k=10) recommendations = [] for neighbor in user_neighbors: neighbor_ratings = algo.trainset.ur[neighbor] top_products = sorted(neighbor_ratings, key=lambda x: x[1], reverse=True)[:5] recommendations.extend([algo.trainset.to_raw_iid(x[0]) for x in top_products])实际项目中,协同过滤算法通过Java调用Python脚本实现,计算结果存入Redis缓存,有效降低实时计算压力。
3.2 微信小程序关键实现
商品详情页WXML示例:
<view class="container"> <!-- 商品图片轮播 --> <swiper indicator-dots="{{true}}" autoplay="{{true}}"> <block wx:for="{{product.images}}" wx:key="*this"> <swiper-item> <image src="{{item}}" mode="aspectFill"></image> </swiper-item> </block> </swiper> <!-- 商品基本信息 --> <view class="product-info"> <view class="title">{{product.name}}</view> <view class="price">¥{{product.price}}</view> <view class="cultural-value"> <text class="label">文化渊源:</text> {{product.culturalValue}} </view> </view> <!-- 推荐理由 --> <view class="recommend-reason" wx:if="{{recommendReason}}"> <text class="icon">✨</text> 根据您的浏览历史,为您推荐此款文创 </view> <!-- 操作按钮 --> <view class="action-bar"> <button class="btn fav" bindtap="toggleFavorite"> <image src="{{isFavorited?'/images/icon-fav-active.png':'/images/icon-fav.png'}}"></image> 收藏 </button> <button class="btn cart" bindtap="addToCart">加入购物车</button> <button class="btn buy" bindtap="buyNow">立即购买</button> </view> </view>推荐接口调用:
Page({ data: { recommendList: [] }, onLoad() { this.loadRecommendations() }, loadRecommendations() { wx.showLoading({ title: '加载中...' }) wx.request({ url: 'https://api.example.com/recommend', method: 'GET', header: { 'Authorization': 'Bearer ' + getApp().globalData.token }, success: (res) => { this.setData({ recommendList: res.data }) }, complete: () => { wx.hideLoading() } }) } })4. 项目亮点与创新
4.1 文化价值可视化
系统创新性地将文创产品与其文化渊源进行数字化关联:
- 为每件商品建立"文物原型-设计理念-使用场景"三维标签体系
- 使用时间轴展示文物历史背景
- AR扫描功能实现文物与文创的虚实结合展示
4.2 场景化推荐策略
根据不同场景动态调整推荐策略:
- 地理位置:当用户位于故宫特定展馆时,推荐相关主题文创
- 时间因素:节假日推荐礼品类商品,工作日推荐办公用品
- 天气状况:雨天推荐室内用品,晴天推荐户外用品
4.3 社交化传播设计
- 生成个性化文创海报(用户头像+推荐商品+文化语录)
- 好友助力解锁专属优惠
- 文创故事UGC内容征集
5. 部署与优化
5.1 系统部署方案
# 后端服务部署 nohup java -jar palace-culture.jar \ --spring.profiles.active=prod \ --server.port=8080 \ > application.log 2>&1 & # Redis配置 redis-server /etc/redis/redis.conf # Elasticsearch配置 cluster.name: palace-culture node.name: node-1 network.host: 0.0.0.05.2 性能优化实践
缓存策略:
- 使用Redis缓存热门商品数据(TTL 30分钟)
- 本地缓存用户画像数据(小程序storage)
数据库优化:
- 读写分离(主库写,从库读)
- 商品表按分类分片
- 用户行为表按月分表
推荐系统优化:
- 离线计算用户相似度矩阵(每日凌晨)
- 实时推荐结果缓存(有效期2小时)
- AB测试评估推荐效果
6. 项目总结
在开发过程中,有几个关键点值得特别注意:
文化准确性验证:所有文创产品的文化背景说明必须经过故宫专家审核,我们建立了专门的审核流程,确保文化传播的准确性。
推荐算法冷启动:新用户缺乏行为数据时,采用以下策略:
- 问卷调查获取初始兴趣
- 默认推荐畅销+新品组合
- 快速收集前几次交互行为
微信支付限额:文创商品中部分高价商品(如仿古书画)可能超过微信支付限额,解决方案是:
- 提供分期付款选项
- 大额商品走线下预定流程
- 拆分为多件商品组合购买
这个项目让我深刻体会到,技术赋能传统文化不能停留在表面结合,而需要深入理解文化内涵,用技术手段放大文化价值。比如我们开发的"文物AR故事"功能,用户扫描文创产品就能看到相关文物的3D模型和历史故事,这种沉浸式体验极大提升了用户的购买意愿和文化认同感。