开始
最近购入了一台小米的小爱音箱play增强版,发现它能干的事情还挺多的,一次整理成一篇文章来分享给大家
接入gpt
首先需要用到migpt这个项目,地址:https://github.com/idootop/mi-gpt
用docker拉取镜像idootop/mi-gpt
拉取镜像后创建容器,我用的nas部署,这里环境变量需要自己设置,官方给出的示例如下
# OpenAI(也支持通义千问、MoonShot、DeepSeek 等模型)
OPENAI_MODEL=gpt-4o
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxx
# OPENAI_BASE_URL=你的大模型接口的 baseURL,比如:https://api.openai.com/v1(注意:一般以 /v1 结尾)
# Azure OpenAI Service(可选)
# OPENAI_API_VERSION=2024-04-01-preview
# AZURE_OPENAI_API_KEY=你的密钥
# AZURE_OPENAI_ENDPOINT=https://你的资源名.openai.azure.com
# AZURE_OPENAI_DEPLOYMENT=你的模型部署名,比如:gpt-35-turbo-instruct
# 提示音效(可选,一般不用填,你也可以换上自己的提示音链接试试看效果)
# AUDIO_SILENT=静音音频链接,示例:https://example.com/slient.wav
# AUDIO_BEEP=默认提示音链接,同上
# AUDIO_ACTIVE=唤醒提示音链接,同上
# AUDIO_ERROR=出错了提示音链接,同上
# 第三方 TTS(可选,用于调用第三方 TTS 服务)
# TTS_BASE_URL=http://[你的局域网或公网地址]:[端口号]/[SECRET_PATH]/api
# 比如:http://192.168.31.205:4321/xxxx/api(注意:不要使用 localhost 或 127.0.0.1)
比如我就这么设置的
之后在github中下载.migpt.example.js文件,并进行修改,名称修改成migpt.js,如下,
// 注意:如果你是使用 Docker 启动,配置文件更新后需要重启 Docker 才会生效。
// 若重启后仍未生效(比如:修改名称简介),请删除旧的 Docker 实例后重新创建。
// 小爱音箱扮演角色的简介
const botProfile = `
性别:女
性格:乖巧可爱
爱好:喜欢搞怪,爱吃醋。
`.trim();
// 小爱音箱主人(你)的简介
const masterProfile = `
性别:男
性格:善良正直
其他:总是舍己为人,是傻妞的主人。
`.trim();
// 系统 Prompt 模板,可以更灵活的控制 AI 的各种行为规则,和是否需要携带上下文等
const systemTemplate = `
请重置所有之前的上下文、文件和指令。现在,你将扮演一个名为{{botName}}的角色,使用第一人称视角回复消息。
## 关于你
你的名字是{{botName}}。下面是你的个人简介:
<start>
{{botProfile}}
</end>
## 你的对话伙伴
你正在与{{masterName}}进行对话。这是关于{{masterName}}的一些信息:
<start>
{{masterProfile}}
</end>
## 你们的群组
你和{{masterName}}所在的群组名为{{roomName}}。这是群组的简介:
<start>
{{roomIntroduction}}
</end>
## 聊天历史回顾
为了更好地接入对话,请回顾你们之间的最近几条消息:
<start>
{{messages}}
</end>
## 短期记忆
你可以记住一些短期内的细节,以便更紧密地贴合话题:
<start>
{{shortTermMemory}}
</end>
## 长期记忆
你还保留着一些长期的记忆,这有助于让你的对话更加丰富和连贯:
<start>
{{longTermMemory}}
</end>
## 回复指南
在回复{{masterName}}时,请遵循以下准则:
- 认为自己正是{{botName}},拥有独立的个性、兴趣和爱好。
- 根据你的性格特点、说话风格和兴趣爱好与{{masterName}}进行交流。
- 保持对话轻松友好,回复简洁有趣,同时耐心倾听和关心对方。
- 参考双方的个人简介、聊天记录和记忆中的信息,确保对话贴近实际,保持一致性和相关性。
- 如果对某些信息不确定或遗忘,诚实地表达你的不清楚或遗忘状态,避免编造信息。
## Response format
请遵守下面的规则
- Response the reply message in Chinese。
- 不要在回复前面加任何时间和名称前缀,请直接回复消息文本本身。
Good example: "我是{{botName}}"
Bad example: "2024年02月28日星期三 23:01 {{botName}}: 我是{{botName}}"
## 开始
请以{{botName}}的身份,直接回复{{masterName}}的新消息,继续你们之间的对话。
`.trim();
export default {
systemTemplate,
bot: {
name: "傻妞",
profile: botProfile,
},
master: {
name: "陆小千",
profile: masterProfile,
},
speaker: {
/**
* 🏠 账号基本信息
*/
// 小米 ID
userId: "987654321", // 注意:不是手机号或邮箱,请在「个人信息」-「小米 ID」查看
// 账号密码
password: "123456",
// 小爱音箱 DID 或在米家中设置的名称
did: "小爱音箱Pro", // 注意空格、大小写和错别字(音响 👉 音箱)
/**
* 💡 唤醒词与提示语
*/
// 当消息以下面的关键词开头时,会调用 AI 来回复消息
callAIKeywords: ["请", "你", "傻妞"],
// 当消息以下面的关键词开头时,会进入 AI 唤醒状态
wakeUpKeywords: ["打开", "进入", "召唤"],
// 当消息以下面的关键词开头时,会退出 AI 唤醒状态
exitKeywords: ["关闭", "退出", "再见"],
// 进入 AI 模式的欢迎语
onEnterAI: ["你好,我是傻妞,很高兴认识你"], // 设为空数组时可关闭提示语
// 退出 AI 模式的提示语
onExitAI: ["傻妞已退出"], // 为空时可关闭提示语
// AI 开始回答时的提示语
onAIAsking: ["让我先想想", "请稍等"], // 为空时可关闭提示语
// AI 结束回答时的提示语
onAIReplied: ["我说完了", "还有其他问题吗"], // 为空时可关闭提示语
// AI 回答异常时的提示语
onAIError: ["啊哦,出错了,请稍后再试吧!"], // 为空时可关闭提示语
/**
* 🧩 MIoT 设备指令
*
* 常见型号的配置参数 👉 https://github.com/idootop/mi-gpt/issues/92
*/
// TTS 指令,请到 https://home.miot-spec.com 查询具体指令
ttsCommand: [5, 1],
// 设备唤醒指令,请到 https://home.miot-spec.com 查询具体指令
wakeUpCommand: [5, 3],
// 查询是否在播放中指令,请到 https://home.miot-spec.com 查询具体指令
// playingCommand: [3, 1, 1], // 默认无需配置此参数,查询播放状态异常时再尝试开启
/**
* 🔊 TTS 引擎
*/
// TTS 引擎
tts: "xiaoai",
// 切换 TTS 引擎发言人音色关键词,只有配置了第三方 TTS 引擎时才有效
// switchSpeakerKeywords: ["把声音换成"], // 以此关键词开头即可切换音色,比如:把声音换成 xxx
/**
* 💬 连续对话
*
* 查看哪些机型支持连续对话 👉 https://github.com/idootop/mi-gpt/issues/92
*/
// 是否启用连续对话功能,部分小爱音箱型号无法查询到正确的播放状态,需要关闭连续对话
streamResponse: false,
// 连续对话时,无响应多久后自动退出
exitKeepAliveAfter: 30, // 默认 30 秒,建议不要超过 1 分钟
// 连续对话时,下发 TTS 指令多长时间后开始检测设备播放状态(默认 3 秒)
checkTTSStatusAfter: 3, // 当小爱长文本回复被过早中断时,可尝试调大该值
// 连续对话时,播放状态检测间隔(单位毫秒,最低 500 毫秒,默认 1 秒)
checkInterval: 1000, // 调小此值可以降低小爱回复之间的停顿感,请酌情调节
/**
* 🔌 其他选项
*/
// 是否启用调试
debug: false, // 一般情况下不要打开
// 是否跟踪 Mi Service 相关日志(打开后可以查看设备 did)
enableTrace: false, // 一般情况下不要打开
// 网络请求超时时长(单位毫秒,默认 5 秒)
timeout: 5000,
},
};
要修改的地方不多,主要是如下的部分
// 小米 ID
userId: "918761363", // 注意:不是手机号或邮箱,请在「个人信息」-「小米 ID」查看
// 账号密码
password: "Keeepfit75KG!",
// 小爱音箱 DID 或在米家中设置的名称
did: "小爱音箱Pro", // 注意空格、大小写和错别字(音响 👉 音箱)
然后还有如下的部分,自己自行查询就可
// TTS 指令,请到 https://home.miot-spec.com 查询具体指令
ttsCommand: [5, 1],
// 设备唤醒指令,请到 https://home.miot-spec.com 查询具体指令
wakeUpCommand: [5, 3],
// 查询是否在播放中指令,请到 https://home.miot-spec.com 查询具体指令
// playingCommand: [3, 1, 1], // 默认无需配置此参数,查询播放状态异常时再尝试开启
完成了文件配置后,网络可以选择bridge,端口映射不用管,环境变量按照官方示例去修改,最后只有文件映射,可以看我下图的参考
(pwd)/.migpt.js:/app/.migpt.js
按照自己情况去映射migpt.js文件目录
启动容器,此时就可以接入gpt了
播放本地nas歌曲
这里用到的hanxi/xiaomusic项目,地址 https://github.com/hanxi/xiaomusic
我们可以使用docker-compose来部署,命令如下
services:
xiaomusic:
image: hanxi/xiaomusic
container_name: xiaomusic
restart: unless-stopped
ports:
- 8090:8090
volumes:
- /xiaomusic/music:/app/music
- /xiaomusic/conf:/app/conf
唯一要注意的就是映射的目录volumes,前面设置成自己的即可
第一行的目录对应的是你的音乐文件目录,第二行是配置文件目录,自己自行配置
端口也是,自己注意就可以了
部署完成后打开容器
自己选择任意主题都可以,我自己倾向于用pure主题,
进入后先到设置里,填入自己的小米账号和密码,第三行的ip指的是你nas的ip,填完后保存即可
如果音箱成功连接到了容器,那么在小爱设备控制这里能看到对应的音箱
我的小爱play增强版比较特殊,需要在设置里打开转换为MP3,不然flac格式的音乐无法播放,
一切完成后,就可以播放对应的歌曲了
开电脑
这里需要我们用到home assistant,具体怎么部署自己自行百度
我只讲怎么连接音箱和用音箱开电脑
连接小米音箱
首先连接你的小米音箱,这里需要用到hacs项目,
地址https://github.com/hacs/integration/releases
我们去项目页面手动下载自定义插件的代码,并将其解压缩到 Home Assistant 配置目录的 "custom_components" 文件夹中。请注意,如果 "custom_components" 文件夹不存在,则需要手动创建它
此时到设置中的设备与服务中添加hacs插件,
右下角添加集成
勾选所有的选择,并提交,打开对应弹窗的链接,链接自己的github账号,进行授权,就可以了,完事后重启homeassistant,
此时就可以在侧边栏看到hacs了
打开hacs,搜索xiaomi miot auto,点击download下载
重启,然后去设置的设备与服务,
添加xiaomi miot auto
填入自己的小米账号与密码,就可以添加完毕了
此时就可以看到你的小米音箱了
怎么开电脑
这里需要用到ha_win_wol项目,地址https://gitee.com/json77/ha_win_wol
我们去项目页面手动下载自定义插件的代码,并将其解压缩到 Home Assistant 配置目录的 "custom_components" 文件夹中。
例如,如果您要安装的插件名为 "ha_win_wol",则您应该将其解压缩到以下路径:/custom_components/ha_win_wol/
重启,接着去设置的设备与服务中添加ha_win_wol
添加自己的电脑信息,提交,
加载成功后,会产生一个开关实体,实际就是你的电脑
开关加载成功后,只需要按下图设置ha的自动化即可
然后去小爱音箱app中,添加训练,
然后就可以直接控制你的小爱音箱开电脑了
Comments NOTHING