正文内容 评论(0)
从两个场景说起
![[MD:Title]](http://img1.mydrivers.com/img/20260331/743e4d96-caea-41ba-9da9-2f79069f9d66.jpg)
第一个场景:深夜 vibe coding,想换首歌。
往常的流程是:手从键盘移开,切到手机 App / 桌面App,刷一下推荐,三首都不对感觉,思路断了,算了随便放着。现在的流程是:在对话框里顺手发一句「帮我找几首适合深夜写代码的音乐」,AI 处理完,BGM 切了,附了一句推荐理由,你甚至没有离开编辑器。
第二个场景:用飞书办公了半天,想看看照片让眼睛放松下。
直接在飞书发一句「用我的红心歌单帮我生成一个照片墙」。于是出现下图。
![[MD:Title]](http://img1.mydrivers.com/img/20260331/bc1b01b8-55ba-4f12-af17-580c2c7f8b21.jpg)
这就是 ncm-cli 加上 OpenClaw 今天能做到的事。
“不知道听什么”一直是个痛点,直到OpenClaw 出现
如大家所知,OpenClaw 代表着 Agent 交互方式的一个转折点:AI 不再只是浏览器里的对话界面,它可以是你 IM 里随时响应的助手,在你的机器上执行真实的操作。
我们意识到,在这个背景下,音乐是一个非常适合验证这个范式的场景。
为什么?因为「不知道听什么」是我们日常遇到最典型的模糊意图之一——你不是想搜索某首具体的歌,你想要的是「适合现在这个状态的音乐」。这种模糊意图,正是 AI 擅长处理的,用传统搜索界面反而别扭。
而且音乐操作有一个天然的特点:输入和输出分离。你用手机发消息(输入),电脑放音乐(输出)。OpenClaw 的跨设备特性和这个场景完美契合。
我们是怎么思考工具形态的
确定这件事值得做之后,第一个问题是:做成什么形态?
App 不合适——要维护 UI,更新重,和 AI Agent 集成反而绕了一圈。插件或 SDK 依赖特定平台,换一个 Agent 就要重做。
我们选择了 CLI。
这个判断背后有一个很直接的逻辑:CLI 命令是 AI Agent 最天然的工具调用形式。一个ncm-cli play --song xxx的命令,对 Claude、OpenClaw 里的 AI、或者任何其他 Agent 框架来说,调用方式完全一样。CLI 本身不依赖任何 AI 框架,它就是一个能被任何东西调用的原子工具。
同时,CLI 也保留了「直接用」的可能性——人工输入命令、Shell 脚本集成、自动化流水线,都没问题。
基于这个形态,我们还设计了两个Skill去真正的融入到Agent中:
netease-music-cli—— 适合「我知道要听什么」的场景。搜歌、播放、控制队列、管理歌单,直来直去。
这个 Skill 有一个有意思的设计:我们没有在 Skill 定义里枚举所有命令,而是让 AI 自己通过--help去渐进式发现。
AI 拿到任务后,会先执行ncm-cli --help看顶层有什么,再根据需要钻进具体子命令查参数,最后再执行。整个过程和人第一次用一个新 CLI 工具的探索方式完全一样。
![[MD:Title]](http://img1.mydrivers.com/img/20260331/73e14e08-9e73-4ad9-ac0e-67872db81ad4.jpg)
这个设计有两个好处:一是 Skill 定义本身不需要随命令的增减而更新;二是和后面将要介绍的动态命令系统形成了自然的协同——服务端新下发了一个命令,AI 下次就能通过--help发现并使用它,整条链路都不需要人工介入。
netease-music-assistant—— 适合「我不知道听什么」的场景。它会先读取你的红心歌曲,分析你的偏好(曲风、情绪、时间段习惯),然后制定多维度搜索策略,从歌单、专辑、单曲多个维度混合推荐,每条结果都附带个性化的推荐理由,还会自动去重(不重复推荐你已经收藏或近期推荐过的内容)。
两个 Skill 的分工很清晰:前者是执行层,后者是决策层。
我们做了什么
ncm-cli 支持三种使用方式:
![[MD:Title]](http://img1.mydrivers.com/img/20260331/c109111f-677e-4aa5-920a-86448868dfbb.jpg)
命令设计:不是从按钮出发,从 AI“原子操作” 的视角出发
命令覆盖范围的选取,我们不是从「用户会点哪些按钮」出发,而是从「AI 完成一个音乐任务需要哪些原子操作」出发。
AI 处理一个请求,本质上是一个多步推理 + 执行的过程。以「帮我播放一首适合现在心情的歌」为例,AI 需要能做这些事:
![[MD:Title]](http://img1.mydrivers.com/img/20260331/9bf613b5-c05f-467d-868e-05e807d75f6d.jpg)
围绕这个流程,我们把命令分成了几个层次:
![[MD:Title]](http://img1.mydrivers.com/img/20260331/e17f146f-632b-4cfa-8e3a-aacd516bd2c9.jpg)
另外有一个细节值得一提:所有命令默认输出 JSON,格式稳定,AI 可以直接解析,不需要做文本解析。
动态命令:让 CLI 保持「活」的
传统 CLI 有一个固有限制:命令是编译进代码的,新增一个功能,必须改代码、发版、等用户升级,整条链路很长。
ncm-cli 引入了一套动态命令系统,核心思想是:把命令的定义从代码里移到服务端。
传统 CLI的发版链路:
![[MD:Title]](http://img1.mydrivers.com/img/20260331/23d9be91-2282-4d6c-ad54-872f9c26a49f.jpg)
动态命令的更新流程:
![[MD:Title]](http://img1.mydrivers.com/img/20260331/7fc282a4-68a6-4c16-9ba0-e769ded769b0.jpg)
CLI 启动时,会向服务端发送一次同步请求,告知「我本地已经缓存了哪些命令的哪个版本」。服务端只返回有变化的部分,CLI 用这些增量数据在本地重建命令树。
效果是:业务团队可以独立地添加、修改、下线命令,用户不需要升级客户端,下次启动就能用到新功能。CLI 从一个静态工具变成了一个持续生长的命令执行引擎。
播放形态
播放后端支持两种:
内置播放器(mpv):跨平台,macOS/Linux/Windows 均可用。即使没有安装网易云音乐客户端,也能直接播起来。
网易云音乐桌面客户端:这个模式带来了一种不同的体验——AI 操控的不是一个独立的播放进程,而是你已经安装的那个 App 本身。技术上,ncm-cli 通过orpheus://URL Scheme 向客户端发送指令,客户端后台常驻进程监听并响应。App 没有运行时会自动启动。这意味着:你对 AI 说「帮我播放林俊杰的曹操专辑」,打开的是完整的网易云音乐界面——专辑封面、歌词、音质、红心、社交……全套 App 体验,只是控制方式从点击变成了自然语言。App 没有被取代,它获得了一个新的控制界面。
TUI 播放器是我们比较喜欢的功能之一——黑胶旋转动画、卡拉 OK 风格歌词同步、场景切换,在终端里有一种莫名的仪式感。
![[MD:Title]](http://img1.mydrivers.com/img/20260331/bd7a7b28-5201-471f-8e00-ea40d8ab0667.jpg)
TUI 有一个值得一说的特性:它可以和 CLI 命令同时工作。TUI 跑着的时候,你仍然可以在另一个终端执行ncm-cli next、ncm-cli volume 80,TUI 界面会实时响应。这对 AI Agent 来说尤为自然——Agent 发出的命令和人在 TUI 里的操作是完全对等的。
怎么用
详细使用指南见:网易云音乐 CLI 使用指南
首先你需要安装ncm-cli:
npm install -g @music163/ncm-cli
前往 网易云音乐开放平台 完成入驻并获取 API 凭证,然后运行配置向导:
ncm-cli configure
接下来就可以使用了。有多种使用方式:
方式一:OpenClaw
详细教程见:OpenClaw ncm-cli 快速上手指南
安装 OpenClaw 并连接你的飞书等IM软件,然后安装我们提供的skill:https://github.com/NetEase/skills,之后你就可以从手机随时控制电脑上的音乐播放。
这种方式最适合日常使用:不需要打开终端,不需要记命令,用 IM 发消息就好。
一个有趣的例子:你在飞书发一句「用我的红心歌单帮我生成一个照片墙」。
![[MD:Title]](http://img1.mydrivers.com/img/20260331/bc1b01b8-55ba-4f12-af17-580c2c7f8b21.jpg)
这个请求看起来和音乐播放没什么关系,但它展示了 Agent 模式更大的想象空间——
![[MD:Title]](http://img1.mydrivers.com/img/20260331/efd0a1a5-51d7-4f5d-bad7-87fefb5a68c9.jpg)
ncm-cli 在这里不只是播放工具,而是音乐数据的结构化接口。Agent 拿到这些数据之后,可以做任何事——生成图片、写报告、分析偏好、发邮件,取决于你的想象力和 Agent 能调用的其他工具。
这是 CLI 作为 Agent 工具的核心价值:一个专注、稳定的数据和控制接口,Agent 决定怎么用它。
方式二:Claude Code Skills
npx skills add https://github.com/NetEase/skills
安装后,直接在 Claude Code 对话:
> 帮我推荐几首适合专注的纯音乐
> 播放我最近听的歌曲
> 下一首
> 把这首歌加到红心
![[MD:Title]](http://img1.mydrivers.com/img/20260331/50179840-f073-4e5c-93de-c4801cbfdc7f.jpg)
![[MD:Title]](http://img1.mydrivers.com/img/20260331/b19befc2-7b55-4ccc-bca7-fc49cd1e5ea8.jpg)
方式三:直接 CLI
npm install -g @music/ncm-cli
ncm-cli configure # 配置凭证
ncm-cli login # 扫码登录
ncm-cli tui # 启动 TUI 播放器
...
欢迎反馈
做这件事的初衷很简单:「合适的」音乐应该更容易「被找到」,而不是每次都要在推荐算法和自己的犹豫之间拉锯。AI Agent 提供了一个新的可能性——用自然语言表达当下的状态,让 AI 替你做决策。
ncm-cli 是我们探索这个方向的一个起点,还有很多没做好的地方。
几个问题想听听大家的想法:
你日常听歌的「痛点」是什么?是找歌难,还是管理歌单烦,还是别的?
如果 AI 能更主动地介入你的听歌体验(比如感知你的状态、主动推荐),你希望它怎么做,又不希望它怎么做?
如果你有技术背景,有没有想贡献的方向?
欢迎在评论区聊,也欢迎到 GitHub 提 issue。
本文收录在
#快讯
- 热门文章
- 换一波
- 好物推荐
- 换一波
- 关注我们
-
微博:快科技官方
快科技官方微博 -
今日头条:快科技
带来硬件软件、手机数码最快资讯! -
抖音:kkjcn
科技快讯、手机开箱、产品体验、应用推荐...
