ruoyi-vue-pro 开发指南 ruoyi-vue-pro 开发指南
  • 萌新必读
  • 后端手册
  • 中间件手册
  • 工作流手册
  • 报表与大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • MES 手册
  • WMS 手册
  • HRM 手册
  • FMS 手册
  • PMS 手册
  • OA 手册
  • IM 即时通讯手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 系统手册
  • 运维手册
  • 前端手册 Vue 3.x
  • 前端手册 Vben 5.x
  • 前端手册 Vue 2.x
  • 前端手册 Admin Uniapp
  • 工作流手册
  • 报表与大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • MES 手册
  • WMS 手册
  • HRM 手册
  • FMS 手册
  • PMS 手册
  • OA 手册
  • IM 即时通讯手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 系统手册
视频教程
  • Vue3 + element-plus (opens new window)
  • Vue3 + vben5(ant-design-vue、element-plus) (opens new window)
  • Vue2 + element-ui (opens new window)
微服务版 (opens new window)
作者博客 (opens new window)
GitHub (opens new window)
  • 萌新必读
  • 后端手册
  • 中间件手册
  • 工作流手册
  • 报表与大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • MES 手册
  • WMS 手册
  • HRM 手册
  • FMS 手册
  • PMS 手册
  • OA 手册
  • IM 即时通讯手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 系统手册
  • 运维手册
  • 前端手册 Vue 3.x
  • 前端手册 Vben 5.x
  • 前端手册 Vue 2.x
  • 前端手册 Admin Uniapp
  • 工作流手册
  • 报表与大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • MES 手册
  • WMS 手册
  • HRM 手册
  • FMS 手册
  • PMS 手册
  • OA 手册
  • IM 即时通讯手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 系统手册
视频教程
  • Vue3 + element-plus (opens new window)
  • Vue3 + vben5(ant-design-vue、element-plus) (opens new window)
  • Vue2 + element-ui (opens new window)
