25230 ChatGPT搭載自動ツイートの仕組み

25230 ChatGPT搭載自動ツイートの仕組み

ローエンドチャットGPT 25230のコミュニティプロバイダーがLETでオファーを共有する際は、ぜひ世界に発信したいと考えます。その方法の一つとして、Twitterにスレッドへのリンクを投稿する方法があります。これは、Twitter APIと連携するPythonスクリプトを使って行います。

1 時間に 1 回、LET オファー カテゴリ内のすべてのスレッド (RSS フィード経由、Python のfeedparserモジュールを使用) を確認し、それをすでにツイートされているオファーのリストと比較して、最も古い未投稿のオファーを選択し、それについてツイートします。

ちなみに、Python 経由で自分でオファーを監視することもできます。 公開したチュートリアルを確認してください

リンクをそのまま投稿することもできますが、オファーであることを明確にしておきたいと思います。元々のコードはこんな感じでした。

 possible_tweet_bodies = [ '驚き!' 、 "新しい取引が掲載されました!' 、 
   「このお買い得品をチェックしてください!」など
tweet_body = ランダム選択 (可能性のあるツイート本文)

これは効果はありますが、明らかに繰り返しが多く、読者にオファーについて何も伝えません。

ChatGPTの登場…そしてハードル

より便利にするために、ChatGPTを使って実験してみることにしました。このコードは投稿のテキストを取得してChatGPTに渡すようになっています。当初はChatGPTに「これについてツイートを書いてください:(投稿の内容)」といったプロンプトを与えていました。

動作はしますが、問題は280文字をはるかに超えるコンテンツが返される可能性があることです。残念ながら、ChatGPTは文字数をうまくカウントできません。API呼び出しではトークンの最大数を指定できますが、トークンは単語であり、「a」から「antidisestablishmentarianism」まで何でも構いません。

また、リンクについても考慮する必要があります。Twitterはこれを23文字のt.coリンクに短縮します。t.coリンクを事前に取得するAPIはなく、たとえ23文字未満のリンクが生成されたとしても、Twitterは23文字を「予算」として割り当てます。つまり、リンクを使用する場合、コンテンツは257文字を超えることはできません。

残念ながら、ChatGPTに「…について257文字以内のツイートを書いてください」と指示してもうまくいきません。それでも280文字以上(時には800文字以上!)のツイートが返ってきます。

257で強制的に切り取ることはできません。文の途中になってしまう可能性があるからです。「短いツイート」「とても短いツイート」などの組み合わせを試してみましたが、うまくいきませんでした。「ハッシュタグなし」も試してみましたが、効果はありませんでした。

でも、これは生成的なので、無限大は使えるツールです。コードは次のようになります。

応答 = ""
start = "仮想ホスティングのこのセールについて短いツイートを書く"
カウンタが範囲(1、31)の場合:
    chatgpt_query = "{0:s} {0:s}: {1:s}".format(開始、オファータイトル、オファー概要)
    chatgpt_response = get_tweet_body (chatgpt_query)
    chatgpt_content = chatgpt_response.content.replace('"','')
    len(chatgpt_content) > 257の場合:
        debug("命令 [{0:d}]: 応答の長さ {1:d}、スキップします".format(counter,len(chatgpt_content)))
    それ以外:
        レスポンス = chatgpt_content
        壊す

応答 == "の場合":
    info("エラー: 257文字未満のツイートは生成されませんでした")
    sys.exit(1)

つまり、30回試行します。257文字未満のテキストを取得できなかった場合は終了しますが、今回の場合は1時間後に再試行するので問題ありません。1週間ほど運用していますが、このようなことは一度も発生していません。

ご興味があれば、get_tweet_body 関数は非常にシンプルです。

 def get_tweet_body (入力):
   デバッグ ("get_tweet_body() 入力: {0:s}".format(input))
   レスポンス = openai.ChatCompletion.create(
      モデル='gpt-3.5-turbo',
      メッセージ=[ {
         '役割': 'ユーザー', 
         'コンテンツ': 入力
      } ],
      温度=1.5
   )
   応答を返す['選択肢'][0]['メッセージ']

多様性を高めるために温度を少し上げました。OpenAIのBroodを使った実験に基づいて、GPT 3.5 Turboモデルを使用しています。

いくつか、ちょっと変わった外れ値もありました。例えば、「企業の重要なウェブサイトすべてに、ローストビーフの匂いがするまで、最高性能で信頼性の高いネットワーク保護を提供!」など。全体的に見て、ツイートはどれも的を射ています。

ChatGPTを何に使っていますか?

おすすめの記事