## 實作「AI in a Box」之語音對談功能
### 前言
本篇為「Homemade version of “AI in a Box”」專案的系列文章,關於該專案的整體描述請參閱這篇[內容](https://hackmd.io/@ai-in-a-box/rJtjUU3Sp)。
前面已經完成大語言模型([llama.cpp](https://hackmd.io/@ai-in-a-box/r1C5UleUp))與自動語音辨識([whisper.cpp](https://hackmd.io/@ai-in-a-box/S11DsfFUT))實作。接下來整合這兩部份以完成「語音對談」功能。
### 程式實作
直接使用範例程式碼並做相對應的修改,用到的是llama.cpp專案之[main](https://github.com/ggerganov/llama.cpp/tree/master/examples/main)範例與whisper.cpp之[stream](https://github.com/ggerganov/whisper.cpp/tree/master/examples/stream)範例。
兩個範例程式會使用[Windows IPC](https://www.codeproject.com/Articles/13724/Windows-IPC)的Named Pipe方式進行通訊。其中whisper.cpp之stream範例程式將做為用戶端(Client),負責將語音轉換為字串後送至llama.cpp專案之main範例程式。而llama.cpp專案之main範例程式將做為伺服器端(Server),接收whisper.cpp之stream範例程式所發送過來的字串後交由Llama 2模型進行回應。
依前述進行修改後的程式碼為[stream.cpp](https://mega.nz/file/XAN3iZDJ#n4jVqYt-KLonenhCPZ8hJ2BAUoujIXR_56cyyAIIOOA)與[main.cpp](https://mega.nz/file/OYESxSpI#8CWX7OHjH8WJ0iUROBOAzhoz94-iLmAU38j9pIW4nuk),下載這兩個程式碼後覆蓋至對應的位置;接著重新建置兩個專案,建置程序請參考先前文章之說明。
### 範例執行
修改完程式碼並完成專案建置後;首先執行llama.cpp專案之main範例程式,之後再執行whisper.cpp之stream範例程式。範例程式的執行程序請參考先前文章之說明,執行結果如下所示:

### 結語
至此初步完成「語音對談」功能,當然執行效率、語音識別正確率等課題仍待克服。但至少已經做到用中文進行對談,這也是「土炮版」專案與大老原版「AI in a Box」專案之間的其中一項差異;當然用中文進行交談是最初就設定的目標同時也埋下了一個梗,這個梗對應的是星爺『功夫』電影的一個橋段:[阿鬼!!你還是說中文好了](https://www.youtube.com/watch?v=jSs2nfaOnPA)。