14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Webアプリケーションから簡単にOpenAIのGPTモデルを使用してテキスト生成する方法

Last updated at Posted at 2023-03-05

ここではStreamlitを使用してChatGPTのAPIを呼び出して自然言語処理を行うWebアプリケーションの作成方法について説明しています。また、プログラムからChatGPTを利用するために必要なOpenAI APIキーの取得方法についても最初に説明しています。

1.OpenAIキーの取得

https://openai.com/product を開いて「Get started」をクリックする。

img.png

ログインする。またはアカウントを作成する。作成する場合はメールアドレスと電話番号が必要です。

img_1.png

無事、ログインすると紹介ページが表示される。

img_2.png

自分のアイコン画像を右クリックするとリストが表示されるので、その中から「View API Keys」をクリックする。

img_3.png

「Create new secret key」をクリックしてキーを作成する。
作成したキーはコピーして環境変数などに設定する。
※ 環境変数の設定がわからない人は直接Pythonのコードに記入してください。

  • この設定画面からはもう一度見ることはできない。分からなくなった場合は新規にキーを生成し直すこと。

img_4.png

2.Streamlitのプログラミング

パッケージのインストール

StreamlitOpenAIのパッケージをインストールする必要があります。
StreamlitはWebアプリケーションのフレームワークであり、OpenAIはChatGPTのAPIを使用するためのパッケージです。

前提としてPythonがインストールされている必要があります。また、インストールする際には、Pythonのバージョンと互換性のあるバージョンを選択する必要があります。

$ pip install streamlit
$ pip install openai

コード解説

このコードは、Streamlitを使用してユーザーの入力に基づいてOpenAIのAPIを使用して自然言語処理を実行するものです。

最初に、必要なパッケージをインポートします。

import streamlit as st
import openai
import os

streamlitはWebアプリケーションのフレームワークで、openaiはOpenAIのAPIを使用するためのパッケージです。osは、環境変数を取得するために使用されます。

次に、APIキーを設定するための関数を定義します。

def setup_openai_api():
    openai.api_key = os.environ.get('OPEN_AI_KEY')

この関数は、OPEN_AI_KEY環境変数からAPIキーを読み取り、openai.api_keyにセットします。
環境変数への設定方法が分からない人は、以下の様に直接OpenAIのキーを書き込んでください。ただしコード内容の漏洩にはくれぐれもご注意ください。

def setup_openai_api():
    openai.api_key = 'sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

次に、OpenAIに問い合わせを送信して応答を取得する関数を定義します。

# OpenAIに問い合わせを送信し、応答を取得する関数
def generate_response(system_text: str, user_text: str) -> openai.api_resources.Completion:
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=message,
        max_tokens=2000,
        temperature=0,
        stream=True
    )
    return response

この関数は、openai.ChatCompletion.createメソッドを使用してOpenAIに問い合わせを送信し、応答を取得します。modelパラメータは使用するOpenAIのモデルを指定し、messagesパラメータには、チャットの履歴が含まれます。max_tokensパラメータは、生成されたテキストの長さを制御し、temperatureパラメータは、生成されたテキストの多様性を制御します。

次に、ユーザーからの入力を取得する関数を定義します。

def get_user_input() -> str:
    return st.text_area("質問", value="OpenAIとOpen AIの違いは?")

この関数は、streamlitのtext_areaメソッドを使用して、ユーザーからテキスト入力を受け取ります。

最後に、メインの関数を定義します。

def main():
    setup_openai_api()  # OpenAI APIキーを設定する

    system_text = "アシスタントAI"
    user_text = get_user_input()  # ユーザーの入力を取得する
    is_generate_clicked = st.button("回答")

    if is_generate_clicked:
        response = generate_response(system_text, user_text)  # OpenAIに問い合わせを送信し、応答を取得する
        display_response(response)  # OpenAIから受け取った応答を表示する

この関数は、最初にふたつの関数setup_openai_apiget_user_inputを呼び出し、OpenAI APIキーを設定し、ユーザーからの入力を取得します。次に、ユーザーが回答ボタンをクリックしたときにのみgenerate_responseを呼び出し、OpenAIから返された応答を表示するためのdisplay_response関数を呼び出します。

以下は、display_response 関数の例です。

def display_response(response: openai.api_resources.Completion):
    for message in response.choices:
        text = message.text
        st.text(text)

この関数は、streamlitのtext_areaメソッドを使用して、ユーザーからテキスト入力を受け取ります。

最後に、メインの関数を定義します。

if __name__ == "__main__":
    main()

このアプリケーションは、Webアプリケーションとして動作し、ユーザーが入力したテキストに基づいてOpenAIのAPIを使用して自然言語処理を行い、結果を表示します。

実行方法

このコードは、OpenAIのAPIを使用して、ユーザーが入力した質問に答えるWebアプリケーションをStreamlitで実装したものです。以下のような流れで動作します。

  • ユーザーが質問を入力する
  • 質問をOpenAIのAPIに送信し、回答を受け取る
  • 回答を表示する

実行方法として、ターミナルでstreamlit run demo1.pyを実行し、Webアプリケーションを起動します。その後、http://localhost:8501 にアクセスすることでアプリケーションを使用できます。

$ streamlit run demo1.py
  You can now view your Streamlit app in your browser.
  Local URL: http://localhost:8501

実行結果のイメージはこのようになります。

image.png

ソースコード

このWebアプリケーションのソースコードは、GitHubリポジトリで公開されています。

14
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?