Musio: 一个越用越懂你的本地音乐 Agent

16 阅读9分钟

我做了一个越用越懂你的本地音乐 Agent

项目地址:github.com/mindforge-x…

如果你觉得这个方向有意思,也欢迎顺手点个 Star。


最近我在做一个叫 Musio 的项目。

22d8bde37e43c411d5b1391e56c5b004.png

de51c20464d6133f4faba018f6f88271.png

一句话介绍:

Musio 是一个本地优先的音乐 Agent。

它不是一个普通播放器,也不是一个只会聊天的 AI 助手。Musio 想做的是:把播放器、音乐源、歌词、评论、歌单、用户偏好、本地记忆和大模型能力连接起来,让音乐软件从“点按钮播放歌曲”变成“用自然语言完成音乐任务”。

比如你可以直接对它说:

给我推荐 5 首适合深夜写代码听的歌。
当前播放这首歌评论区都在聊什么?
把当前播放的歌曲加入歌单。
再推荐几首类似的,但不要重复刚才推荐过的。

Musio 会理解你的请求,然后调用真实的音乐能力去执行,而不是只生成一段看起来合理的文字。

为什么想做 Musio?

作为用户,我一直觉得音乐软件里有很多操作其实很适合交给 Agent。

听到一首歌时,我可能会想:

  • 看看歌词
  • 看看评论区
  • 找几首类似的歌
  • 把它加入歌单
  • 根据当前心情继续推荐
  • 让它记住我喜欢什么、不喜欢什么

传统播放器能做这些事,但通常要在不同页面里点来点去。

而 Musio 想做的是让你直接说:

这首歌不错,帮我看看评论,再找几首类似的,顺便加入我的 Musio 歌单。

然后 Agent 自己去理解、拆解、执行。

这就是 Musio 的核心目标:让音乐播放器不再是冰冷的播放工具,而是一个越用越懂你的个人音乐 Agent。

Musio 现在能做什么?

Musio 当前已经围绕音乐场景实现了一套完整的 Agent 工作流。

它可以:

  • QQ 音乐扫码登录
  • 搜索歌曲、歌手、专辑
  • 播放音乐
  • 查看歌词
  • 查看热门评论
  • 读取用户歌单和歌单歌曲
  • 根据场景、心情、风格推荐真实歌曲
  • 理解当前正在播放的歌曲
  • 理解上一轮推荐结果
  • 避免重复推荐最近已经推荐过的歌
  • 把歌曲加入本地 Musio 歌单
  • 在写入前请求用户确认,避免误操作

比如你可以说:

给我推荐几首适合通勤路上听的歌。

Musio 会根据场景生成候选歌曲,并到真实音乐源中匹配歌曲。它不是单纯让大模型“编一个歌单”,而是尽量保证推荐出来的歌是真实存在、可搜索、可播放、可继续读取歌词和评论的。

你也可以继续说:

第二首的歌词给我看看。
把这几首加入歌单。
当前播放这首歌评论区都在聊什么?

Musio 会结合上下文判断你说的“第二首”“这几首”“当前播放”分别指什么。

QQ 音乐扫码登录,开箱就能接入真实音乐源

Musio 当前优先支持 QQ 音乐。

启动后,你可以在 Web 控制台里进行 QQ 音乐扫码登录。登录成功后,Musio 就可以基于 QQ 音乐能力完成搜索、播放、歌词、评论、歌单读取等操作。

这点很重要。

因为一个音乐 Agent 如果只会聊天,其实价值有限。真正有用的是:它能接入真实音乐源,拿到真实数据,然后围绕这些数据继续执行任务。

Musio 的目标不是做一个“音乐聊天机器人”,而是做一个真的能帮你操作音乐世界的 Agent。

Loop 模型:不是一次性回答,而是一步步执行

Musio 的 Agent Runtime 采用了 loop 式的执行设计。

它不是让大模型一次性生成一长串工具调用,然后盲目执行到底,而是每次只决定下一步:

用户输入
  -> 理解任务
  -> 读取动态记忆
  -> 决定下一步 action
  -> 调用音乐工具
  -> 得到 observation
  -> 再决定下一步
  -> 最终回答

这套 loop 设计让 Musio 可以处理更复杂的多步骤任务。

比如用户说:

推荐一首周杰伦的歌,把它加入歌单,然后分享一句值得看的歌词。

Musio 需要完成的不只是“推荐”:

  1. 先推荐真实歌曲。
  2. 拿到歌曲 ID。
  3. 读取歌词。
  4. 判断写入动作需要确认。
  5. 用户确认后再加入本地 Musio 歌单。
  6. 最后基于真实工具结果回答。

这就是 Agent 和普通聊天机器人的区别。

Musio 不是只回答“可以”,而是会真的把任务跑完。

动态记忆:越用越懂你的关键

Musio 里我很重视的一点是记忆机制。

一个音乐 Agent 如果每次对话都是全新的,它就很难真正“懂你”。Musio 会围绕本地环境维护动态记忆和音乐画像,让它逐渐理解你的偏好。

它会参考:

  • 当前播放状态
  • 播放队列
  • 最近推荐过哪些歌
  • 上一轮搜索或推荐结果
  • 用户音乐画像摘要
  • 行为偏好
  • 对话摘要
  • 本地任务记忆

所以你可以更自然地连续对话。

