iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
Mobile Development

Ionic結合ChatGPT - 30天打造AI英語口說導師APP系列 第 17

【Day - 17】Prompt Engineering實戰2 - 控制模型輸出SSML格式

  • 分享至 

  • xImage
  •  

昨天我們探討了Azure AI Service的Speech Service語音服務,並初步了解了SSML語音合成標記語言的基礎架構。今天,在開始將Ionic與文字轉語音功能串接之前,我想讓GPT模型依據其推論來產生與語境相符的語氣和語調,而非僅僅使用固定的語音輸出。這樣的方法將讓對話更富有活力和真實感。這個想法聽起來很酷對吧!讓我們一起來嘗試看看吧!

調整舊提示

在過去幾天的測試過程中,我注意到某些提示,例如:「如果學生有困難的單詞或句子,可以用中文解釋」、「請你依照這個等級進行問話」和「進行會話練習時,儘可能指出學生語法上的錯誤」等,似乎很容易被忽略。此外,為了設定特定的輸出格式,我們可能需要增加更多提示,這可能導致Token的使用量增加。因此,為了節省Token,我已對【Day - 13】的提示進行了調整和簡化。

1.從現在開始你是英文口說導師,所有對話都使用英文。
2.你的工作是和我進行一對一生活會話練習並適時地開啟新的話題。
3.請使用多益400-600分的程度進行對話。
4.對話時包含並解釋語法上的錯誤,解釋完後請延續話題。

考慮到speak元素和voice是固定格式,我打算將其直接寫死在程式碼內。這同樣有助於節省Token消耗。此外,GPT-4模型的速度問題也需考慮。如果生成過多文本,可能會導致API回應時間過長,進而影響使用體驗:

<speak xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" version="1.0" xml:lang="en-US">
  <voice name="en-US-GuyNeural">
    GPT生成的回應將直接帶入這裡
  </voice>
</speak>

 

添加新的提示

我們的目標是希望GPT模型能夠生成所需的SSML格式,因此我們加入了以下新提示:

5.輸出的回應只能使用SSML格式。不必包含speak和voice元素。

我還希望讓它能夠根據自身的推論,生成與當下語境相對應的語氣和語調,所以我使用了以下提示:

6.根據你的推論添加與語境相對應的語氣(style)和語調(styledegree)。語氣可使用:cheerful、friendly、excited、hopeful。語調接受範圍為0.01 到 2。如範例:
<mstts:express-as style="excited" styledegree="1.6">
  Wow, That is awesome!
</mstts:express-as>

為了方便測試,我選擇先在ChatGPT上使用了上述新加的提示來進行對話。測試結果顯示,當ChatGPT得知我購買了演唱會門票後,它自動加上了興奮的語氣並強化了興奮的語調。另外可以發現,ChatGPT也有依照提示適時的糾正了我的文法錯誤。
https://ithelp.ithome.com.tw/upload/images/20230917/20161663pG1n2S8Kbm.png
最後,我還希望能自動的在合適的地方幫我添加強調的語氣。為了達到這個目的,我們添加了以下的提示:

7.根據你的推論適當添加強調(emphasis)元素。強調可使用:reduced、none、moderate、strong。

這一次,ChatGPT根據自己的理解,在每個句子中加入了emphasis元素,使整個語音聽起來更生動有趣。
https://ithelp.ithome.com.tw/upload/images/20230917/20161663vdEahoyKJv.png

在Postman上測試GPT API

確認提示的可行性之後,我們使用Postman來測試GPT-4模型。測試後,它成功產生了我們期望的結果。
https://ithelp.ithome.com.tw/upload/images/20230917/20161663tkJnfzd2E4.png
然而,由於在加入新的提示後,GPT-4模型輸出的字數增加了,因此回應的時間也相對拉長了許多。
添加前:
https://ithelp.ithome.com.tw/upload/images/20230917/20161663X0ZwhIjPh9.png
添加後:
https://ithelp.ithome.com.tw/upload/images/20230917/201616638GT2aZbYGf.png

調整OpenAI Service

經過前面的測試,我們已經確認了新的提示是可行的。下一步,我們可以將這個新提示加入到OpenAI Service中並進行測試:

const SYSTEMPROMPT =
'1.從現在開始你是英文口說導師,所有對話都使用英文。\
2.你的工作是和學生進行一對一生活會話練習並適時地開啟新的話題。\
3.請使用多益400-600分的程度進行對話。\
4.對話時包含並解釋語法上的錯誤,解釋完後請延續話題。。\
5.輸出的回應只能使用SSML格式。不必包含speak和voice元素。\
6.根據你的推論添加與語境相對應的語氣(style)和語調(styledegree)。語氣可使用:cheerful、friendly、excited、hopeful。語調接受範圍為0.01 到 2。如範例:\
```\
<mstts:express-as style="excited" styledegree="1.6">\
  Wow, That is awesome!\
</mstts:express-as>\
```\
7.根據你的推論適當添加強調(emphasis)元素。強調可使用:reduced、none、moderate、strong。';

最後在實體機上測試後,成功按照提示獲得我們所指定的SSML回應格式:
https://ithelp.ithome.com.tw/upload/images/20230917/20161663oxCA98kghr.jpg

結語

今天,我們通過調整和添加新的提示,成功的讓GPT-4模型按照我們的SSML格式需求回覆信息。可惜字數的增多,導致回應速度略有下降。接下來,我們只需將GPT模型生成的SSML格式字串連接到Speech Service語音服務,就可以實現和完成文字轉語音的功能了,我們明天見!



Github專案程式碼:Ionic結合ChatGPT - Day17


上一篇
【Day - 16】Azure AI Service - 認識Speech Service語音服務
下一篇
【Day - 18】Speech Service串接 - 完成文字轉語音功能整合
系列文
Ionic結合ChatGPT - 30天打造AI英語口說導師APP30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言