簡介
????????相信看過鋼鐵俠的朋友們,都夢想擁有一個像賈維斯這樣全能的人工智能管家。而現在隨著AI的發展,這個愿景將隨我們越來越近。現階段,我們可以將小愛音箱接入DeepSeek,將其從“人工智障”進化成上知天文,下懂地理的半智能管家。
下面將逐步講解如何將小愛音箱接入DeepSeek并更換默認的音色為海綿寶寶。
一、Windows安裝Docker Desktop
????????Docker是一個開源的容器化平臺,旨在簡化應用程序的開發、部署和運行過程。它通過將應用程序及其所有依賴項打包成一個輕量級的、可移植的容器來實現這一目標。這些容器可以在任何支持Docker的系統上運行,確保應用程序在不同環境中以一致的方式運行?。
? ? ? ?因為Docker是基于Hyper-V虛擬化技術來運行的,因此我們在Windows上面安裝Docker Desktop之前,需要先開啟Hyper-V。
? ? ? ? 步驟:Windows設置 -> 應用 -> 程序和功能(右上角)-> 啟用或關閉Windows功能 -> 找到Hyper-V并打勾,點擊確認后將開始安裝Hyper-V(注意:安裝完成后需要重啟電腦,請保存相關文檔!!!)
? ? ? ? 按照上述教程安裝好Hyper-V后,訪問Docker 官網Docker: Accelerated Container Application Development,下載安裝包。安裝包下載完畢后,就按默認方式就行安裝就行。
打開Docker Desktop,右上角設置,Docker Engine里面配置鏡像如下:
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.unsee.tech","https://docker.1panel.live","https://dockerpull.org","https://docker.1ms.run","https://lispy.org","https://dytt.online","https://func.ink","http://mirrors.ustc.edu.cn","http://mirror.azure.cn","https://docker.zhai.cm","https://a.ussh.net","https://docker.zhai.cm"]
}
右下角Terminal打開,輸入docker info,可查看配置信息。輸出沒問題的話,至此docker就安裝好了。
二、火山引擎注冊 - 在線推理
登錄?賬號登錄-火山引擎,搜索“火山方舟”
點擊“在線推理” -> “創建推理接入點”
如下圖,自己填寫基本信息,模型選擇這里有字節跳動的豆包,還有deepseek等等。我們選擇Deepseek-R1,然后點擊“確認接入”
開通模型并創建接入點后,查看API調用方法,需要保存如下三個信息:ID/model(即ep-xxxxx),API key,調用路徑(https://ark.cn-beijing.volces.com/api/v3)
三、下載mi-gpt并配置
? ? ? ? GitHub地址:?mi-gpt,可通過git clone或者直接download zip的方式下載(如果無法訪問的話,可以訪問國內鏡像 ffgithub-migpt)
git clone https://github.com/idootop/mi-gpt.git
? ? ? ? 項目下載好后,找到兩個example文件".env"以及".migpt.js",后續將配置這兩個文件。
.env配置說明:
- OPENAI_MODEL:填上面保存的model ID,即ep-xxxxx那串
- OPENAI_API_KEY: 填上面保存的API key的值
- OPENAI_BASE_URL:填調用路徑(https://ark.cn-beijing.volces.com/api/v3)
.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: {/*** 🏠 賬號基本信息*/// 小米 IDuserId: "123456789", // 注意:不是手機號或郵箱,請在「個人信息」-「小米 ID」查看// 賬號密碼password: "pwd123",// 小愛音箱 DID 或在米家中設置的名稱did: "小米AI音箱", // 注意空格、大小寫和錯別字(音響 👉 音箱)/*** 💡 喚醒詞與提示語*/// 當消息以下面的關鍵詞開頭時,會調用 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 引擎 --默認xiaoaitts: "xiaoai",// 切換 TTS 引擎發言人音色關鍵詞,只有配置了第三方 TTS 引擎時才有效// switchSpeakerKeywords: ["把聲音換成"], // 以此關鍵詞開頭即可切換音色,比如:把聲音換成 xxx/*** 💬 連續對話** 查看哪些機型支持連續對話 👉 https://github.com/idootop/mi-gpt/issues/92*/// 是否啟用連續對話功能,部分小愛音箱型號無法查詢到正確的播放狀態,需要關閉連續對話streamResponse: true,// 連續對話時,無響應多久后自動退出exitKeepAliveAfter: 30, // 默認 30 秒,建議不要超過 1 分鐘// 連續對話時,下發 TTS 指令多長時間后開始檢測設備播放狀態(默認 3 秒)checkTTSStatusAfter: 5, // 當小愛長文本回復被過早中斷時,可嘗試調大該值// 連續對話時,播放狀態檢測間隔(單位毫秒,最低 500 毫秒,默認 1 秒)checkInterval: 1000, // 調小此值可以降低小愛回復之間的停頓感,請酌情調節/*** 🔌 其他選項*/// 是否啟用調試debug: false, // 一般情況下不要打開// 是否跟蹤 Mi Service 相關日志(打開后可以查看設備 did)enableTrace: false, // 一般情況下不要打開// 網絡請求超時時長(單位毫秒,默認 5 秒)timeout: 5000,},
};
四、部署migpt至docker
".env"以及".migpt.js"配置好后,我們就可以在docker中部署migpt了(注意:小愛音箱需要跟電腦處于同一網絡下面)
打開Terminal,運行以下指令,注意路徑需要更換成你自己的
docker run -d --env-file F:/projects/mi-gpt-main/.env -v F:/projects/mi-gpt-main/.migpt.js:/app/.migpt.js idootop/mi-gpt:latest
然后我們在images及containers可以看到有對應的實例生產出來了。
五、測試
1.?streamResponse連續對話功能關閉的情況
音頻就不發了,log如下
2.?streamResponse連續對話功能打開的情況
修改streamResponse為true,并重新部署
六、TTS(Text To Speech)
詳細可參考:https://github.com/idootop/mi-gpt-tts/blob/main/docs/mi-gpt.md
1. 火山引擎搜索“語音合成”,選擇“語音技術”,創建應用,可參考如下(要勾選語音合成)
創建好后,在“語音技術” -> “語音合成” 里面找到并保存自己的APP ID以及Access Token
2.??下載mi-gpt-tts
GitHub地址:mi-gpt-tts, 可通過git clone或者直接download zip的方式下載(如果無法訪問的話,可以訪問國內鏡像 ffgithub-mi-gpt-tts)
git clone https://github.com/idootop/mi-gpt-tts.git
3. 配置mi-gpt-tts的env文件
重命名本項目根目錄下的 .env.example 文件為 .env。
然后,將里面的環境變量修改成你自己的,參數含義如下:
環境變量名稱 | 描述 | 示例 |
---|---|---|
VOLCANO_TTS_APP_ID | 火山引擎語音合成 APP ID | 123456 |
VOLCANO_TTS_ACCESS_TOKEN | 火山引擎語音合成 Access Token | xxxxxx |
TTS_DEFAULT_SPEAKER | (可選)默認音色名稱或 ID(查看完整音色列表和費用詳情) | BV700_streaming |
SECRET_PATH | (可選)接口訪問秘密路徑,相當于訪問密碼。推薦長度大于 6,由字母、數字、- 和 _ 組成,為空時每次啟動隨機生成。 | Are-You-OK ?(不要直接用這個!) |
注意:出于安全考慮,從 v3.0.0 版本開始,訪問語音合成接口需要帶上?
SECRET_PATH
?防止他人盜刷接口。 如果?SECRET_PATH
?環境變量為空,每次啟動服務則會生成隨機訪問密碼。
?樣例參考:
# 基礎配置
# SECRET_PATH=你的接口訪問秘密路徑,比如:are-you-ok(可選)
# 音色列表可查看: https://www.volcengine.com/docs/6561/97465
# BV063_streaming 是海綿寶寶的音色
TTS_DEFAULT_SPEAKER=BV063_streaming# 火山引擎,官方文檔:https://www.volcengine.com/docs/6561/79817
VOLCANO_TTS_APP_ID=123456789
VOLCANO_TTS_ACCESS_TOKEN=xxxxxxxxxxx
#VOLCANO_TTS_USER_ID=火山引擎賬號 ID(可選)# 微軟必應 Read Aloud,官方文檔:https://www.microsoft.com/zh-cn/edge/features/read-aloud
# EDGE_TTS_TRUSTED_TOKEN=你的必應 trust token,比如:6A5A-xxxx# OpenAI TTS,官方文檔:https://platform.openai.com/docs/guides/text-to-speech
# OPENAI_API_KEY=你的 OpenAI API Key,比如:sk-proj-xxxx
# OPENAI_TTS_MODEL=tts-1
# OPENAI_BASE_URL=https://api.openai.com/v1
4. 部署mi-gpt-tts
docker run -d --env-file F:/projects/mi-gpt-tts-main/.env -p 4322:3000 idootop/mi-gpt-tts:latest
注意:需要將路徑替換成自己的
5. 測試mi-gpt-tts
在測試之前,需要先打開cmd,輸入ipconfig查詢下本機的ip地址。
然后,在部署完成后,點進container可以看到有一個接口地址
把這個鏈接調整下:http://{本機的ip}:4322/d983911d/api/tts.mp3
在瀏覽器直接訪問這個鏈接,會出現一段音頻(你好,很高興認識你),說明部署成功了。
6. 修改mi-gpt默認的TTS引擎
更改.migpt.js中tts的參數為custom
修改.env中TTS_BASE_URL為上述的鏈接
7. 重新部署mi-gpt
docker run -d --env-file F:/projects/mi-gpt-main/.env -v F:/projects/mi-gpt-main/.migpt.js:/app/.migpt.js idootop/mi-gpt:latest
8. 測試
migpt? log
migpt-tts log