5
2

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.

ChatGPTでも使われているGPT-3.5のAPIを利用してStreamlitで簡単に文章変換アプリを作ってみました

Last updated at Posted at 2023-03-11

はじめに

 chatGPTで使われているモデルgpt-3.5-turboがAPI化されたので、それで何か作ってみようということで、いつものstreamlitを使って文章変換アプリを作ってみました。

機能

 アプリの機能としては入力された文章を「要約」「校正」「英語翻訳」「関西弁変換」という形の文章変換機能にしました。

下準備と料金について

 python環境にpipでstreamlitとopenaiのインストールをしておく事と、OpenAIでAPIキーを発行しておいて下さい。
 ちなみにAPIの利用料金は1000トークンあたり0.002ドル(日本円で0.27円)となっていて、OpenAI会員登録時に3ヶ月間有効の18ドル相当のクレジットが付与されます。
 ※2023/3/11時点

ソースコード

secret.json
{
    "API_KEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
app.py
import json
import openai
import streamlit as st

pronpt_dict = {'要約して': '次の文を要約して下さい。',
               '校正して': '次の文を校正して下さい。',
               '英語に翻訳して': '次の文を英語に翻訳して下さい。',
               '関西弁にして': '次の文を関西弁にして下さい。'}

def chatgpt_sentence_conversion(api_key, prompt):
    openai.api_key = api_key
    model = "gpt-3.5-turbo"
    messages=[{"role": "user", "content": prompt},]
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "user", "content": prompt}, 
        ]
    )
    return response["choices"][0]["message"]["content"]    

def get_gpt_apikey():
    with open('secret.json') as f:
        secret = json.load(f)
        
    return secret["API_KEY"]

def main():
    st.title('文章変換アプリ with GPT3.5')
    select_command = st.sidebar.radio('変換種別', ('要約して', 
                                                  '校正して', 
                                                  '英語に翻訳して',
                                                  '関西弁にして'))

    pronpt_command = pronpt_dict.get(select_command)
    pronpt_sentence = st.text_area('こちらにテキストを入力して下さい。')

    if pronpt_sentence is not None:
        if st.button('実行'):
            api_key = get_gpt_apikey()
            response = chatgpt_sentence_conversion(api_key, pronpt_command+pronpt_sentence)
            st.write('変換結果')
            st.write(response)  

if __name__ == '__main__':
    main()

画面

image.png

実施結果

要約

入力テキスト
日本代表が第5回WBC(ワールド・ベースボール・クラシック)の第2戦で韓国代表と対戦し、13対4で快勝して2連勝を飾った。日本は3回表、先発のダルビッシュ有が8番・ヤン・ウィジの2ラン本塁打などで3点を先行されたが、直後の3回裏、1番のラーズ・ヌートバー、2番・近藤健介、5番・吉田正尚のタイムリーで4点を奪って逆転。5回には近藤のソロ本塁打などで2点を追加すると、6回には3番・大谷翔平のライト前タイムリーなどで5点を加えた。7回にはさらに押し出し四球などで2点を挙げた。

変換結果
日本代表は第5回WBCの第2戦で韓国代表を13対4で破り、2連勝を達成した。前半はダルビッシュ有が先制点を取られたが、後半にはラーズ・ヌートバーや近藤健介、吉田正尚、大谷翔平らが活躍し、得点を重ねた。

校正

入力テキスト
サーバ上のデータファイル中には、ユーザが入力したパスワードおよびマスターパスワードは、 すべて暗号化されて記録されます。

変換結果
サーバ上のデータファイルには、ユーザーが入力したパスワードおよびマスターパスワードがすべて暗号化されて記録されます。

英語翻訳

入力テキスト
WBC第2戦、日本代表が韓国代表と対戦し13対4で勝った。

変換結果
In the second game of the WBC, the Japanese team defeated the Korean team with a score of 13 to 4.

関西弁変換

入力テキスト
今週末ユニバーサルスタジオ行かない?

変換結果
今週末、ユニバーサルスタジオ行かへん?

おわりに

 入力テキストの前に「次の文章を〇〇して下さい。」と付けてAPIに送るだけで動作するので、簡単にアプリが作れますね。これを使えばコード生成とかにも応用できそうだけど、料金が掛かることはお忘れなく。

5
2
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
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?