Jadesail头像
关注
从 0 到 1 打造 GameRec:基于玩家画像的智能游戏推荐系统(Spring Boot + Vue 2 + 大模型)封面图

从 0 到 1 打造 GameRec:基于玩家画像的智能游戏推荐系统(Spring Boot + Vue 2 + 大模型)

基于玩家画像的游戏推荐与行为分析系统(GameRec)项目介绍

一句话简介:一个前后端分离的智能游戏推荐系统,基于 Steam 公开数据集构建玩家画像,融合 6 种推荐算法为用户个性化推荐游戏,并内置基于大模型的 AI 助手。

技术栈:Spring Boot · MyBatis-Plus · MySQL · Vue 2 · Element UI · ECharts · 大模型 API

适用范围:Java 后端 / 前端 / 推荐算法 / 数据分析方向的课程设计、毕业设计参考项目。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


目录

  1. 项目简介
  2. 核心功能
  3. 技术栈
  4. 系统架构
  5. 数据库设计
  6. 核心实现(代码节选)
  7. 项目目录结构
  8. 运行与部署
  9. 数据来源与版权声明
  10. 总结

1. 项目简介

GameRec 是一套完整的 游戏推荐 + 玩家行为分析 系统,解决的核心问题是:

面对数万款游戏,如何根据玩家的历史行为(购买、游玩时长),精准推荐他可能感兴趣的游戏?

项目以 Steam 平台公开数据集为基础,构建了从 数据清洗 → 玩家画像 → 推荐算法 → 效果评估 → 可视化分析 → AI 问答 的完整链路,是一个覆盖"数据工程 + 算法 + 工程实现"的综合性项目。

主要数据规模:

指标规模
游戏库2.6 万+ 款 Steam 游戏
玩家5.6 万+ 名(模拟行为数据)
行为记录10 万+ 条购买/游玩记录

项目亮点:

  • ✅ 6 种推荐算法全部落地(User-CF / Item-CF / 内容 / 流行度 / SVD / 混合),支持离线评估对比;
  • ✅ 基于 RFM 模型 + 时间衰减活跃度 + 兴趣标签的玩家画像体系;
  • ✅ 内置 AI 助手,基于系统真实数据回答游戏 / 玩家 / 统计问题,API Key 由用户自行配置,源码零密钥;
  • ✅ 前后端分离,ECharts 可视化看板,开箱即用的一键启动脚本。

2. 核心功能

2.1 玩家画像

基于用户行为数据自动计算每位玩家的多维画像:

  • RFM 价值分层:最近游玩(R)、游玩频率(F)、平均评分(M),综合划分为高 / 中 / 低价值与沉默用户;
  • 活跃度评估:基于时间衰减加权的活跃度评分,划分高热 / 中热 / 低热 / 冰封;
  • 兴趣标签:自动聚类玩家高频游玩的游戏类型,生成 TOP-N 兴趣标签;
  • 玩家类型:硬核 / 休闲 / 尝鲜 / 收藏四类。

2.2 智能推荐

算法原理适用场景
User-CF相似用户协同过滤新游戏冷门、老用户
Item-CF物品相似度协同过滤依赖用户历史评分
Content-Based基于游戏属性内容缓解冷启动
Popularity热门游戏流行度新用户冷启动
SVD矩阵分解隐因子大数据稀疏场景
Hybrid多算法加权融合综合最优

2.3 数据分析与可视化

  • 全局数据看板(用户数、游戏数、评分分布、热门游戏);
  • 开发者 / 发行商 / 平台 / 价格 / 标签等多维度分析;
  • KPI 趋势、发布年份趋势、类型趋势;
  • 算法评估:Precision@K / Recall@K / F1@K / NDCG@K 多 K 值对比。

2.4 AI 助手(大模型接入)

  • 全局浮窗 AI 助手 + 游戏详情页 / 玩家画像页场景化问答;
  • 所有回答严格基于系统数据库真实数据,不编造信息;
  • AI 接口(Key / 模型 / 地址)在「系统设置」页面由用户自行配置,源码不含任何真实密钥。

3. 技术栈

层次技术版本
后端Spring Boot2.7.14
持久层MyBatis-Plus3.5.3
数据库MySQL8.0+
前端Vue.js2.7.14
UI 组件Element UI2.15.x
可视化ECharts5.4.3
大模型智谱 BigModel(GLM 系列)免费模型
构建Maven / npm / Vue CLI3.9+ / 18+ / 5.x

4. 系统架构

┌────────────────────────────────────────────────────────────┐
│                         前端(Vue 2)                       │
│  首页看板 │ 玩家画像 │ 智能推荐 │ 数据分析 │ 算法评估       │
│  游戏搜索 │ 数据管理 │ 系统设置 │ AI 助手(浮窗)           │
└──────────────────────────┬─────────────────────────────────┘
                           │ RESTful API(Axios,8081 → 8080)
