見出し画像

OpenAIのGPT3を使ってPythonで自動リプを作成・投稿する方法

ChatGPTで有名なOpenAIが開発したGPT3を使って、指定したツイートにもらったリプに対して、自動で文章を生成して、返事を返すbotを作っていきましょう

これまでのnoteで自動化が図れている方は、簡単にできると思います。
前提として、以前のnoteでTwitter APIを取得している前提で話を進めていきます。

もし、まだTwitter APIを取得していない場合には、こちらから取得しておきましょう

今回はGPT3の使い方に慣れる、という目的で実施していきます。
また、GPT3は文字数によって金額が変わりますが、初回登録で18ドル分のクレジットが付与されます。

僕も試しましたが、100件くらいリプが来ても1ドル程度だったので、無料クレジットをオーバーする心配はないです。

openAIのAPI取得

https://openai.com/api/

上記URLからopenaiのAPIを取得します


sign upはgoogleのアカウントでOKです


ログイン後にpersonal→view API keysをクリック


「+ create new secret key」をクリック

これでopenAIのAPIも取得できました

ツイートIDの取得

ツイートIDが必要になりますので、以下のように取得しましょう

  • パソコンからtwitterにログイン

  • 自動リプしたいツイートを選択

  • 選択したツイートのURL後半にある数字をコピペ

これで準備はOKです

google colaboratory環境で実行します


pip install openai
pip install schedule
pip install tweepy
import openai
import schedule
import time
import tweepy

CONSUMER_KEY = ''
CONSUMER_SECRET = ''
ACCESS_TOKEN = ''
ACCESS_SECRET = ''

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)

openai.api_key = ""
model = "text-davinci-003"

tweet_id = 
#自動返信が終わったリプのツイートIDを入れる
finish_list=[]

def gpt3_reply():
    #自分宛のリプを取得
    mentions=tweepy.Cursor(api.mentions_timeline).items(10)
    #対象のツイートIDでまだ返信をしていなければGPT3が自動返信
    for mention in mentions:
        if mention.in_reply_to_status_id == tweet_id:
            if mention.id in finish_list:
                pass
            else:
                prompt = mention.text
                 #文章生成                 completions = openai.Completion.create(
                    model=model,
                    prompt=prompt,
                    max_tokens=1024,
                    n=1,
                    stop=None,
                    temperature=0.5,
                )

                #生成結果を取得してツイート
                message = completions.choices[0].text
                if len(message)<140:
                    api.update_status(status='@'+mention.user.screen_name+message, in_reply_to_status_id=mention.id)
                    finish_list.append(mention.id)
        else:
            pass
    return finish_list

#定期実行
schedule.every(1).minutes.do(gpt3_reply)
while True:
    schedule.run_pending()
    time.sleep(6)



この記事が気に入ったらサポートをしてみませんか?