微服务版 (opens new window)
作者博客 (opens new window)
GitHub (opens new window)
  • 萌新必读

    • 简介
    • 交流群
    • 视频教程
    • 功能列表
    • 快速启动(后端项目)
    • 快速启动(前端项目)
    • 接口文档
    • 技术选型
    • 项目结构
    • 代码热加载
    • 一键改包
    • 迁移模块(适合新项目)
    • 删除功能(以租户为例)
    • 表结构变更(版本升级)
    • 国产信创数据库(DM 达梦、大金、OpenGauss、瀚高、OceanBase、TiDB、GaussDB、PolarDB、神通、Vastbase、MogDB、TongRDS、CacheDB)
    • 如何去除 Redis 缓存
    • 面试题、简历模版、简历优化
    • 项目外包
    • 文档 MCP
  • 后端手册

    • 新建模块
    • 代码生成【单表】(新增功能)
    • 代码生成【主子表】
    • 代码生成(树表)
    • 代码生成(移动端)
    • 功能权限
    • 数据权限
    • 用户体系
    • 三方登录
    • OAuth 2.0(SSO 单点登录)
    • SaaS 多租户【字段隔离】
    • SaaS 多租户【数据库隔离】
    • WebSocket 实时通信
    • 异常处理(错误码)
    • 参数校验、时间传参
    • 分页实现
    • VO 对象转换、数据翻译
    • 文件存储(上传下载)
    • Excel 导入导出
    • 操作日志、访问日志、异常日志
    • MyBatis 数据库
    • MyBatis 联表&分页查询
    • 多数据源(读写分离)、事务
    • Redis 缓存
    • 本地缓存
    • 异步任务
    • 分布式锁
    • 幂等性(防重复提交)
    • 请求限流(RateLimiter)
    • HTTP 接口签名(防篡改)
    • HTTP 接口加解密
    • 单元测试
    • 验证码
    • 工具类 Util
    • 配置管理
    • 数据库文档
  • 中间件手册

    • 定时任务
    • 消息队列(内存)
    • 消息队列(Redis)
    • 消息队列(RocketMQ)
    • 消息队列(RabbitMQ)
    • 消息队列(Kafka)
    • 限流熔断
    • 分库分表
    • 分布式事务
  • 工作流手册

    • 工作流演示
    • 功能开启
    • 工作流(达梦适配)
    • 审批接入(流程表单)
    • 审批接入(业务表单)
    • 流程设计器(BPMN)
    • 流程设计器(钉钉、飞书)
    • 选择审批人、发起人自选
    • 会签、或签、依次审批
    • 流程发起、取消、重新发起
    • 审批通过、不通过、驳回
    • 审批加签、减签
    • 审批转办、委派、抄送
    • 执行监听器、任务监听器
    • 流程表达式
    • 流程审批通知
    • 移动端审批
  • 报表与大屏手册

    • 功能总览
    • UReport2 报表
    • 积木报表与仪表盘
    • GoView 大屏
  • 支付手册

    • 功能开启
    • 支付宝支付接入
    • 微信公众号支付接入
    • 微信小程序支付接入
    • 支付宝、微信退款接入
    • 支付宝转账接入
    • 微信转账接入
    • 钱包充值、支付、退款
    • 模拟支付、退款
    • 移动端支付管理
  • 会员手册

    • 功能开启
    • 微信公众号登录
    • 微信小程序登录
    • 微信小程序订阅消息
    • 微信小程序码
    • 会员用户、标签、分组
    • 会员等级、积分、签到
    • 移动端会员管理
  • 商城手册

    • 商城演示
    • 功能开启
    • 商城装修
    • 在线客服
    • 【商品】商品分类
    • 【商品】商品属性
    • 【商品】商品 SPU 与 SKU
    • 【商品】商品评价
    • 【交易】购物车
    • 【交易】交易订单
    • 【交易】售后退款
    • 【交易】快递发货
    • 【交易】门店自提
    • 【交易】分销返佣
    • 【营销】优惠劵
    • 【营销】积分商城
    • 【营销】拼团活动
    • 【营销】秒杀活动
    • 【营销】砍价活动
    • 【营销】满减送活动
    • 【营销】限时折扣
    • 【营销】内容管理
    • 【统计】会员、商品、交易统计
    • 移动端商城管理
  • ERP手册

    • ERP 演示
    • 功能开启
    • 【产品】产品信息、分类、单位
    • 【库存】产品库存、库存明细
    • 【库存】其它入库、其它出库
    • 【库存】库存调拨、库存盘点
    • 【采购】采购订单、入库、退货
    • 【销售】销售订单、出库、退货
    • 【财务】采购付款、销售收款
    • 移动端 ERP
  • CRM手册

    • CRM 演示
    • 功能开启
    • 【线索】线索管理
    • 【客户】客户管理、公海客户
    • 【商机】商机管理、商机状态
    • 【合同】合同管理、合同提醒
    • 【回款】回款管理、回款计划
    • 【产品】产品管理、产品分类
    • 【通用】数据权限
    • 【通用】跟进记录、待办事项
    • 移动端 CRM
  • AI大模型手册

    • AI 大模型演示
    • 功能开启
    • AI 聊天对话
    • AI 绘画创作
    • AI 知识库(RAG)
    • AI 音乐创作
      • 1. 前置准备
        • 1.1 配置 API 密钥
        • 1.2 配置音乐模型
        • 1.3 开启定时任务
      • 2. 音乐创作
        • 2.1 灵感模式
        • 2.2 自定义模式
        • 2.3 续写与合并
        • 2.4 上传音频
        • 2.5 我的作品
      • 3. 音乐管理
      • 4. 音乐表
    • AI 写作助手
    • AI 思维导图
    • AI 工具(function calling)
    • AI 工作流
    • Dify 工作流
    • FastGPT 工作流
    • Coze 智能体
    • AI PPT 生成
    • 推理模式(thinking)
    • 联网搜索
    • MCP Client 客户端
    • MCP Server 服务端
    • 请求日志与 Token 用量
    • 【模型接入】Claude
    • 【模型接入】OpenAI
    • 【模型接入】谷歌 Gemini
    • 【模型接入】Grok
    • 【模型接入】通义千问
    • 【模型接入】DeepSeek
    • 【模型接入】字节豆包
    • 【模型接入】智谱 GLM
    • 【模型接入】月之暗面 Kimi
    • 【模型接入】MiniMax
    • 【模型接入】腾讯混元
    • 【模型接入】小米 MiMo
    • 【模型接入】硅基流动
    • 【模型接入】百川智能
    • 【模型接入】文心一言
    • 【模型接入】阶跃星辰
    • 【模型接入】讯飞星火
    • 【模型接入】LLAMA
    • 【模型接入】微软 OpenAI
    • 【模型接入】Stable Diffusion
    • 【模型接入】Midjourney
    • 【模型接入】Suno
    • 移动端 AI 大模型
  • IoT物联网手册

    • 功能开启
    • 产品管理
    • 设备管理
    • 物模型配置
    • 设备网关与子设备
    • 设备动态注册
    • 设备影子
    • 消息透传与数据解析
    • 设备接入(概述)
    • 设备接入(HTTP 协议)
    • 设备接入(MQTT 协议)
    • 设备接入(EMQX 协议)
    • 设备接入(TCP 协议)
    • 设备接入(UDP 协议)
    • 设备接入(WebSocket 协议)
    • 设备接入(CoAP 协议)
    • 设备接入(Modbus Client 模式)
    • 设备接入(Modbus Server 模式)
    • 设备接入(自定义协议)
    • 场景联动
    • 数据流转
    • 告警配置
    • OTA 固件升级
    • 移动端 IoT 物联网
    • 设备网关合并部署
  • MES手册

    • MES 演示
    • 功能开启
    • 【基础】物料产品、分类、计量单位
    • 【基础】客户管理、供应商管理
    • 【基础】车间设置、工作站设置
    • 【基础】编码规则
    • 【生产】工序设置、工艺流程
    • 【生产】生产工单
    • 【生产】生产排产、工序流转卡
    • 【生产】生产报工
    • 【生产】安灯配置、安灯呼叫
    • 【生产】工作记录
    • 【仓库】仓库与库区库位、条码赋码、SN码
    • 【仓库】批次管理、库存现有量、库存事务
    • 【仓库】到货通知、采购入库、采购退货
    • 【仓库】生产领料、生产退料、物料消耗
    • 【仓库】产品产出、产品入库
    • 【仓库】发货通知、销售出库、销售退货
    • 【仓库】外协发料、外协入库
    • 【仓库】其他入库、其他出库
    • 【仓库】调拨单、装箱管理
    • 【仓库】库存盘点
    • 【质量】检测项设置、常见缺陷
    • 【质量】质检方案
    • 【质量】来料检验(IQC)
    • 【质量】过程检验(IPQC)
    • 【质量】出货检验(OQC)
    • 【质量】退货检验(RQC)
    • 【质量】待检任务、检验结果、缺陷记录
    • 【设备】设备类型、设备台账
    • 【设备】点检保养项目、点检保养方案
    • 【设备】点检记录、保养记录、维修单
    • 【工具】工具类型、工装夹具台账
    • 【排班】班组设置、节假日设置
    • 【排班】排班计划、排班日历
    • 移动端 MES
  • WMS手册

    • WMS 演示
    • 功能开启
    • 【基础】仓库
    • 【基础】商品、SKU、分类、品牌
    • 【基础】往来企业(供应商、客户)
    • 【库存】库存记录、流水、统计
    • 【单据】入库
    • 【单据】出库
    • 【单据】移库
    • 【单据】盘库
    • 【其它】WMS、MES、ERP 对比
    • 移动端 WMS
  • HRM人力资源

    • HRM 演示
    • 功能开启
    • 【组织】工作台、组织架构
    • 【员工】员工管理
    • 【招聘】招聘管理
    • 【考勤】考勤管理
    • 【社保】社保管理
    • 【薪资】计薪设置、薪资档案
    • 【薪资】月度工资、工资条
    • 【绩效】绩效模板、绩效计划
    • 【绩效】绩效考核、绩效档案
    • 移动端 HRM
  • FMS财务管理

    • FMS 演示
    • 功能开启
    • 【设置】账套管理、财务参数、财务指标
    • 【设置】币别、科目、辅助核算、初始余额
    • 【设置】凭证字、常用摘要、凭证模板
    • 【凭证】凭证管理
    • 【账簿】账簿管理
    • 【报表】财务报表
    • 【结账】期末结账
    • 移动端 FMS
  • PMS项目管理

    • PMS 演示
    • 功能开启
    • 【项目中心】工作台与项目管理
    • 【项目中心】项目详情与迭代
    • 【项目中心】工作项与协作
    • 【知识中心】知识库管理
    • 【知识中心】文档与协作
    • 移动端 PMS
  • OA协同办公

    • OA 演示
    • 功能开启
    • 【协作】日程、任务、计划与汇报
    • 【协作】公告、讨论、通讯录与笔记
    • 【办公】企业邮箱
    • 【办公】企业云盘
    • 【行政】办公用品、用印管理
    • 【行政】会议室、车辆管理
    • 【流程】公文管理
    • 【流程】出差、费用报销
    • 【流程】考勤、请假、加班、转正与离职
    • 移动端 OA
  • IM即时通讯手册

    • IM 演示
    • 功能开启
    • 【好友】好友关系、好友申请
    • 【群聊】群组、群成员、入群申请
    • 【消息】私聊、群聊、频道消息
    • 【频道】频道、频道素材
    • 【内容】表情、敏感词
    • 【通话】语音通话、视频通话、共享屏幕
    • 【WebSocket】实时推送与离线消息
    • 移动端 IM 即时通讯
  • 公众号手册

    • 功能开启
    • 公众号接入
    • 公众号粉丝
    • 公众号标签
    • 公众号消息
    • 模版消息
    • 自动回复
    • 公众号菜单
    • 公众号素材
    • 公众号图文
    • 公众号统计
    • 移动端公众号管理
  • 系统手册

    • 短信配置
    • 邮件配置
    • 站内信配置
    • Webhook(钉钉、飞书、企微)
    • 数据脱敏、字段权限
    • 敏感词
    • 地区 & IP 库
  • 运维手册

    • 开发环境
    • Linux 部署
    • Docker 部署
    • Jenkins 部署
    • 宝塔部署
    • 1Panel 部署
    • Docker Compose 部署
    • Kubernetes 部署
    • HTTPS 证书
    • 服务监控
    • 生产环境安全
    • Tomcat WAR 部署
    • 东方通服务器部署(TongWeb、TongHttpServer)
    • 宝兰德服务器部署(BES AppServer)
    • 内网穿透
  • 前端手册 Vue 3.x

    • 开发规范
    • 菜单路由
    • Icon 图标
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
    • CRUD 组件
    • 国际化
    • IDE 调试
    • 代码格式化
  • 前端手册 Vben 5.x

    • 开发规范
    • 菜单路由
    • 图标、主题、国际化
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
    • IDE 调试
    • 代码格式化
  • 前端手册 Vue 2.x

    • 开发规范
    • 菜单路由
    • Icon 图标
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
  • 前端手册 Admin Uniapp

    • 开发规范
    • 菜单路由
    • 图标、主题、国际化
    • 字典数据
    • 系统组件
    • 通用方法
    • IDE 调试
    • 代码格式化
    • 运行发布
  • 更新日志

    • 【v2026-11】
    • 【v2026-10】
    • 【v2026-09】
    • 【v2026-08】
    • 【v2026-07】
    • 【v2026-06】
    • 【v2026-05】
    • 【v2026-04】
    • 【v2026-03】
    • 【v2026-01】
    • 【v2025-12】
    • 【v2025-11】
    • 【v2025-10】
    • 【v2025-09】
    • 【v2025-08】
  • 开发指南
  • AI大模型手册