┌──────────────────────────▼─────────────────────────────────┐
│                    后端(Spring Boot)                      │
│  ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐  │
│  │ Controller│ │  Service  │ │  Mapper   │ │  算法服务  │  │
│  │  REST 层   │ │  业务层    │ │  持久层    │ │  推荐/画像 │  │
│  └───────────┘ └───────────┘ └───────────┘ └───────────┘  │
│   - 统一返回 Result / 全局异常 / 跨域配置                   │
│   - AI 服务:动态读取用户配置,调用大模型 API                │
└──────────────────────────┬─────────────────────────────────┘
                           │ JDBC
┌──────────────────────────▼─────────────────────────────────┐
│                 MySQL:game_recommend_db                   │
│  user / game / rating / rating_train / rating_test         │
│  user_profile / evaluation_result / ai_settings 等 10 表   │
└────────────────────────────────────────────────────────────┘

AI 配置优先级:数据库配置(系统设置页面) > 环境变量 > 配置文件默认值,修改后无需重启服务。


5. 数据库设计

核心表共 10 张,关键设计如下:

表名说明
user玩家表(购买数、游玩数、总时长、转化率)
game游戏表(2.6 万+ 款,含名称、类型、价格、评分、评价等 40+ 字段)
rating评分表(游玩时长分箱 → 1-5 分伪评分,支持逻辑删除)
rating_train / rating_test训练集 / 测试集(按行为序列 8:2 划分)
user_profile玩家画像表(RFM 评分、价值等级、活跃度、兴趣标签、玩家类型)
evaluation_result算法离线评估结果表(Precision / Recall / F1 / NDCG)
data_import_record数据导入日志表
game_alias游戏别名表(支持 CS:GO 等缩写搜索)
ai_settingsAI 接口设置表(用户自行配置 API Key / 模型 / 地址,单行存储)

特色设计:评分采用「游玩时长分箱 → 伪评分」方案,保留原始时长数据的同时解决评分稀疏问题;is_valid 字段实现逻辑删除,支撑数据清洗流程。


6. 核心实现(代码节选)

说明:以下仅展示具有代表性的核心代码片段,完整代码以实际项目为准。

6.1 用户协同过滤(User-CF):相似用户计算

// UserCFService.java(节选)
// 1. 计算目标用户与所有其他用户的余弦相似度
Map<Long, Double> similarities = new HashMap<>();
for (Map.Entry<Long, Map<Long, Integer>> entry : ratingMatrix.entrySet()) {
    Long otherUserId = entry.getKey();
    if (otherUserId.equals(userId)) continue;

    Map<Long, Integer> otherRatings = entry.getValue();
    double similarity = SimilarityUtil.cosineSimilarityInt(targetRatings, otherRatings);

    if (similarity > 0) {
        similarities.put(otherUserId, similarity);
    }
}

// 2. 取 Top-K 相似用户
List<Map.Entry<Long, Double>> topKSimilar = similarities.entrySet().stream()
        .sorted((a, b) -> Double.compare(b.getValue(), a.getValue()))
        .limit(topK)
        .collect(Collectors.toList());

6.2 混合推荐(Hybrid):多算法加权融合

// HybridService.java(节选)
// 各算法结果按 1/rank 计分,乘以权重后累加,最终按总分排序
private void addScores(List<Map<String, Object>> recommendations, double weight,
                       Map<Long, Map<String, Object>> allItems,
                       Map<Long, Double> scores) {
    for (int i = 0; i < recommendations.size(); i++) {
        Long gameId = (Long) recommendations.get(i).get("gameId");
        double rankScore = 1.0 / (i + 1); // 1/rank 位置加权
        scores.merge(gameId, weight * rankScore, Double::sum);

        if (!allItems.containsKey(gameId)) {
            allItems.put(gameId, recommendations.get(i));
        }
    }
}
// 默认权重示例:[User-CF, Item-CF, CB, SVD, Popularity] = {0.35, 0.25, 0.15, 0.15, 0.10}

6.3 AI 助手:用户自定义 API 配置(动态生效)

// AiSettingsService.java(节选)
// 计算「生效配置」:数据库优先,yml / 环境变量兜底
public AiConfig getEffectiveConfig() {
    AiConfig effective = new AiConfig();
    // 1. 复制 yml 默认值(环境变量可覆盖)
    effective.setApiKey(aiConfig.getApiKey());
    effective.setModel(aiConfig.getModel());
    effective.setBaseUrl(aiConfig.getBaseUrl());
    // ... 其余字段同理 ...

    // 2. 数据库配置覆盖(用户在系统设置页面填写,无需重启)
    AiSettings s = getSettings();
    if (s != null) {
        if (isValidKey(s.getApiKey())) effective.setApiKey(s.getApiKey());
        if (s.getModel() != null && !s.getModel().trim().isEmpty()) {
            effective.setModel(s.getModel().trim());
        }
        if (s.getBaseUrl() != null && !s.getBaseUrl().trim().isEmpty()) {
            effective.setBaseUrl(s.getBaseUrl().trim());
        }
    }
    return effective;
}

// API Key 脱敏展示:仅保留前 4 位与后 4 位
public String maskKey(String apiKey) {
    if (!isValidKey(apiKey)) return "";
    return apiKey.substring(0, 4) + "****" + apiKey.substring(apiKey.length() - 4);
}
# application.yml(AI 配置,默认 Key 为空,由用户自行填写)
game-rec:
  ai:
    enabled: true
    api-key: ${AI_API_KEY:}
    model: glm-4-flash-250414
    base-url: https://open.bigmodel.cn/api/paas/v4

