近期 ChatGPT 推出新的語音和影象功能,可以與使用者進行語音對話或基於使用者上傳的影象進行分析和對話,提供了一種新的、更直觀的互動體驗。使用者可以更輕鬆地表達自己的需求、提出問題,並獲得 ChatGPT 的回答和建議。而且,語音合成的真實度讓使用者感覺像是在與真實的對話夥伴進行交流,提供了更加沉浸式和互動性強的體驗。
在接下來的部分,我將對 ChatGPT mobile App 語音對話功能背後的原理進行分析和探討。通過一個實際的案例 Demo 來進行演示。我將展示一個完整的 ChatGPT 語音對話場景,以幫助您更好地瞭解其工作方式。
目前我從事是音視訊產品,剛好對音訊採集和播放有一定的瞭解。然後經常關注 OpenAI 的最新動態,每一次新的功能釋出,都會上手體驗。所以使用 ChatGPT mobile App 語音對話功能時,腦海中立刻浮現出下面這個呼叫鏈圖。
智慧語音對話的關鍵步驟:
這樣,使用者就能通過語音與系統進行互動,並聽到自然流暢的語音回覆。整個過程結合了語音處理、文書處理和語音合成等關鍵技術,以實現語音對話的互動體驗。
恕我直言,只有極少的天才能夠寫模型演演算法,極少數的公司有財力訓練模型。市面產品都是套殼,所以各位都別折騰了,直接呼叫雲廠商的 API 吧。
3.1 語音識別
OpenAI 語音轉文字 API 是基於開源大型 v2 Whisper 模型。可以用於將音訊轉錄為與音訊所在語言相同的語言以及將音訊翻譯並轉錄成英文。檔案上傳目前限制為 25 MB,支援以下輸入檔案型別:mp3、mp4、mpeg、mpga、m4a、wav 和 webm。
curl --location 'https://api.openai.com/v1/audio/transcriptions' \
--header 'Authorization: Bearer sk-xxxx' \
--form 'model="whisper-1"' \
--form 'file=@"/Users/xxx/output.wav"'
3.2 模型推理
大模型是做什麼就不介紹了,這裡使用 GPT-3.5-turbo 模型是以一系列訊息作為輸入,並將模型生成的訊息作為輸出。
curl --location 'https://api.openai.com/v1/chat/completions' \
--header 'Authorization: Bearer sk-xxx' \
--header 'Content-Type: application/json' \
--data '{
"model": "gpt-3.5-turbo",
"max_tokens": 20,
"messages": [
{
"role": "user",
"content": "Lorem ipsum"
}
]
}'
其中,OpenAI 的 API 服務不對中國大陸開放,可以使用 Cloudflare worker 解決了使用者沒有 VPN 的痛點。
3.3 語音合成
語音合成(Text-to-Speech,TTS)技術是指將文字轉換為語音輸出的過程。實現可以使用 AVSpeechSynthesizer 在 iOS 上實現類似於 say 命令的能力,另外一種方式使用 Azure 文字轉語音服務,使您的應用程式、工具或裝置能夠將文字轉換為類似人聲的合成語音。
curl --location 'https://{xxx}.tts.speech.microsoft.com/cognitiveservices/v1' \
--header 'Ocp-Apim-Subscription-Key: {xxx}' \
--header 'Content-Type: application/ssml+xml' \
--header 'X-Microsoft-OutputFormat: audio-16khz-128kbitrate-mono-mp3' \
--data '<speak version="1.0" xml:lang="en-US">
<voice xml:lang="en-US" xml:gender="Female" name="en-US-JennyNeural">
my voice is my passport verify me
</voice>
</speak>'
其中,Azure 的 API 服務對中國大陸開放,實測網路質量還可以。
到現在我們完成全部的調研工作,剩下的需要將這一切串聯起來,就可以實現一個類似於 ChatGPT mobile App 的語音對話的產品功能。Now, let’s move!
語音採集是在 iOS 上完成的,使用 AVAudioRecorder 原生支援 M4A(MPEG-4 Audio)檔案格式。M4A 檔案通常包含使用 AAC(Advanced Audio Coding)編碼的音訊。要使用 AVAudioRecorder 錄製 M4A 格式的音訊,需要將音訊格式設定為 kAudioFormatMPEG4AAC。
NSDictionary *recordSettings = @{
AVFormatIDKey: @(kAudioFormatMPEG4AAC),
AVSampleRateKey: @44100.0,
AVNumberOfChannelsKey: @(channelCount),
AVEncoderAudioQualityKey: @(AVAudioQualityHigh)
};
然後增加一個 APP 操作介面,方便觀察每個步驟的進行狀態。演示視訊前往 B 站: https://www.bilibili.com/video/BV1z94y1t7V6