芋道源码
2024-06-29
目录

AI 音乐创作

AI 音乐,基于 LLM 大模型,实现使用文本(描述、歌词)生成歌曲的功能。目前接入的是:

  • Suno AI 的 Suno 模型:通过 Suno 中转调用,接口与 Java 调用见 《【模型接入】Suno》

模型选择:

Suno 是目前芋道支持最完整的音乐模型,支持灵感、自定义、续写、合并、上传等功能。

如果你有其它需求,也可以按需评估国产的音乐模型,例如说:

  • MiniMax 的 MiniMax Music (opens new window)
  • Mureka 的 Mureka API (opens new window)
  • 火山引擎的 豆包音乐大模型 (opens new window)

它们使用各自独立的 API / 模型服务,项目暂未接入,需要自行适配,不能在当前音乐模块里直接切换。

整个功能,涉及到 3 个表:

  • 【配置】ai_api_key:API 密钥表
  • 【配置】ai_model:模型表
  • 【音乐】ai_music:音乐表

补充说明:

ai_api_key、ai_model 已经在 《功能开启》 讲解,就不重复赘述。

# 1. 前置准备

# 1.1 配置 API 密钥

芋道通过 Suno 中转提供音乐创作,渠道需要提供的接口与 Suno 的申请方式,见 《【模型接入】Suno》。

