☰
从提示词到部署:AI辅助搭建个人专属音乐平台实战
2026/10/12 4:36:39 网站建设 项目流程

开头

这段时间我一直在折腾各类AI编程工具,前阵子随口给 AiPy 丢了一句提示词,结果它真给我搭出了一个能用的专属音乐平台。这件事让我重新评估了一件事:AI 编程的价值不在“写代码”,而在“把产品需求说清楚”。说实话,我之前做了不少前端项目,也见惯了生成式代码的平淡出场,但这次从提示词到部署完成,整个过程意外地顺,期间遇到的三四个坑也很有代表性。如果你也想用 AI 生成一个带后端、带数据库、能真正跑起来的产品级项目,这篇文章值得看完;我会把完整提示词、流程、踩坑过程和后期定制方案全部拆开讲。

1. 动手那晚:从一句提示词到可用首页

1.1 我到底给了 AiPy 什么提示词

先说结果,再讲过程。我当时在 AiPy 对话框里输入的内容是这样的:

帮我构建一个个人专属音乐平台,功能包括: 1. 首页展示推荐歌单和热门单曲; 2. 播放器支持播放、暂停、上下曲切换、进度条拖动,显示当前歌曲封面与歌词滚动; 3. 支持用户创建歌单、收藏歌曲、搜索歌曲; 4. 后端用 Python 的 FastAPI,数据库用 SQLite,前端不用复杂框架,用原生 HTML + CSS + JavaScript; 5. 前端页面美观现代,使用懒加载,首屏体验流畅; 6. 准备 30 首测试歌曲数据和对应封面; 7. 项目结构要清晰,包含 README 说明、启动脚本和依赖文件。

这句话不算特别长,但它的信息密度足够高。AiPy 接到提示词后,先自动进行了任务拆解,然后分步执行:先搭后端目录,再写数据库模型,再生成种子数据,最后生成前端页面和播放器逻辑。整个过程差不多五六分钟,最后它给出一段启动命令,我本地跑起来后,浏览器里已经能看到一个完整的音乐平台首页:左侧是歌单栏,中间是推荐位,右侧是热门单曲列表,播放器固定在底部。

1.2 跑通的第一版功能清单

这一版生成出来的东西不是“空壳页面”,而是具备完整链路的最小可用产品。我当时挨个把功能试了一遍:

功能模块状态说明
歌单展示可用首页从后端接口拉取歌单列表和封面
单曲搜索可用支持按歌名和歌手模糊匹配
播放控制可用播放、暂停、切歌、拖进度条均正常
歌单操作可用可以新建歌单并添加歌曲
收藏功能可用前端有收藏按钮,后端支持存储记录
歌词滚动可用歌词按时间逐行高亮并自动滚动
数据持久化可用所有变更写入 SQLite,重启不丢数据

第一版跑通后的感受是:它确实是一个“能用的平台”了,而不是展示用的静态 Demo。但我很清楚,从“能跑”到“真正敢长期使用”,中间还有不少距离。于是后面几天我集中处理了几个硬问题和定制需求。

2. 翻车与回炉:提示词必须包含的五个要素

2.1 为什么我的提示词能“命中”

很多人用这类工具时,拿到的东西糙得没法见人,原因是提示词太笼统。你写“给我做个音乐网站”,模型只能猜需求,猜出来的东西自然不能指望。“有效提示词”的关键,不是玄学,而是把以下五个要素说清楚:

第一是角色和目标。我开头那句话“帮我构建一个个人专属音乐平台”,其实已经给模型定了预期产物的形态——不是“网页”,不是“组件”,而是一个完整的平台级项目。

第二是功能范围。我把首页、播放器、收藏、歌单、搜索这五个核心场景逐条列出,模型就知道要覆盖哪些交互,也会顺着这些功能去设计后端接口和数据模型。

第三是技术栈约束。我明确指定 FastAPI + SQLite + 原生三件套,模型就不会去生成一个需要复杂构建链的 React 项目,减少后续运行和调试成本。对不熟悉构建工具的人来说,原生 HTML 方案是最稳妥的。

第四是数据与素材准备。我要求放入 30 首测试歌曲、封面、歌词,这一点很多人会漏掉。没有种子数据的项目,启动后是空的,体验大打折扣。AiPy 会基于现有公开知识库生成占位数据,封面图则用纯 CSS 渐变占位,这在开发阶段完全够用。

第五是交付物规范。我要求包含 README、依赖文件和启动脚本,这样整个项目可以有据可循,也可以快速移植到别的机器。

2.2 一个反例:它为什么只生成了一堆代码片段

为了验证这个判断,我另外开了一个会话,用一句很短的“帮我写个音乐播放页面”去测。结果它给我返回了三个纯代码块:一个 HTML、一个 CSS、一个 JS,互相之间没有打通,也没有真实数据。你复制下来运行,播放列表是空的,只能手动去改数组。也不是完全不能用,但离“平台”差太远了。

