自我介绍
大家好,我是Aaron。过去一直从事算法领域相关工作,自工作以来,一直持续在关注算法相关技术的发展,当前除了在工作中会进行一些AI的落地实践,工作之余也在通过AI辅助编程做一些有趣的探索。上周末受网友启发,做了RadioMind。
后续会持续更新AI实践过程中的心得体会,以及AI知识分享。欢迎大家关注我关注公众号,以便第一时间收到更新推送。
• 微博: https://weibo.com/u/1801679460 • Github: https://github.com/aaronshan
用 AI 做一个真正懂你的私人音乐主播 —— RadioMind 开发全记录
如果有一个 AI,它记得你上周在加班时喜欢听什么,知道你下雨天的歌单偏好,还能在你说"今天有点累"的瞬间,推来一首刚刚好的歌——你会用吗?
这就是我做 RadioMind 的起点。
特别说明:本项目 100% 由 Claude Code 完成编码,从架构设计到每一行实现代码,全程通过对话驱动生成。我没有手动写过任何一行业务代码——这本身也是这次实验的一部分。
为什么不用现有的音乐 App?
Spotify 有算法推荐,网易云有每日推荐,这些产品做得很好。但它们有一个共同的局限:它们不能和你对话。
你没办法告诉 Spotify "我今天不想听太 happy 的歌,但也不要太压抑",然后得到一个真正理解这句话的回复。你也没办法让它记住你三个月前说过"雨天不要播英文歌"这件事。
AI 大模型的出现让这件事变得可行了。但怎么做,架构怎么设计,AI 的记忆怎么管理——这是 RadioMind 想认真回答的问题。
整体思路:一个有记忆的 AI DJ
RadioMind 的核心设想是:AI 不只是推荐引擎,而是一个真正了解你的 DJ。
要做到这一点,需要解决三个关键问题:
1. AI 怎么知道你喜欢什么?
不靠用户填表,靠两个来源:一是直接读取你本地的网易云/QQ音乐客户端数据库(macOS),拿到你真实收藏的 1000+ 首歌;二是通过每次对话自动提炼你说过的偏好,写入长期记忆文件。
2. AI 的记忆怎么跨会话保留?
大模型本身没有持久记忆,每次对话都是全新的。RadioMind 参考了 OpenClaw 的记忆系统设计,实现了三层记忆架构:
L1 常青记忆 → MEMORY.md(每次对话全文注入) 包含:品味分析、艺术家偏好、对话中提炼的个人信息L2 近期记忆 → memory/YYYY-MM-DD.md(每日自动生成) 每次对话结束后,AI 自动将对话提炼为要点日志L3 历史检索 → memory.db(SQLite FTS5 全文索引) 90天历史,按需语义检索,不占用上下文窗口这三层的核心逻辑是:热记忆完整加载,冷记忆按需检索。常用的、重要的信息始终在 AI 视野里;偶尔提到的细节,在用户问起时再去找。
3. 品味信息怎么自动更新?
两条更新路径并行:
• 定期路径:每天凌晨自动同步本地歌单,重新分析艺术家分布、语言偏好、风格标签,写入 MEMORY.md的品味区块• 对话路径:每次对话结束后,AI 提炼用户明确表达的新偏好(如"工作时不想听有歌词的歌"),带日期戳追加到 MEMORY.md
系统架构
整个项目分四层:

两个界面,两种体验
Web 版:像素风格的音乐电台界面,大时钟、波形可视化、AI 对话区一体化。支持 PWA 安装,可以当桌面 App 用。
TUI 版:给喜欢在终端里工作的人。三列布局——播放区、队列、时钟,呼吸灯边框,竖向粒子波形,mpv 本地解码。所有操作都用键盘完成,完全不需要鼠标。
两个界面共享同一个后端,WebSocket 实时同步播放状态。在 Web 里选的歌,TUI 里实时显示;在 TUI 里聊天,记忆也同样被记录。
AI 调用:不强制依赖 API Key
对于有 Claude Code Max 订阅的用户,可以直接用 claude -p 子进程调用,不需要单独的 API Key。没有订阅的用户配置 CLAUDE_API_KEY 即可。系统会自动检测并选择最优路径,降级处理确保基本可用。
一个有意思的设计细节:品味文件的演进
最初,我把品味信息存在 taste.md,把记忆存在 MEMORY.md——两个文件各司其职,听起来很合理。
但用一段时间后发现问题:AI 每次对话要加载两个文件,内容有重叠,维护分散。更重要的是,品味数据本质上就是"AI 应该了解你的事情",和记忆文件的定位完全一致。
所以后来把 taste.md 废弃了,把歌单分析的结果(艺术家 TOP20、语言分布、风格标签)直接写入 MEMORY.md 的一个固定区块,每天自动覆盖更新。对话中提炼的偏好则追加到另一个区块,带日期标记。
一个文件,两条更新路径,AI 始终读到最新最完整的你。
技术栈选择
整个项目用 Node.js 写成,没有引入复杂的框架:
• 后端:Express + WebSocket,够用就好 • AI 记忆:SQLite FTS5,零运维,本地文件即可 • TUI:blessed,老牌终端 UI 库,坑不少但足够强大 • 播放:Web 端用 HTML5 Audio,终端用 mpv(需单独安装) • 歌单同步:直接读本地客户端 SQLite,比 API 更稳定
没有用向量数据库,FTS5 的全文检索对中文支持有限但足够用。如果后续记忆量很大,可以考虑升级到 SQLite-vec 做语义检索,架构上已经预留了扩展空间。
Claude Code 全程编码:一次真实的 AI 协作实验
这个项目还有另一层意义:从第一行代码到最后一个功能,100% 由 Claude Code 完成编码,我没有手动写过任何一行业务代码。
整个过程是这样的:我描述需求和思路,Claude Code 生成实现;我指出问题或调整方向,Claude Code 修改重构。从 Express 服务搭建、WebSocket 实时流、记忆系统设计,到 TUI 的呼吸灯动画、像素时钟字体、波形可视化——全部通过对话完成。
这次实验让我对"AI 辅助编程"有了更具体的认识:
• 擅长的部分:有明确规格的功能实现、重复性工作(批量替换、格式转换)、调试已知类型的错误,效率是人工的数倍 • 需要人介入的部分:产品方向判断(这个功能要不要做)、审美决策(界面风格、交互逻辑)、以及当 AI 陷入局部最优反复改错的时候,需要人跳出来重新定义问题
Claude Code 不是"帮你写代码的工具",更准确的描述是一个随时待命的全栈工程师——你负责想清楚要做什么,它负责把它做出来。
开源地址
代码已开源,地址详见:https://github.com/aaronshan/RadioMind
如果你也有自己的网易云/QQ音乐歌单,想试试让 AI 真正"认识"你的音乐品味,欢迎 clone 下来玩。
夜雨聆风