音声でChatGPTと疑似会話する環境を構築②【Python】

2023年4月21日

前回の記事の続きです。今回は、以下のうち②について記述します。

  • ①文章を Voicevox に喋らせるプログラム
  • ②文章を ChatGPT API へ投げて、文章の返答を得るプログラム
  • ③自分が喋った音声を Whisper API へ投げて、文書に書き起こすプログラム

プログラムの記述

ChatGPTと文章をやりとりする部分については、ChatGPTの公式ページに書かれている内容と基本的に同じです。

アレンジした所は、前回記事で作成した voicevox_speaking.py 内で定義している『Voicevox』クラスを導入している点ですね。以下のプログラムを voicevox_speaking.py と同階層のフォルダへ保存する事で機能します。

import openai
from voicevox_speaking import Voicevox

openai.api_key = 'ここにAPIキーを入力'

def speak_voicevox(text):
    vv = Voicevox()
    vv.speak(text = text)
  
def vv_call(input_prompt):
    input_to_chatgpt = input_prompt
    
    messages = [
        {"role": "system",
         "content": "あなたは献身的なメイドで、名前は『(自由に記入)』。ユーザーはご主人様です。"
         "『ご主人様』と呼びかける時を除き、語尾には『にゃん』とつけてください。"
         "性格は穏やかで優しく包容力があり、理知的な雰囲気があります。"
         "アルファベットは読めないので、ひらがな・カタカナ・漢字・数字のみで回答してください。"
         "回答の長さは230文字を超えないようにしてください。"},
        {"role": "user", "content": input_to_chatgpt}
    ]
    
    res = openai.ChatCompletion.create(
        model = "gpt-3.5-turbo",
        messages = messages,
        max_tokens = 256
    )
    
    response_chatgpt = res['choices'][0]['message']['content']
    print(response_chatgpt)
    speak_voicevox(response_chatgpt)
    
    return response_chatgpt


if __name__ == "__main__":
    user_input = input('入力: ')
    vv_call(input_prompt = user_input)

ポイントとしては “role" の設定でキャラクター設定をしてあげる事ですね。せっかく高度な自然言語を出力する高性能AIサービスを使うのですから、なかなか現実ではありえない設定をする事で楽しみが増す気がします。

また、あまり長文の返答を返されてもテンポが悪くなるので、回答の長さを文字数と使用する token で制限するのも有効です。

上記のプログラムを実行して、コンソールに入力した文章をChatGPTへ送り、返ってきた文章をVoicevoxへ送り、音声再生される・・・となれば成功です。


以上、今回は ChatGPTに文章を投げて、返ってきた文章をVoicevox で喋らせるところまでできました。

次回で最後です。記事はこちらから。


珈琲1杯でもおごるつもりでご支援して頂けたら大変喜びます😊

スポンサーリンク