比如你刚让 Musio 推荐了 5 首歌,然后继续说:

第二首的歌词给我看看。

它不需要你重新输入歌名。

再比如你说:

不要再推荐刚才那几首了,换一批更安静的。

Musio 会知道最近推荐过哪些歌,并在后续推荐里尽量避免重复。

长期来看,Musio 想成为的不是“一个会播放音乐的软件”,而是一个会记住你口味、场景和习惯的个人音乐 Agent。

它知道“当前播放”是谁

音乐场景里有很多自然指代:

  • “这首”
  • “当前播放”
  • “正在播放”
  • “刚才那首”
  • “第一首”
  • “队列上一首”
  • “这几首”

这些表达对普通聊天模型来说很容易误解。

Musio 会读取播放器状态和任务记忆,判断用户到底在指哪首歌。

比如:

把当前播放的歌曲加入歌单。

Musio 会优先使用播放器里正在播放的歌曲,而不是错误地使用上一轮推荐列表里的第一首歌。

这类细节很小,但它直接决定了 Agent 是不是真的可用。

写入前确认:Agent 可以强,但不能莽

Musio 支持把歌曲加入本地 Musio 歌单,但这类写入动作不会直接执行。

当你说:

把当前播放的歌曲加入歌单。

Musio 会先展示确认卡片。你确认之后,它才会执行写入。

这背后有一个原则:

读操作可以自动执行,写操作必须谨慎确认。

比如搜索、推荐、歌词、评论都属于读取能力,可以直接调用;但加入歌单属于本地写入能力,需要用户确认。

Agent 最终是要替用户做事的,所以越是能执行,就越应该有清晰的边界。

安装和使用尽量没有门槛

虽然 Musio 背后有不少组件:

  • Spring Boot 后端
  • React Web 控制台
  • Java CLI
  • QQ 音乐 Python sidecar
  • Agent Runtime
  • 本地记忆系统
  • 平台运行时包

但我希望用户使用时足够简单。

如果使用发布包,理想情况下只需要:

npm install -g @mindforge-x/musio
musio

启动后,Musio CLI 会负责:

  • 创建默认配置
  • 选择音乐源
  • 启动本地后端
  • 启动音乐源 sidecar
  • 打开 Web 控制台

musio-start-new.gif

日常也可以用这些命令管理:

musio          # 启动 Musio
musio doctor   # 检查运行环境
musio status   # 查看服务状态
musio stop     # 停止本地服务

也就是说,Musio 背后的架构可以复杂,但用户入口必须简单。

如果你是开发者,也可以从源码运行:

git clone https://github.com/mindforge-x/musio.git
cd musio
./scripts/dev.sh

技术架构上做了什么?

Musio 是一个本地优先的多组件架构。

大致结构是:

Musio CLI
  -> 启动本地服务
  -> 启动 QQMusic sidecar
  -> 启动 Spring Boot backend
  -> 打开 React Web 控制台

项目主要模块包括:

backend-spring/                   Spring Boot API、Agent Runtime、配置、记忆和音乐接口
frontend/                         React + Vite Web 控制台
cli-java/                         Java CLI,本地服务启动器和诊断命令
providers/qqmusic-python-sidecar/ QQ 音乐 Python HTTP sidecar
packaging/                        npm 平台包和发布脚本

本地记忆和音乐画像

Musio 的记忆系统会围绕本地数据保存动态记忆,包括任务记忆、偏好候选、行为事件、对话摘要和音乐画像。

简单说就是:Musio 会越来越知道你喜欢什么。

这也是我最想继续打磨的方向。

npm 平台包

Musio 的发布包设计也尽量降低使用门槛。

@mindforge-x/musio 是入口包,不同系统架构会安装对应的平台运行时包,例如 Linux、macOS、Windows 的 x64 / arm64 包。

平台包里包含运行所需的后端、前端、CLI、Java runtime 和 sidecar。用户不需要理解内部组件,只需要运行 musio

Musio 和普通播放器有什么不同?

普通播放器解决的是:

我点哪首,你播哪首。

Musio 想解决的是:

我说出一个音乐意图,你帮我完成它。

它可以是播放器,但不止是播放器。

它更像一个本地音乐工作台:

  • 能播放
  • 能搜索
  • 能推荐
  • 能看歌词
  • 能看评论
  • 能记住偏好
  • 能理解上下文
  • 能执行多步骤音乐任务
  • 能在确认后帮你整理歌单

这就是我想做 Musio 的原因。

当前状态和未来计划

Musio 目前优先支持 QQ 音乐,已经具备基础的 Agent 工作流、扫码登录、推荐、搜索、歌词、评论、歌单、本地记忆和确认写入机制。

后续我希望继续完善:

  • 更多音乐源支持
  • 更强的长期音乐画像
  • 更自然的多轮音乐对话
  • 更完整的本地歌单管理
  • 更稳定的跨平台发布体验
  • 更强的 Agent 长任务能力

最终目标是让 Musio 成为一个真正属于用户自己的个人音乐 Agent。

如果你也感兴趣

如果你也对“音乐播放器 + 本地 Agent + 动态记忆”这个方向感兴趣,欢迎来 GitHub 看看:

github.com/mindforge-x…

可以下载体验,也欢迎提 issue、提建议、参与开发。

如果觉得 Musio 这个方向有意思,也麻烦顺手点一个 Star。