这里的区别就是提示词的“约束力”。约束越清晰,模型做出来的产物越接近产品,而不是代码碎片。我的经验是,在提示词里加入“后端要有接口”“数据要持久化”“测试数据要自备”这类话,看似多余,实际上能强烈影响生成代码的架构层级。

2.3 提示词还可以用迭代式补全

第一次生成不可能尽善尽美,所以我会在后续继续给 AiPy 追加指令,比如“把播放器改成浅色玻璃拟态风格”“把页面改成移动端自适应”“给搜索接口增加拼音首字母匹配”。每次只改一个点,模型能定位到对应文件,改起来很快。

这一点很重要:不要把“生成”看成一次性动作,它其实是一个持续的“需求对话循环”。我最终版的音乐平台,跟最初的生成结果相比,至少迭代了四轮,每一轮都是小步调整,这样出错概率低,回滚也容易。

3. 从“能看”到“能用”:我处理的三个硬问题

3.1 第一个问题:音频文件路径和数据库记录对不上

第一版跑通后我很快就发现,部分歌曲点击播放会报 404,控制台提示音频资源找不到。我排查了一圈,发现 AiPy 生成种子数据时,数据库里存的音频文件名是audio_01.mp3,但实际生成的static/audio/目录里,某些文件被重命名成了带空格或中文的格式,两者对不上。

解决思路很直接:与其手工改几十条记录,不如写一个同步脚本。我写了一个小函数读取数据库里的song_url字段,然后去static/audio/目录做文件名比对,缺失的文件统一从备用素材目录复制并重命名。这也让我意识到,AI 生成的种子数据虽然“看起来有”,但真实可用性需要自己验证。具体做法是:

// 同步脚本的核心逻辑:保证数据库文件名与磁盘文件一致 const fs = require('fs'); const path = require('path'); // 读取数据库导出的 song_url 列表,循环检查磁盘目录

这里建议所有人在拿到生成项目后,先做一次“数据完整性测试”,就是逐个请求所有静态资源,看有没有 404。我后来把这一项直接写进了部署前的检查清单。

3.2 第二个问题:跨域和接口鉴权

另一个比较隐蔽的坑出现在我把前后端分开跑的时候。AiPy 最初生成的代码中,前端 JS 直接请求http://localhost:8000/api/songs,本地同端口下没有问题,但只要我换一个端口打开前端页面,浏览器就会因为跨域拦截而无法获取数据。

FastAPI 对这一问题的处理倒是很成熟,我只需要在后端添加 CORS 中间件,并配置允许的来源列表:

