譯者 | 朱先忠
審校 | 重樓
簡(jiǎn)介
本文旨在指導(dǎo)您創(chuàng)建一個(gè)簡(jiǎn)單而強(qiáng)大的語(yǔ)音助手,以滿足您的喜好。我們將使用兩個(gè)強(qiáng)大的工具——Whisper和GPT來(lái)實(shí)現(xiàn)這一點(diǎn)。你可能已經(jīng)知道GPT及其功能,但你知道Whisper是什么嗎?
其實(shí),Whisper是OpenAI公司開(kāi)發(fā)的一種高級(jí)語(yǔ)音識(shí)別模型,可提供準(zhǔn)確的音頻到文本轉(zhuǎn)錄。
我們將帶您完成示例工程構(gòu)建的每一步,包括編碼說(shuō)明。最后,您將擁有一款可啟動(dòng)并正常運(yùn)行的語(yǔ)音助手。
準(zhǔn)備工作
打開(kāi)AI API密鑰
如果你已經(jīng)有了OpenAI API密鑰,你可以跳過(guò)這一節(jié)。
Whisper和GPT API都需要訪問(wèn)OpenAI API密鑰。與ChatGPT的訂閱需要支持固定費(fèi)用不同,API密鑰是根據(jù)您使用服務(wù)的數(shù)量進(jìn)行支付的。
價(jià)格還算是比較合理的。在撰寫(xiě)本文時(shí),Whisper的價(jià)格為0.006美元/分鐘,GPT(模型為GPT-3.5-turbo)的價(jià)格為0.002/1K代幣(代幣約為0.75個(gè)單詞)。
OpenAI的網(wǎng)站(作者自己的圖片)
要獲取密鑰,請(qǐng)首先在OpenAI網(wǎng)站上創(chuàng)建一個(gè)帳戶。登錄后,單擊右上角的姓名并選擇查看API密鑰。單擊按鈕“創(chuàng)建新密鑰(Create new secret key)”后,將顯示您的密鑰。請(qǐng)確保保存此密鑰,因?yàn)槟鷮o(wú)法再次看到它。
示例工程依賴的第三方庫(kù)
本小節(jié)介紹項(xiàng)目所需的開(kāi)源代碼庫(kù)。本文示例項(xiàng)目包括使用OpenAI開(kāi)發(fā)的Python庫(kù)執(zhí)行各種AI任務(wù),以及使用pyttsx3生成語(yǔ)音,使用SoundDevice錄制和播放音頻,使用numpy和scipy進(jìn)行數(shù)學(xué)運(yùn)算等。和往常一樣,在啟動(dòng)新項(xiàng)目時(shí),您應(yīng)該在安裝包之前創(chuàng)建一個(gè)新的虛擬環(huán)境。
示例工程代碼結(jié)構(gòu)
我們的代碼將圍繞一個(gè)類構(gòu)建,總共占用大約90行代碼。在此,假設(shè)您對(duì)Python類語(yǔ)法知識(shí)已經(jīng)有了基本的理解。整個(gè)類結(jié)構(gòu)如下:
其中,Listen方法負(fù)責(zé)捕獲用戶的語(yǔ)音輸入,并使用Whisper將其轉(zhuǎn)換為文本。Think方法負(fù)責(zé)將文本發(fā)送到GPT,然后由GPT生成自然語(yǔ)言響應(yīng)。speak方法負(fù)責(zé)將響應(yīng)文本轉(zhuǎn)換為可播放的音頻。
注意:上圖中最右邊代表系統(tǒng)中的GPT助理部分(負(fù)責(zé)給出自然語(yǔ)言響應(yīng))。
下面這個(gè)過(guò)程是可以重復(fù)執(zhí)行的,即用戶可以通過(guò)發(fā)出另一個(gè)請(qǐng)求在對(duì)話中進(jìn)行交互。
示例類對(duì)應(yīng)的代碼結(jié)構(gòu)(作者自己的圖片)
__init__函數(shù)
此函數(shù)負(fù)責(zé)初始化歷史記錄和設(shè)置API密鑰。
我們需要一個(gè)歷史記錄來(lái)跟蹤以前的消息。這基本上對(duì)應(yīng)于我們助理的短期記憶,可以讓它記住你在談話中早些時(shí)候說(shuō)的話。
listen函數(shù)
listen函數(shù)工作流程
這個(gè)方法相當(dāng)于我們助理的耳朵功能。
listen函數(shù)允許接收來(lái)自用戶的輸入。此函數(shù)負(fù)責(zé)記錄麥克風(fēng)中的音頻并將其轉(zhuǎn)錄為文本。
listen函數(shù)的具體作用如下:
- 錄制音頻時(shí)打印出“Listening…”信息。
- 使用聲音設(shè)備以44100 Hz的采樣率錄制3秒的音頻(或您想要的任何持續(xù)時(shí)間)。
- 將錄制的音頻保存為臨時(shí)WAV文件中的NumPy數(shù)組。
- 使用OpenAI API的轉(zhuǎn)錄方法將音頻發(fā)送給Whisper,由Whisper將其轉(zhuǎn)錄。
- 將轉(zhuǎn)錄后的文本打印到控制臺(tái),以確認(rèn)轉(zhuǎn)錄成功。
- 以字符串形式返回轉(zhuǎn)錄后的文本。
在本例中,助理的監(jiān)聽(tīng)時(shí)長(zhǎng)為3秒鐘,但您可以根據(jù)需要更改時(shí)間。
think函數(shù)
think函數(shù)工作流程
其實(shí),我們系統(tǒng)中助理的大腦是由GPT驅(qū)動(dòng)的。think函數(shù)負(fù)責(zé)接收助理聽(tīng)到的內(nèi)容,并詳細(xì)闡述回應(yīng)內(nèi)容。
值得注意的是,響應(yīng)內(nèi)容不是在您的本地計(jì)算機(jī)上創(chuàng)建的。文本需要發(fā)送到OpenAI的服務(wù)器,以便通過(guò)API進(jìn)行處理。然后,響應(yīng)內(nèi)容被保存在響應(yīng)變量中,用戶消息和響應(yīng)都被添加到歷史記錄中,即助手的短期記憶,負(fù)責(zé)為GPT模型提供上下文以生成響應(yīng)。
speak函數(shù)
speak函數(shù)工作流程
speak函數(shù)負(fù)責(zé)將文本轉(zhuǎn)換為語(yǔ)音,并將其回放給用戶。此函數(shù)只接受一個(gè)參數(shù):text。此參數(shù)應(yīng)該是一個(gè)字符串,表示要轉(zhuǎn)換為語(yǔ)音的文本。
當(dāng)用文本字符串作為參數(shù)調(diào)用函數(shù)時(shí),它會(huì)用命令engine=pyttsx3.init()初始化pyttsx3語(yǔ)音引擎。這個(gè)對(duì)象是引擎用來(lái)將文本轉(zhuǎn)換為語(yǔ)音的主要接口。
然后,該函數(shù)指示語(yǔ)音引擎使用命令引擎將提供的文本轉(zhuǎn)換為語(yǔ)音。這會(huì)將提供的要speak(由引擎讀出)的文本排隊(duì)。命令engine.runAndWait則負(fù)責(zé)告訴引擎處理排隊(duì)的命令。
值得注意的是,Pyttsx3是在本地處理所有文本到語(yǔ)音的轉(zhuǎn)換,這在系統(tǒng)的延遲方面是一個(gè)顯著的優(yōu)勢(shì)。
最后的潤(rùn)色
到此,系統(tǒng)中助理部分已經(jīng)準(zhǔn)備好了。接下來(lái),我們只需要?jiǎng)?chuàng)建一個(gè)輔助對(duì)象,然后開(kāi)始對(duì)話。
對(duì)話是一個(gè)無(wú)限循環(huán),當(dāng)用戶說(shuō)出包含“Goodbye(再見(jiàn))”的句子時(shí),對(duì)話就結(jié)束了。
個(gè)性化體驗(yàn)技巧
總體來(lái)看,自定義GPT助手是輕而易舉的事情!我們構(gòu)建的代碼是極具模塊化的,它允許您通過(guò)添加各種功能進(jìn)行自定義。以下是一些幫助您進(jìn)行定制的參考想法:
- 給助理一個(gè)角色:改變最初的提示,讓你的助理扮演你的英語(yǔ)老師、勵(lì)志演說(shuō)家或你能想到的任何其他角色!這方面定制,請(qǐng)查看Awesome ChatGPT Prompts了解更多想法。
- 更改語(yǔ)言:想使用另一種語(yǔ)言嗎?沒(méi)問(wèn)題!只需將代碼中的英語(yǔ)更改為您想要的語(yǔ)言即可。
- 構(gòu)建應(yīng)用程序:您可以輕松地將助手集成到任何應(yīng)用程序中。
- 添加個(gè)性:通過(guò)添加自定義回復(fù)或使用不同的語(yǔ)調(diào)和語(yǔ)言風(fēng)格,讓你的助手擁有獨(dú)特的個(gè)性。
- 與其他API集成:將您的助手與其他API進(jìn)行集成,以提供更高級(jí)的功能,如天氣預(yù)報(bào)或新聞更新等。
結(jié)論
在本文中,我們解釋了如何檢索OpenAI API密鑰,并提供了用于捕獲用戶輸入、生成響應(yīng)以及將文本轉(zhuǎn)換為語(yǔ)音以進(jìn)行播放的listen、think和speak等函數(shù)的代碼示例。
有了這些知識(shí),您可以開(kāi)始創(chuàng)建一款適合您自己特定需求的獨(dú)特語(yǔ)音助手??傊?,存在無(wú)限的可能性:從創(chuàng)建一個(gè)個(gè)人助理來(lái)幫助完成日常任務(wù),到構(gòu)建一個(gè)語(yǔ)音控制的自動(dòng)化系統(tǒng)……有關(guān)本文示例的所有代碼,您可以訪問(wèn)鏈接的GitHub存儲(chǔ)庫(kù)。
譯者介紹
朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計(jì)算機(jī)教師,自由編程界老兵一枚。
原文標(biāo)題:Creating Your Personalized Voice Assistant with GPT and Whisper,作者:Donato Riccio