【Python】OpenAI APIとgradioを組み合わせて動かしてみる

前書き

OpenAI APIもリリースされてからどんどんアップグレードが続いていますね。最近のアップデートでは最大トークン数が拡張されたモデルが登場したり、料金形態が若干安くなったりしたようです。私はといえばGPT+StreamlitでChatGPT風のアプリを作って遊んでみたりしましたが、直近で学習を始めたgradioを組み合わせてもよい勉強になると思ったので今回はgradioとOpenAIを組み合わせて使ってみようと思います。

【実践】gradioからGPTを動かしてみる

OpenAIへの登録やGPTを使用する際に用いるトークンの発効については他のサイト等で解説記事があると思うので割愛します。
どうやらgradioにはchatbotというコンポーネントがあるようなのでこれを使ってみることに。また、api_keyの部分は個人に割り当てられたトークンに読み替えてください。

import openai
import gradio as gr
import secret_keys

# OpenAIで発効したトークンを設定
openai.api_key = secret_keys.openai_api_key

def gpt_connect(prompt):
    # GPTに直接APIを送っている部分
    comp = openai.ChatCompletion.create(
        # 処理モデルを指定
        model = "gpt-3.5-turbo",
        messages = [
            {"role" : "user", "content" : prompt}
        ]
    )
    message = comp.choices[0].message.content
    return message.strip()

def chatbot(input, history=[]):
    output = gpt_connect(input)
    history.append((input, output))
    return history, history

if __name__ == "__main__":
    gr.Interface(fn = chatbot,
                 inputs = ["text", "state"],
                 outputs = ["chatbot", "state"]).launch(debug=True)

いざ実行。シンプルに作ったのでここだけ見るとgradioのクイックスタート時と何ら変わりませんね。

早速入力に文言を入れて送信!…してみるとエラー?どうやらOpen AIの無償体験期間が終了していたのでクレジットカードの設定をする必要があったようです。

openai.error.RateLimitError: You exceeded your current quota, please check your plan and billing details.

OpenAIに課金情報を設定して再実行すると無事動きました!2カラム構成になってるので若干ダサいですがchatbotコンポーネント(右側)は思ったよりイイ感じですね。

【実践】Whisper(音声認識モデル)を組み合わせてみる

WhisperとはOpenAIが作っている音声認識モデルで、音声を文字に変換してくれるモデルです。今回はこれを使ってGPTへの質問を音声入力してみます。
とはいっても全く難しいことはなく、gradioは音声入力のコンポーネントを持っているのでこれを使うだけ。Whisperによる音声⇒文字への変換も数行追記するだけでOKでした。

import openai
import gradio as gr
import secret_keys

# OpenAIで発効したトークンを設定
openai.api_key = secret_keys.openai_api_key

def gpt_connect(prompt):
    # GPTに直接APIを送っている部分
    comp = openai.ChatCompletion.create(
        # 処理モデルを指定
        model = "gpt-3.5-turbo",
        messages = [
            {"role" : "user", "content" : prompt}
        ]
    )
    message = comp.choices[0].message.content
    return message.strip()

def chatbot(input, history=[]):
    # 入力音声をWhisperで文字に変換
    audiofile = open(input, "rb")
    conversion = openai.Audio.transcribe("whisper-1", audiofile)
    
    # 音声から変換した文字列をGPTへ送信
    output = gpt_connect(conversion["text"])
    history.append((conversion["text"], output))
    return history, history

if __name__ == "__main__":
    gr.Interface(fn = chatbot,
                 inputs = [gr.Audio(source = "microphone", type = "filepath"), "state"],
                 outputs = ["chatbot", "state"]).launch(debug=True)

そして実行!左側が音声入力用のコンポーネントに変わっていますね。このボタンを押下するとマイクからの音声を受け付けてくれます。

入力した音声はそのまま変換されてGPTへ、ちゃんと動作しているようですね。

使ってみた感想

添付の画像以外にも音声で対話してみましたが便利ですね。これでレスポンスが音声で返ってくれば話し相手に困らないんじゃないでしょうか笑。
OpenAIの機能が凄いというのは今更ですが、gradioについても便利なコンポーネントが多く、AIエンジニアを狙って機能追加でもしているのかといった噛みあい具合(Chatbotコンポーネントなんてまさに)。少し間を置いただけでどんどんアップグレードされていく世界ですので定期的に目を通したいですね。

いいなと思ったら応援しよう!