在 [AI 大模型 -> 控制台 -> API 密钥] 菜单,新增一个密钥:

  • 所属平台:选择「Suno」
  • 密钥:填写中转渠道提供的密钥
  • 自定义 API URL:填写中转的根地址,系统按渠道选择接口路径

中转渠道示例:

目前已实测的中转渠道有 InfAI、SalpX、apimax,密钥填写渠道提供的 Suno 密钥,各自的自定义 API URL、模型标识与实测范围,见 《【模型接入】Suno》 的「1.2 中转方式」。实际可用的模型版本、价格、分组,以渠道最新文档为准。

# 1.2 配置音乐模型

在 [AI 大模型 -> 控制台 -> 模型配置] 菜单,新增一个模型:

  • 所属平台:选择「Suno」
  • 模型类型:选择「音乐」,对应 AiModelTypeEnum 的 MUSIC(type 为 7)。创作时会校验模型必须是 Suno 平台的音乐模型
  • API 秘钥:选择上一步配置的密钥
  • 模型名字:展示名称,例如说 Suno v5
  • 模型标识:填写中转支持的 Suno 版本标识,以渠道文档为准。例如说 InfAI 填写 chirp-v6,SalpX 填写 V6,apimax 填写 suno_music
  • 模型简介、模型图标:选填,对应 ai_model 表的 description、icon_url 字段(见 《功能开启》 的「4.2 模型表」),会展示在创作页的模型下拉框里

