SONARE 是一个通过用户歌单理解其音乐故事的音乐画像与推荐系统。
用户只需要导入网易云音乐或 QQ 音乐歌单链接,或者手动粘贴歌曲名与歌手名,系统会分析歌单中的风格、情绪、歌手倾向和反复出现的声音,生成「音乐身份」「音乐画像」「声音织物」以及下一章节推荐。
它不是传统播放器,也不是后台式数据报表。SONARE 更像一份写给用户的音乐短文:先听见歌单,再理解用户,最后推荐下一章节。
- 歌单导入:支持网易云音乐链接、短链、歌单 ID,以及 QQ 音乐歌单链接。
- 手动导入:支持直接粘贴
歌曲名,歌手名或歌曲名 - 歌手名。 - 大模型分析:调用 OpenAI 兼容接口生成音乐画像、故事总结和推荐理由。
- 本地兜底:未配置大模型 API Key 时,使用本地规则生成演示画像。
- 音乐身份:根据标签组合生成文学化身份,如「午夜叙事者」「回忆收藏家」。
- 结果页叙事:包含音乐身份、音乐画像星图、声音织物、下一章节推荐。
- Demo 模式:使用 H2 内存数据库,无需安装 MySQL 即可演示。
- Java 17
- Spring Boot 3.3
- Maven
- Thymeleaf
- MyBatis-Plus
- H2 / MySQL 8
- OpenAI 兼容大模型接口
- Meting 风格音乐数据接口
推荐先使用 Demo 模式启动,Demo 模式会使用 H2 内存数据库:
.\run-demo.ps1启动后访问:
http://localhost:8080
如果你的 Maven 不在 D:\apache-maven-3.9.16,可以改用通用命令:
$env:SPRING_PROFILES_ACTIVE="demo"
mvn clean compile exec:java不要把 API Key 写进代码或提交到 Git。请使用环境变量:
$env:LLM_API_KEY="你的大模型 API Key"
$env:LLM_BASE_URL="https://api.deepseek.com"
$env:LLM_MODEL="deepseek-v4-pro"可选配置:
$env:LLM_JSON_MODE="true"
$env:LLM_DEEPSEEK_THINKING="false"未配置 LLM_API_KEY 时,系统不会中断,会使用本地简易规则生成演示结果。
默认配置使用 MySQL:
spring:
datasource:
url: jdbc:mysql://localhost:3306/music_recommend
username: ${MYSQL_USER:root}
password: ${MYSQL_PASSWORD:123456}启动前可以设置数据库账号密码:
$env:MYSQL_USER="root"
$env:MYSQL_PASSWORD="你的 MySQL 密码"
mvn clean compile exec:java数据库表结构和初始化数据位于:
src/main/resources/schema.sqlsrc/main/resources/data.sqlsrc/main/resources/schema-demo.sqlsrc/main/resources/data-demo.sql
网易云音乐:
https://music.163.com/#/playlist?id=123456789
https://163cn.tv/xxxxxx
123456789
QQ 音乐:
https://y.qq.com/n/ryqq/playlist/123456789
https://i.y.qq.com/n2/m/share/details/taoge.html?id=123456789
手动输入:
晴天,周杰伦
七里香 - 周杰伦
成都 赵雷
平凡之路,朴树
注意:外部歌单需要是公开歌单。短链或分享链接如果已经失效,系统可能无法解析。
项目通过 Meting 风格接口读取歌单:
music:
meting:
api-template: https://api.injahow.cn/meting/?server=:server&type=:type&id=:id&r=:r
server: netease网易云歌单会使用 server=netease,QQ 音乐歌单会使用 server=tencent。如果当前公开接口不可用,可以在 src/main/resources/application.yml 中替换为其他兼容 Meting 的接口地址。
src/main/java/com/example/musicrecommender
├── controller 页面入口与分析请求
├── dto 歌单、画像、推荐结果 DTO
├── entity 数据库实体
├── mapper MyBatis-Plus Mapper
├── service 歌单解析、外部音乐接口、大模型分析、推荐服务
└── config 应用配置
src/main/resources
├── templates Thymeleaf 页面
├── static/css SONARE 前端样式
├── static/img 背景图资源
├── schema.sql MySQL 表结构
└── data.sql 初始化数据
运行:
mvn test当前测试覆盖:
- Spring Boot 上下文启动
- 网易云 / QQ 音乐链接解析
- 推荐向量计算
本项目的「基于深度学习」主要体现在用大模型理解歌单文本、抽取音乐画像,并结合标签、歌手、情绪、歌单上下文生成个性化推荐。课设展示时可以解释为轻量级智能推荐系统:使用外部音乐数据源获取歌曲信息,使用大模型构造用户画像,再根据画像生成下一章节推荐。