from fastapi.middleware.cors import CORSMiddleware app.add_middleware( CORSMiddleware, allow_origins=["*"], # 开发阶段用通配;上线时建议改为具体域名 allow_credentials=True, allow_methods=["*"], allow_headers=["*"] )

顺带说一个与鉴权相关的小决定:个人专属平台不需要复杂的用户体系,所以我只加了一个共享访问口令写在环境变量里,前端在首次加载时输入口令换取一个本地 token,用于后续所有接口请求。AiPy 对这类改动理解很快,我只给了三个改动点描述,它便自己完成了前后端配套修改。

3.3 第三个问题:部署到服务器之后页面能开但播放卡顿

本地跑得好好的,放到一台低配服务器上之后,页面能打开,但播放音乐时经常出现加载转圈。我观察了一下,发现是后端服务器直接负责音频文件的流式传输,而默认的静态文件挂载方式性能一般,网络稍差就会出现缓冲。

解决这个问题的方式有两种:一是把音频文件放到对象存储,由 CDN 分发;二是在后端启用更高效的静态文件服务并增加缓存头。我用的方案是在 Nginx 一层做代理和缓存,把/audio/路径单独映射到磁盘目录,并设置浏览器缓存一个月:

location /audio/ { alias /var/www/music-platform/static/audio/; expires 30d; add_header Cache-Control "public, max-age=2592000"; gzip_static on; }

经过这个调整后,播放卡顿的问题基本消失。这个小插曲也提醒我:AI 生成的代码默认在开发环境合理,但生产环境性能调优还是得靠自己的常识来补。

4. 把产品做成“我的”:专属功能的定制笔记

4.1 不只会播放:我加入的专属小功能

跑通基本功能之后,我开始琢磨“专属”两个字的分量。如果只是能听歌,那网上随便一个音乐 App 都比它强;既然是自己专属的平台,就应该有一些贴合个人使用习惯的设计。

我让 AiPy 加了三个专属功能:

第一个是“每日随机三首”模块。每天第一次打开首页时,页面会从全曲库中随机挑三首推荐,带一句评价卡片,灵感来自每天想听点新东西但又不想思考选什么的需求。

第二个是“听歌记录”看板。后端每次播放时写入一条播放记录,前端用一个简单柱状图展示一周内每天的听歌时长,数据存在本地 SQLite. 看到这个图表,自己最近偏好一目了然。

第三个是“随手记歌词”。在播放页面中新增一个浮窗,允许我随时保存当前播放歌曲的一句歌词并附上想法。这些碎片会被汇总到一个“歌词随笔”页面,按时间倒序展示。

这三个功能都不复杂,但显著增强了“这是我自己平台”的感觉。和 AiPy 协作的过程中,我把它当成一个能快速执行需求的开发伙伴,而不是一次性代码生成器。

4.2 前端视觉语言的统一

AI 生成的页面虽然能用,但默认样式有时候比较“模板感”。 我把视觉方向重新定了调:整体采用渐变紫灰背景,卡片使用半透明玻璃效果,播放器控件保持大按钮、粗进度条,方便在移动端手势操作。

为了不让自己被零散的小改动拖累,我在提示词里一次性描述了“风格 Token”的概念:

为这个音乐平台定义一套视觉规范: 背景主色 #12121a;卡片底色 rgba(255,255,255,0.08); 圆角 16px;阴影轻量化;字体优先使用系统无衬线; 封面缺失时用“色彩渐变 + 歌曲首字母”生成占位图。

AiPy 会把这套规范应用到所有页面,页面之间的观感一下子统一了。这个方法也很适合用到其他 AI 生成项目上,与其逐个页面去说“颜色改成什么”,不如先定一套“系统级设计变量”。

4.3 数据备份与多端访问

既然是个人专属,数据安全就很重要。我加了一个简单的定时脚本,每天凌晨把music.db和上传的封面文件压缩备份到另一个目录,并保留最近七天的副本。这个脚本是纯 Shell 的,远离核心业务代码,算是用古早方式解决了可靠性的焦虑。

多端访问方面,我没有做完整的账号系统,而是墙上的“局域网访问 + 访问口令”模式:手机和电脑连同一个网络,直接输入服务器的 IP 加端口即可。此时地图上打开时,页面会默认按移动端视口渲染,播放器底部操作区也顺手可选。

5. 一阵子实践之后的复盘:稳定性能与下一步

5.1 性能和资源占用实录

这套音乐平台在我的一台 2C4G 的云服务器上跑了一阵子,整体表现稳定。我记录几个关键数据:

项目数值说明
静态资源响应40ms 左右Nginx 代理 + 缓存后
接口平均响应120msFastAPI 本地查询
SQLite 数据库大小4.2MB含三百多首歌、歌单、播放记录
内存占用约 180MB包含 Python 进程和 Nginx
运行天数连续运行没宕机稳定

SQLite 在这种单人使用场景下完全够用,根本不需要上独立的数据库服务。对个人项目而言,选最简单的持久化方案是对的。

5.2 我踩过的一个认知坑:让 AI 别过度设计

初期有一次我提示词加了一句“请确保架构有良好扩展性”,结果 AiPy 自动引入了一层抽象层,把所有数据库操作封装成“Repository + Service”模式,代码量翻倍,页面渲染链路变长,出问题后排查起来很麻烦。

后来我学乖了,明确告诉它“不要过度工程化,不用写不必要的抽象层,保持代码直接一点”。做个人项目,最重要的是你能看懂它、改得动它。如果让 AI 生成一套对你来说陌生的架构风格,后续维护就是一场灾难。

5.3 下一步想做的事

这个平台跑顺之后,我给自己列了三件待办:

第一是接入更多真实曲库来源。现在的测试数据不够新,下一步准备写一个爬虫脚本去抓取开放曲库的元信息,同时确保版权合规,只保存歌名歌手等元数据,不存音频文件本身。

第二是做收听报告的周报邮件。每周日晚自动通过脚本统计本周播放最多的歌曲类型,生成一段简短评价并推送,这其实就是“年度报告”思路的低配版,但个人用起来很温馨。

第三是尝试用语音控制。在支持浏览器语音识别的环境里,实现对“播放那首歌”“下一首”“暂停”等指令的响应。目前我还在研究方案,可能用现成的语音转文字接口来实现,这也算是给平台再加一点“未来感”。

在折腾完整个项目之后,我自己有一点特别深的体会:AI 编程的底限是“快”,上限其实是“你对产品的理解有多具体”。你想不清楚的,它也给不清楚。而且像 AiPy 这类工具,真正趁手的用法不是把它当成打字员,而是像带一个成长中的初级开发一样——给它清晰的验收标准、反馈循环、修复指令,输出的东西会越来越接近“可上线产品”。如果你也想自己做一个专属平台,建议直接从一次完整提示词开始,边跑边改,你很快就会发现,个体开发者一个人做完从前端、后端到部署全流程,这件事在现在真的可行。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询