音乐模型配置

可以配置多个音乐模型,用户创作时在下拉框中选择。

# 1.3 开启定时任务

Suno 生成歌曲是异步的,需要定时执行 AiMusicSyncJob 任务(JobHandler 名字为 aiMusicSyncJob),查询生成进度,并把封面、音频转存到项目的文件服务。建议每 10 秒执行一次,即 Cron 表达式 0/10 * * * * ?。

具体怎么配置定时任务,可以参考 《定时任务》 文档。默认 SQL 里已经有「AI 音乐同步 Job」任务,只是处于暂停状态,开启即可。

# 2. 音乐创作

前端对应 [AI 大模型 -> AI 音乐] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/ai/music/index 目录,提供给普通用户使用。

左边是创作面板,右边是【我的作品】【音乐广场】。有作品在生成中时,【我的作品】会自动刷新。后端 HTTP 接口,由 yudao-module-ai 模块的 music 包的 AiMusicController 实现。

# 2.1 灵感模式

只需要输入一段「歌曲描述」,由 Suno 自动生成歌词、风格和名称。打开「纯音乐」,则只生成伴奏。

灵感模式

# 2.2 自定义模式

自己填写「歌词」「音乐风格」「歌曲名称」:

  • 歌词:可以点击【AI 生成歌词】按钮,输入一个主题后,使用 [模型配置] 中排序最靠前、已开启的对话模型生成歌词和名称
  • 音乐风格:可以直接输入英文风格,也可以点选下方的预置标签

