プログラミングの芽

面白そうな技術を使って、楽しいことやりたい

ChatGPT APIとVOICEPEAKを連携してAIとお話する

VOICEPEAKがPythonから使えるようになっていたので、最近話題のChatGPTに声を与えてみました。
VOICEPEAKをPythonで使う方法については、以下記事を参照してください。 atarms.hatenablog.com 今回は上記記事のスクリプトを、text2voicePeak.pyとして保存したものを使います。

あと、ChatGPT APIはそのまま使うとユーザーとのやり取りを一切記憶しないので、今回は記憶する実装にしました。 詳細は調べてね。

下に置いてあるコードを使うと動画みたいな感じになります。

以下が今回のコード

import openai
from text2voicePeak import playVoicePeak

openai.api_key = "OpenAIのサイトから発行したものをペースト"

# ChatGPTクラス
class ChatGPTClass:
    def __init__(self):
        self.messages = []
        self.ai_response = ""
        # role:systemで初期設定をしたければ、以下で読み込む。なくてもいい
        # self.loadConfig("chatGPTSetting.txt")

    def chatProcess(self, userMessage):
        # ユーザの回答を保存
        self.messages.append({"role": "user", "content": userMessage})

        # APIを使ってChatGPTの回答を生成
        response = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=self.messages)
        self.ai_response = response['choices'][0]['message']['content']

        # AIの回答を保存
        self.messages.append({"role": "assistant", "content": self.ai_response})

        return self.ai_response

    def loadConfig(self,fileName):
        with open(fileName, "r", encoding="utf-8") as f:
            self.messages.append({"role": "system", "content": f.read()})

使用例

# chatBotクラスのインスタンスを生成
chatbot = chatBot()
# 会話を始める
while True:
    # ユーザの入力を待機
    userMessage = input("あなた:")
    if(userMessage == "_log"):
        # このセッションのChatGPTとのログを表示
        for message in chatbot.messages:
            print(message["role"],":",message["content"])
        continue

    # ユーザの入力をchatProcessに渡す
    chatbot.chatProcess(userMessage)
    # AIの回答を表示
    print("AI:",chatbot.ai_response)

    # VoicePeakでAIの回答を音声で再生
    playVoicePeak(chatbot.ai_response)

VOICEPEAKナレータの種類も増えてきてますし、今回の方法使ってギャルゲ作ってくれる人を切に望んでいます。