既然可以使用Python來開發Zenbo Junior的應用,那麼把Zenbo串接到OpenAI,透過ChatGPT的能力,我們的Zenbo Junior一下子就可以成為萬事通博士了,上天下地,天南地北都可以跟你聊上一段了。現在就來看看如何做。
首先,你等要有OpenAI的付費帳號(何老師目前只知道付費的使用方式),然後到OpenAI的網頁中箭頭所指的地方,就可以自行新增一個程式呼叫時要使用的API Key:
有了這個key之後,請把它存放在key.txt檔案中,並且如果你有使用分散式版本控制的話,請記得該檔案要設定為不能被同步到遠端的Repo上,否則你的帳號可能就會被別的有心人拿去使用了。
此外,由於此帳號是以使用的量來計費,所以如果沒有設定使用限額的話,到時候不小心可能會要付出非常多的費用,因此網頁左側Billing中的Usage limits選項也需要去設定一下。
有了帳戶和API Key之後,請在虛擬環境中安裝openai這個模組:
pip install openai
然後,下面這支程式就可以讓Zenbo以語音提示的方式讓我們在電腦中輸入想要問的句子,再透過Zenbo的語音說出他找到的答案:
import pyzenbo
import openai
from pyzenbo.modules.dialog_system import RobotFace
host = '192.168.1.104'
sdk = pyzenbo.connect(host)
key = open("key.txt", "r", encoding="utf-8").read()
openai.api_key= key
sdk.robot.set_expression(RobotFace.PLEASED, "你有什麼想問的嗎?")
prompt = input("Your prompt: ")
while prompt != "exit" and prompt !="":
sdk.robot.set_expression(RobotFace.PLEASED, "你剛剛問我,"+prompt)
response = openai.Completion.create(
engine='text-davinci-003',
prompt=prompt,
temperature=0.7,
max_tokens=100,
n=1,
stop=None,
)
reply = response.choices[0].text.strip()
sdk.robot.speak("我的回答是:"+reply)
sdk.robot.speak("你還有什麼想問的嗎?")
prompt = input("Your prompt: ")
sdk.robot.set_expression(RobotFace.HIDEFACE)
sdk.release()