大家好,我是羊刀仙。
不知道各位家裡有沒有智能音箱?沒錯,就是小愛和天貓精靈這種語音助手。剛推出的時候的確比較新奇好玩,但現在感覺妥妥的一個大傻X。現在AI十分流行,那麼是否有辦法把語音助手也接入AI呢?
本次就來介紹一個相關的開源項目:MiGPT,將小愛音箱接入 ChatGPT 和豆包(字節),改造成你的專屬語音助手。
本文會通過使用 Docker 方式來和大家一起手把手搭建這個項目,小白也能輕鬆搞定!
項目地址:點我跳轉
項目簡介
在這個數字化的世界裡,家已不僅僅是一個居住的地方,而是我們數字生活的延伸。
MiGPT 通過將小愛音箱、米家智能設備,與 ChatGPT 的理解能力完美融合,讓你的智能家居更懂你。
MiGPT 不僅僅是關於設備自動化,而是關於:打造一個懂你、有溫度、與你共同進化的家。
未來,你的每個智能家居設備,從燈泡、插座,到掃地機器人、電視等,
都可以作為一個個獨立的智能體 (Agent),更智能、更貼心的響應你的指令。
這些獨立的智能體,也可以彼此感知,彼此配合,構成一個更強大的協作網絡。
而小愛音箱就像是你的智能家居專屬管家,全心全意為你服務,釋放智能家居的真正潛力。
項目亮點
🎓 AI 問答。想象一下,當小愛音箱接入大模型後,上知天文,下知地理,從“人工智障”秒變學霸。
🎭 角色扮演。一秒調教小愛,無論是成為你的完美伴侶,還是那個能聽你傾訴心事的貼心閨蜜,都不在話下。
💬 流式響應。愛情來得太快就像龍捲風,而你的小愛音箱也是,對你的愛意秒回,愛你不會讓你等太久。
🧠 長短期記憶。小愛音箱現在能記住你們之間的每一次對話,越聊越默契,就像是你身邊的老朋友。
🔊 自定義 TTS。厭倦了小愛同學的語音?幫你解鎖「豆包」同款音色,就像真人在回你的消息。
🤖️ 智能家居 Agent。心情不好?小愛立刻懂你,自動幫你播放喜歡的音樂,調節燈光,逗你開心。
設備支持
MiGPT 支持大部分的小愛音箱型號,推薦使用小愛音箱 Pro(完美運行)。
小愛音箱 HD 以及 小愛藍牙音箱隨身版 完全不支持該項目。
部署流程
以威聯通NAS為例,型號為TS-673A。
文件目錄與配置文件
首先為MiGPT準備文件目錄。直接命名為MiGPT,此外還需要準備 .env 和 .migpt.js 兩個配置文件放於該目錄下。
為了方便起見,直接在項目地址下載下圖的兩個文件,編輯後重新命名再上傳至NAS即可。
在NAS中打開Text Editor文本編輯器,創建文本文件。將以下代碼分別粘貼進去,進行修改並另存為至MiGPT目錄下。
⭕️ 環境變量.env配置:
一般來說僅需修改以下幾個部分
OPENAI_MODEL=llama3-70b-8192,這裡的phi3:latest可以換成其他模型
OPENAI_API_KEY=gsk_xxxxx,這個沒關係隨便寫一個
OPENAI_BASE_URL=https://api.groq.com/openai/v1,這個地址其實就是運行大模型的地址
更多AI接入請參考https://migptgui.com/docs/apply/ ,我個人使用的是作者推薦的Groq提供的llama3-70b-8192,應該是目前唯一一家免費提供 70B 參數規模的 Llama3 模型的廠商。
另存為.env ,是一個隱藏文件,看不到正常。在 Linux 和類 Unix 系統(包括大多數 NAS 設備的操作系統)中,以 “.” 開頭的文件默認是隱藏的。這是操作系統的一種標準做法,目的是防止這些配置文件被用戶不小心修改或刪除。
⭕️ 音箱.migpt.js配置
重複上面操作,先新建文檔。配置模板如下。內容較多,大家可以先往下劃,我列出了必須修改部分,其他內容等自己回頭再慢慢改~
必須需要修改的是userId、password、did就是你的小愛音箱型號:
// 小米 ID userId: "978765301", // 注意:不是手機號或郵箱,請在「個人信息」-「小米 ID」查看
// 賬號密碼,就是你小米賬戶登陸的那個密碼
password: "Keepfit75KG!",
// 小愛音箱 DID 或在米家中設置的名稱 did: "小愛音箱Pro", // 注意空格、大小寫和錯別字(音響 👉 音箱),不要出任何錯誤
參考上面的設備支持部分,這個變量請根據自己型號修改false或true,默認為true:
// 是否啟用連續對話功能,部分小愛音箱型號無法查詢到正確的播放狀態,需要關閉連續對話 streamResponse: true, // 連續對話時,無響應多久後自動退出
以上工作完成後,另存為即可。
Docker Compose部署
打開Cintainer Station,創建新的應用,將以下代碼修改並創建即可。
系統會自動幫我們拉取鏡像並運行項目。
部署完畢後,查看Docker日誌,出現以下界面便說明可以使用了。
嘗試對話,跟作者配置中的一樣,確實有些傲嬌。。。
常見問題
皆摘自原項目。很多問題解決方案,以及自定義配置教程在原項目都十分詳細,這裡只是挑些可能較為常見的說明,為大家節省點時間。
是否支持其他模型,是否支持其他TTS接入
理論上兼容 OpenAI SDK的模型都支持,修改環境變量即可接入到 MiGPT。比如:通義千問、零一萬物、Moonshot、DeepSeek等。
具體的配置可查看該鏈接:https://migptgui.com/docs/apply/tongyi
對於其他不兼容的大模型,比如豆包、文心一言等,也可以通過第三方的 API 聚合工具將其轉換為 OpenAI API 兼容的格式。比如: One API和 simple-one-api(推薦:支持 coze,使用更簡單),然後修改對應的環境變量值即可完成接入。
支持任意的TTS服務接入,建議參考:https://github.com/idootop/mi-gpt/blob/main/docs/tts.md
AI回答調速、開啟喚醒模式
這兩項都可在小愛的配置文件中修改調整.
回答調速:
// .migpt.js export default { speaker: { // 使用小愛自帶的 TTS 引擎 tts: "xiaoai", // 關閉 AI 開始回答時的提示語 onAIAsking: [], // 關閉 AI 結束回答時的提示語 onAIReplied: [], // 連續對話時,播放狀態檢測間隔(單位毫秒,最低 500 毫秒,默認 1 秒) checkInterval: 500, // 調小此值可以降低小愛回覆之間的停頓感,請酌情調節 // 連續對話時,下發 TTS 指令多長時間後開始檢測設備播放狀態(單位秒,最好不要低於 1s,默認 3 秒) checkTTSStatusAfter: 3, // 可適當調小或調大 // ... }, };
喚醒和連續對話模式,召喚傻妞後,便無需每句對話以小愛同學作為起始:
// .migpt.js export default { speaker: { // 當消息以下面的關鍵詞開頭時,會調用 AI 來回復消息 callAIKeywords: ["請", "你", "傻妞"], // 當消息以下面的關鍵詞開頭時,會進入 AI 喚醒狀態 wakeUpKeywords: ["打開", "進入", "召喚"], // ... }, };
喚醒小愛同學
正常對小愛音箱說“小愛同學”,喚醒其進入聽寫狀態。
喚醒小愛同學後,可以對她說語音指令,比如“請問地球為什麼是圓的”
此時,只有以callAIKeywords開頭的消息,才會調用 AI 進行回覆。
此階段無法做到連續對話,每次提問都要以“小愛同學,請 xxx”開頭。
進入喚醒模式
默認不會調用 AI 進行回覆
喚醒模式(AI 模式)類似小愛技能,進入後可以連續對話
使用wakeUpKeywords即可進入喚醒模式,比如“小愛同學,召喚傻妞”
進入喚醒模式後,每次提問請等待小愛回答“我說完了”之後,再繼續向她提問
此時,可直接向小愛提問題,無需再以“小愛同學,xxx”開頭。
無法使用、啟動失敗等
該類問題極大概率是AI和小米各自那三個變量的配置問題,重點關注網絡問題、API是否需要付費等。
⭕️ LLM 響應異常 Connection error,也就是AI不能回覆,國內環境無法訪問 AI 服務的情況,需要魔法,本文只建議更換使用國內LLM (Moonshot、零一萬物、通義千問等)。
⭕️ LLM 響應異常 404 The model xxx does not exist,意為該模型不存在或不可用,基本就是沒權限要付費那種,建議切換到其他模型。
⭕️ LLM 響應異常,401 Invalid Authentication, 404 基本都是OpenAI_API_KEY 無效。檢查OpenAI_API_KEY是否能正常使用,以及對應環境變量是否生效。
⭕️ LLM 響應異常,404 Not Found,可能代理 IP 被 Cloudflare 風控,可嘗試切換節點。或者把環境變量的 HTTP_PROXY 設置成空字符串 HTTP_PROXY='' 關閉代理(僅適用於國產大模型)。
無AI回答,但是後臺日誌有文字信息輸出
這與小愛音箱的型號有關,請到米家產品庫查看參數並修改:
ttsCommand: [5, 1], // 設備喚醒指令,請到 https://home.miot-spec.com 查詢具體指令 wakeUpCommand: [5, 3], // 查詢是否在播放中指令,請到 https://home.miot-spec.com 查詢具體指令 // playingCommand: [3, 1, 1], // 默認無需配置此參數,查詢播放狀態異常時再嘗試開啟
如果出現播放錯誤,比如長句的時候戛然而止,可修改第三個變量。
是否支持多個小愛音箱
可部署多個Docker,分別綁定不同的小愛音箱。
是否需要同一局域網
不需要。MiGPT 調用 MIoT 雲端接口,可在任意設備或服務器上運行,無需和小愛音箱在同一局域網下。
重設小愛人設
可通過語音設置。
小愛:小愛同學,你是 xxx,你 xxx
你自己:小愛同學,我是 xxx,我 xxx