6.4 前端:设置页面保存逻辑(Vue 2)

// Settings.vue(节选)
async saveSettings() {
  // 安全约定:输入框为空或与脱敏值相同 → 传空字符串,后端保留原 Key
  const submittedKey = this.form.apiKey.trim();
  const payload = {
    enabled: this.form.enabled ? 1 : 0,
    apiKey: submittedKey === '' || submittedKey === this.apiKeyMasked ? '' : submittedKey,
    model: this.form.model.trim(),
    baseUrl: this.form.baseUrl.trim(),
    maxTokens: this.form.maxTokens,
    temperature: this.form.temperature,
    timeoutSeconds: this.form.timeoutSeconds
  };
  const res = await this.$axios.post('/ai/settings', payload);
  if (res.data.code === 200) {
    this.$message.success('AI 设置已保存,立即生效(无需重启服务)');
  }
}

7. 项目目录结构

智能游戏推荐与玩家行为分析系统/
├── start.bat / start.ps1              # 一键启动脚本(构建 + 启动 + 开浏览器)
├── SETUP.md                           # 部署文档
│
├── game-recommend-system/             # 后端(Spring Boot)
│   └── src/main/java/com/xinyang/gamerecommend/
│       ├── controller/                # REST 接口层(10+ 控制器)
│       ├── service/                   # 业务层(推荐算法 / 画像 / AI 等)
│       ├── ai/                        # AI 助手模块(服务 + 配置 + 请求模型)
│       ├── entity/ mapper/ dto/ util/ # 实体 / 持久层 / DTO / 工具类
│       └── config/                    # 跨域 / 全局异常 / MyBatis-Plus 配置
│
├── game-recommend-frontend/           # 前端(Vue 2 + Element UI + ECharts)
│   └── src/
│       ├── views/                     # 11 个页面(看板 / 画像 / 推荐 / 分析 / 评估 / 设置等)
│       ├── components/                # AI 助手等 7 个通用组件
│       ├── api/ router/ utils/ styles/# 接口封装 / 路由 / 工具 / 设计令牌
│
├── sql/                               # 建表 DDL + 索引优化 + 数据导入脚本
├── scripts/                           # Python 数据处理 / 数据库工具脚本
├── data/                              # 原始 CSV 数据集
└── generated-images/                  # AI 生成的游戏封面图

8. 运行与部署

8.1 环境要求

组件版本
JDK17+
Node.js18+
MySQL8.0+
Maven3.8+(可选,重新打包时用)

8.2 启动步骤

# 1. 初始化数据库(建表 + 导入数据)
mysql -u root -p < sql/01_create_database.sql
python scripts/init_database.py          # 导入 CSV 数据

# 2. 启动后端(端口 8080)
cd game-recommend-system
mvn spring-boot:run

# 3. 启动前端(端口 8081)
cd game-recommend-frontend
npm install
npm run serve

项目还提供 start.ps1 / start.bat 一键启动脚本,自动完成环境检查、构建、端口清理与服务启动。

8.3 访问地址

服务地址
前端界面http://localhost:8081
后端 APIhttp://localhost:8080

9. 数据来源与版权声明

数据来源:

  • 游戏基础数据:来自 Steam 平台公开游戏数据(通过 Kaggle 等公开渠道获取的 Steam 游戏数据集,包含游戏名称、类型、价格、评分、评价等元数据);
  • 用户行为数据:为模拟生成的公开行为数据集(购买 / 游玩记录),不涉及任何真实用户个人信息;
  • 游戏封面图:由 AI 工具生成的示意图片。

版权声明:

  1. 本项目代码为原创,仅用于学习交流与个人项目展示,请勿用于商业用途;
  2. Steam 及其游戏名称为 Valve Corporation 的商标,数据版权归原平台 / 原作者所有,本项目仅作学术研究使用;
  3. 大模型能力由智谱 AI 开放平台提供,接口调用请遵循其服务条款;
  4. 文中不包含任何真实 API Key、数据库密码或个人敏感信息,可放心用于开源与博客分享;
  5. 转载或参考本文档内容,请注明出处。

10. 总结

GameRec 项目完整实践了一条 数据 → 画像 → 算法 → 评估 → 应用 的推荐系统开发链路:

  • 工程层面:前后端分离、分层架构、统一返回与异常处理、一键部署;
  • 算法层面:6 种推荐算法实现与离线评估,覆盖冷启动与稀疏场景;
  • 数据层面:完整的数据清洗、矩阵构建、画像计算的闭环;
  • 应用层面:大模型 AI 助手、可视化分析看板,且密钥由用户自行配置,安全可开源。

如果你正在做推荐系统方向的设计或开发,这个项目从架构到算法实现都值得参考。


提示:本文档用于项目展示与交流,仅展示核心代码节选;如需完整代码与部署文档,可私信交流。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/2302_80657338/article/details/166736157

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--