自定义模式

提交后,一次生成一般会得到 2 首歌曲,每首各占一条作品记录。

# 2.3 续写与合并

已完成的作品,可以进行续写和合并:

  • 续写:点击作品的【续写】按钮,填写续写起点(秒)和续写部分的歌词,生成接在原曲后面的新片段。续写会沿用原曲的模型和 API 密钥
  • 合并:续写完成后,点击续写作品的【合并】按钮,把续写片段与原曲合并成一首完整的歌曲

续写、合并的入口按钮,以及“续写”“完整歌曲”标签,可见「2.2 自定义模式」的截图。点击【续写】后,左侧创作面板会切换为「续写歌曲」:顶部展示原曲的封面、名称、模型和时长,下方填写续写起点(默认原曲结尾)、歌词、风格和名称;点击【取消续写】可回到普通创作。

# 2.4 上传音频

点击创作面板底部的【上传音乐】按钮(可见「2.2 自定义模式」的截图),上传 mp3 或 wav 格式的音频。上传的作品会出现在【我的作品】中,带有“用户上传”标签,完成后可以作为续写的来源。

  • 音频先通过项目通用的文件上传,保存到文件服务,前端再只把文件地址(fileUrl)提交到 /ai/music/upload 接口
  • 后端按地址下载文件,根据实际内容校验是 mp3 或 wav,再把地址交给中转,所以中转需要能访问这个地址(私有存储会使用预签名地址)
  • 前端限制音频不超过 50MB;经后端上传时,同时受 spring.servlet.multipart.max-file-size 配置限制(默认 16MB)

中转要求:

合并(/suno/submit/concat)、上传(/suno/uploads/audio-url)不是 New API 官方 SunoAPI 插件的标准路径,需要渠道额外提供。不支持时,作品会直接失败,失败原因一般为“当前中转不支持该接口(HTTP 404)”。

# 2.5 我的作品

在【我的作品】中,可以对作品进行播放、下载、编辑(名称、封面)、公开到音乐广场、删除等操作。点击【详情】,可以查看歌词、来源等信息。

作品详情

公开的作品,会展示在【音乐广场】中,同一租户的其它用户都可以播放。

# 3. 音乐管理

前端对应 [AI 大模型 -> 控制台 -> 音乐管理] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/ai/music/manager 目录,提供给管理员使用,查看所有用户的音乐记录,可以修改是否公开、删除。

音乐管理

# 4. 音乐表

ai_music:音乐表,一首歌曲一条记录。同一次生成的多首歌曲,共用同一个 task_id。

省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段

