← Back to home@klT45

dsh-music-dj

AI DJ for DeepSeek Harness: turn a sentence into a song; searches and switches tracks through a local LX Music instance (bundles no audio sources).

Stars
0
Language
JavaScript
Created
Oct 22, 2026
Updated
Oct 22, 2026

Introduction

音乐 DJ(dsh-music-dj)

把 DeepSeek Harness 的对话接成一台 AI DJ:说一句「来点适合写代码的」或「放首晴天」,DSH 就会自己搜歌、自己切歌。

本插件不含任何音源、不下载音频、不分发音源脚本。 它只负责「把话变成检索词」和「遥控播放器」;真正的音源与播放都在你本机的 LX Music(洛雪音乐助手) 里。


它解决的问题

普通音乐插件音乐 DJ
需要你自己维护曲库(下载/整理/索引)不需要,音源由洛雪提供
模型只能「播放/暂停/下一首」模型能理解意图:场景、情绪、具体歌曲
插件里塞解码器、代理、歌词、媒体键全部交给洛雪,插件本体只有几十 KB
切歌要你开口开了 DJ 模式,模型会在合适的时候自己换歌

搭配要求(重要)

插件本身不能放歌。第一次使用请按下面四步准备,只需一次:

  1. 安装 LX Music 桌面版 ≥ 2.8(建议 ≥ 2.12,支持 -hidden 托盘启动):GitHub Releases
  2. 打开洛雪 →「设置 → 自定义源」→ 导入一个可用的自定义音源(洛雪 2023 年起不再内置音源,自行选择社区源;插件不提供、不分发)
  3. 打开洛雪 →「设置 → 开放 API」→ 启用(默认端口 23330,只监听 127.0.0.1)
  4. 在 DSH 里打开「设置 → 音乐 DJ」→ 点「检测连接」,看到「已连接」即可

音源是消耗品:社区源会失效。插件在点歌失败时会明确说"没确认播放成功",而不是假装播了。换源后重试即可。

安装

  • 插件市场:在 DSH 插件市场搜索「音乐 DJ / dsh-music-dj」安装(推荐)。

  • 命令行:dsh plugin add dsh-music-dj(前提是 CLI 可用;本插件声明了 dsh.bundle,可被 dsh plugin add 安装)。

  • 本地开发:把本仓库克隆到任意目录,在 profile 的 cordis.patch.yml 里 insert 一条:

    - insert:
        - id: dsh-music-dj
          name: dsh-music-dj
    

怎么用

直接对 DSH 说:

  • 「来点适合写代码的」→ 按场景词搜索并播放
  • 「放首周杰伦的晴天」→ 精确点歌(会校验播的确实是这首)
  • 「换首更安静的」→ 叠加意图重新找
  • 「声音小一点」「暂停一下」「下一首」→ 控制
  • 「现在放的什么」→ 读取真实状态

模型拿到的三个工具

工具作用
music_play点歌/找歌播放:intent(场景)、query(检索词)、title+artist(精确点歌)
music_controlplay/pause/toggle/next/prev/seek/volume/mute/collect/uncollect
music_status连接诊断 + 当前播放 + 最近错误

所有工具都返回回读校验后的真实结果:成功了告诉你实际在放什么,失败告诉你试过哪些检索词、大概率是哪个环节坏了。

工作原理(为什么可靠)

洛雪的协议有个现实约束:开放 API 能控制但没有搜索,搜歌只能靠 lxmusic://music/searchPlay/<检索词> 这类 Scheme URL,而它是"发出去就不管了"、没有回执。所以插件采用双通道 + 回读校验:

用户的意图
   ↓ 模型调用 music_play(intent="写代码")
场景词表 → 检索词序列 ["lofi 纯音乐", "轻音乐 工作", ...]
   ↓ 逐条尝试
派发 lxmusic://music/searchPlay/<词>
   ↓ 每 800ms 回读 http://127.0.0.1:23330/status
校验:在播 + 歌名变化/进度回零(精确点歌还要标题/歌手匹配)
   ↓ 命中即停;3 次不对就换下一个词;全失败 → 如实报错

另外还做了这些:

  • 动态上下文:把「正在播放」写进模型的系统上下文(一行,≤30 token),模型不用问你就知道在放什么;
  • 曲线事件:开启 DJ 模式后,每轮对话结束、超过冷却时间、且音乐已暂停时才自动续播,绝不打断你正在听的;
  • 多标签单实例:播放状态在洛雪里,DSH 开几个标签都不会重复出声;
  • 多平台:Windows / macOS / Linux(Scheme URL 分别走 cmd start / open / xdg-open)。

设置项

配置文件:~/.dsh/dsh-music-dj.json(人类可编辑,改完重启 DSH 生效;设置页也会写这里)

{
  "engine": "lx",
  "lx": { "apiPort": 23330, "exe": "" },
  "dj": { "enabled": false, "cooldownMin": 10, "autoNext": false },
  "scenes": {
    "写代码": ["lofi 纯音乐", "轻音乐 工作", "study lofi"],
    "专注": ["专注 纯音乐", "钢琴 纯音乐"],
    "放松": ["轻松 纯音乐", "轻音乐 放松"]
  }
}
  • scenes 随便加、随便改中文;模型说「来点写代码的」时按这里的词去搜;
  • dj.enabled 默认关——不主动打扰,想让它自己切歌再打开;
  • 端口不是 23330 就改 lx.apiPort;洛雪装在非默认路径就填 lx.exe。

合规声明

  • 插件不内置、不分发任何音源,也不下载、不转存任何音频;所有播放行为发生在用户本机的洛雪中,音源由用户自行安装的第三方脚本提供。
  • 洛雪是 Apache-2.0 + 补充协议 授权的第三方软件;本插件只调用其公开文档化的本地接口,不包含其代码。
  • 请遵守各音乐平台的用户协议与版权规定;本插件不提供任何绕过付费/会员/版权保护的能力。

开发

node --test test/*.test.mjs   # 纯函数单测(意图映射 / 播放校验 / 配置 / Scheme URL)
index.js        Host:工具、动态上下文、事件、/music-dj-api
client.js       Client:迷你播放条 + 设置页
lib/config.mjs  配置读写 + 默认场景表
lib/intent.mjs  意图 → 检索词;播放是否成功的判定(纯函数)
lib/lx.mjs      洛雪引擎适配器(HTTP + Scheme URL)
test/           node:test 单测
DESIGN.md       设计文档与取舍记录

Roadmap

  • v0.2:SSE /subscribe-player-status 实时同步(曲末自动续播不再依赖轮询)
  • v0.2:music_queue 工具(AI 队列:一次排 5 首,曲末自动下一条)
  • v0.3:第二个引擎适配器(mpv + yt-dlp,不装洛雪也能用)
  • v0.3:音源健康检查(记住哪些场景词最近失败过,自动跳过)
  • 持续:Windows 之外的平台实测(-hidden、Scheme 注册)

License

MIT