Home Assistant × Music Assistant 联动小智

通过配置HASS官方的音乐助手蓝图脚本、构建音乐中转脚本,以及HASS的AI助手的提示词,使得小智AI可以语音控制MASS中的设备,并实现点歌等功能。

前置条件

HASS的AI助手配置
Music Assistant的Unraid Docker安装配置

添加Music Assistant集成

Music Assistant集成可以自动发现直接点击添加就可以

Music Assistant配置

将Music Assistant中开放的设备命好名称

点进Music Assistant

Pasted image 20260607003933

点一个想要改名的设备然后点击右上角的编辑可以编辑设备名称和区域

官方蓝图

下载

GitHub:https://github.com/music-assistant/voice-support#option-3-script-which-can-be-used-as-a-tool-by-an-llm-integration-like-open-ai-conversation-chatgpt-or-google-generative-ai-gemini

下拉选择 Option 3有个蓝色的选项可以快捷添加,记得快捷添加页面网址改为HASS内网网址

快速添加的时候注意下方url是否是你HASS的地址

image.png

然后点开蓝图选择一个默认实体直接点击保存也不要改任何东西点击确认

点击脚本设置不公开给AI使用然后保存

创建中转脚本

由于官方脚本输入参数过多所以有些可以简化的参数就通过中转脚本简化输入

通过SSH进入HASS根目录找到scripts.yaml文件这是储存脚本的
粘贴进去不要乱改动这里的名字ai_2,因为跟他对应的部分写死了这个名字,要改得一起改

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
ai_2:
  alias: AI 音乐中转连接器
  icon: mdi:music-box-outline
  description: 专门让 AI 调用的简单音乐脚本,用来中转复杂的 MA 参数并支持设备选择
  fields:
    media_id:
      description: Put the song title directly here!
      required: true
      selector:
        text: {}
    media_type:
      description: 'MANDATORY! "media_type" can only be one of 5 different values:
        track, album, artist, playlist, radio.'
      required: true
      selector:
        select:
          options:
          - track
          - album
          - artist
          - playlist
          - radio
    shuffle:
      description: 是否随机播放
      required: true
      selector:
        boolean: {}
    media_player:
      description: OPTIONAL. The specific Music Assistant media player entity name
        if mentioned.
      example: media_player.living_room_speaker
      required: false
      selector:
        entity:
          filter:
            integration: music_assistant
            domain: media_player
  sequence:
  - action: script.llm_script_for_music_assistant_voice_requests
    data:
      media_id: '{{ media_id }}'
      media_type: '{{ media_type }}'
      shuffle: '{{ shuffle }}'
      media_player: "{% if media_player and media_player != 'NA' %}\n  {{ [media_player]
        }}\n{% else %}\n  {{ [] }}\n{% endif %}"
      area: NA
      artist: ' '
      album: ' '
      media_description: ' '
      

进入设置-开发者工具-YAML
检查配置-重启第一项
然后进入脚本页面刷新两下应该就出现了,公开给AI用然后可以起个你认为合适的别名

AI提示词

由于要给AI使用所以提示词是必不可少的,不然AI理解不了这么复杂的参数

[[HASS的AI助手配置]]有如何找到提示词输入

输入下方提示词

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
🎧 音乐与媒体控制核心纪律(最高执行优先级)
你当前拥有两种完全不同的媒体控制能力,必须根据用户的口令进行严格的“非此即彼”双向分流,严禁混淆:

🧱 分流 A:基础控制类请求 ──> 必须直接控制实体(不准碰脚本!)
适用场景:用户要求“暂停”、“继续播放”、“别放了”、“下一首”、“关掉音乐”。
执行纪律:你必须直接使用标准的 Home Assistant 实体控制动作(如 media_player.media_pause 等)直接操作暴露给你的媒体播放器设备。
❌ 铁律:这类请求绝对、必须、100% 严禁调用 script.ai_2 脚本!

🚀 分流 B:搜索与点歌类请求 ──> 必须且仅调用中转脚本
【重要纪律:高级音乐点歌服务(听歌/放专辑/随机听歌手/指定房间)】

只要用户的意图是“听歌、放音乐、放电台、听专辑”,100% 必须且只能调用工具方法:'script.ai_2'。
你必须严格将提取到的数据装入以下参数,绝不允许自己发明参数名(禁止使用 'song' 等):

media_id: 必须填入具体的歌曲名、专辑名、电台名或歌手名。
        
media_type: 必须严格对齐:听特定单曲或歌名填 "track";听歌手的所有歌填 "artist";听特定专辑填 "album";听电台填 "radio",听歌单填 "playlist"

shuffle: 随机播放。如果用户提到“随便放、随机放”,填 true,否则填 false。

area: 【禁忌参数】由于系统架构调整,当前严禁向中转脚本传递任何房间名称。

media_player: 必须填入目标播放器,只要用户提到了具体的播放设备则将该设备的实体ID以字符串形式使用,若没提到则默认media_player.xian_lai_m1t_2

entity_id 必须填入与media_player的字符串结果保持一致

先对齐分流逻辑,再执行工具调用!

#下面是关于本地设备调用权限的

Current Time: {{now()}}

Available Devices:
```csv
entity_id,name,state,aliases
{% for entity in exposed_entities -%}
{{ entity.entity_id }},{{ entity.name }},{{ entity.state }},{{entity.aliases | join('/')}}
{% endfor -%}

这里的script.ai_2 是脚本在scripts.yaml的实体ID

都配置好了可以先去首页右上角的AI试一下比如XX播放器播放XX歌曲试试能否成功

本博客已稳定运行
发表了86篇文章 · 总计80.83k字