CREATE TABLE `ai_music` (
  `id`                bigint        NOT NULL AUTO_INCREMENT COMMENT '编号',
  `user_id`           bigint        NOT NULL COMMENT '用户编号',
  `generate_mode`     tinyint       NOT NULL COMMENT '生成模式:1 灵感 2 自定义 3 续写 4 拼接 5 上传',

  `platform`          varchar(32)   NOT NULL COMMENT '平台',
  `model_id`          bigint        NOT NULL COMMENT '模型编号',
  `model`             varchar(64)   NOT NULL COMMENT '模型标识(mv)',
  `api_key_id`        bigint        NOT NULL COMMENT 'API 密钥编号(提交时绑定)',

  `title`             varchar(128)  NULL     COMMENT '音乐名称',
  `prompt`            varchar(2048) NULL     COMMENT '歌曲描述(灵感模式)',
  `lyric`             text          NULL     COMMENT '歌词',
  `tags`              varchar(1024) NULL     COMMENT '音乐风格',
  `make_instrumental` bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否纯音乐',
  `ref_music_id`      bigint        NULL     COMMENT '来源音乐编号(续写、拼接)',
  `extend_seconds`    int           NULL     COMMENT '续写起点(秒)',

  `cover_url`         varchar(1024) NULL     COMMENT '封面地址',
  `audio_url`         varchar(1024) NULL     COMMENT '音频地址',
  `video_url`         varchar(1024) NULL     COMMENT '视频地址(中转返回,可空)',
  `duration`          double        NULL     COMMENT '时长(秒)',

  `status`            tinyint       NOT NULL COMMENT '状态:10 待处理 20 生成中 30 转存中 40 已完成 50 已失败',
  `progress`          tinyint       NOT NULL DEFAULT 0 COMMENT '进度(0-100)',
  `error_message`     varchar(1024) NULL     COMMENT '错误信息',

  `public_status`     bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否公开',
  `play_count`        int           NOT NULL DEFAULT 0 COMMENT '播放次数',

  `task_id`           varchar(64)   NULL     COMMENT '中转任务编号',
  `clip_id`           varchar(64)   NULL     COMMENT '中转歌曲编号',
  `finish_time`       datetime      NULL     COMMENT '完成时间',

  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  UNIQUE KEY `uk_api_key_task_clip` (`api_key_id`, `task_id`, `clip_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='AI 音乐表';

① user_id 字段:对应 system_users 表的 id 字段,表示哪个用户的作品。

generate_mode 字段:生成模式,对应 AiMusicGenerateModeEnum 枚举。

② platform、model_id、model、api_key_id 字段:提交时使用的模型和 API 密钥。后续查询进度、续写、合并,都使用提交时绑定的 api_key_id,即使模型后来换了密钥也不受影响。

③ title、prompt、lyric、tags、make_instrumental 字段:创作参数。灵感模式只有 prompt(歌曲描述),自定义模式填写其它字段;生成完成后,会更新为中转返回的名称、歌词、风格。

ref_music_id、extend_seconds 字段:续写、拼接时,记录来源作品;续写时,extend_seconds 记录续写起点。

④ cover_url、audio_url、video_url、duration 字段:生成结果。封面、音频会转存到文件服务,转存前是中转返回的地址;视频不转存。

⑤ status 字段:音乐状态,对应 AiMusicStatusEnum 枚举。整体流程是:

  • 用户提交时,先插入一条 10 待处理的记录,提交中转成功后,记录 task_id,更新为 20 生成中
  • AiMusicSyncJob 定时查询中转进度。生成成功后,按返回的歌曲拆分为每首一条记录,记录 clip_id,更新为 30 转存中
  • AiMusicSyncJob 把音频、封面转存到文件服务,更新为 40 已完成。封面是可选的,转存失败时置空,不影响完成
  • 中转确认失败,或从提交开始超过 30 分钟仍未完成(例如音频一直转存失败),更新为 50 已失败,失败原因记录在 error_message 字段

progress 字段:生成进度,生成中时取自中转,展示在【我的作品】中。

⑥ public_status 字段:是否公开,默认为 false 不公开。公开后展示在【音乐广场】中。

play_count 字段:播放次数。

⑦ task_id、clip_id 字段:中转返回的任务编号、歌曲编号,续写和合并时需要用到。因为不同中转可能返回相同的编号,所以唯一键带上了 api_key_id。

finish_time 字段:完成时间,已完成、已失败时记录。

最最最关键的代码!!!大家可以重点看看!!!

  • AiMusicServiceImpl:创作、同步(查询、拆分、转存、超时)的实现
  • SunoApi:调用 Suno 中转接口的实现(兼容 New API 的 /suno/* 路径,以及 apimax 的生成接口 /v1/music/generations),可见 《【模型接入】Suno》
AI 知识库(RAG)
AI 写作助手

← AI 知识库(RAG) AI 写作助手→

Theme by Vdoing | Copyright © 2019-2026 芋道源码 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×