背景
「起きたら全て消えていた」 Discordで横行する“サーバー凍結荒らし”、1万人参加サーバーが一夜で消えたその手口
という記事を読んで、「gpt-3.5-turboに検知させたらいいんじゃなイカ!?」
って思ったのでやってみようと思います。
・・・
できました。
サーバーを開いてあるのでいろいろ試してみて下さい。
一応言っておきますが、シークレットトークンは送信しないでくださいね?
実装のポイント
以下のようなプロンプトを使用して検知させてみました。
日本語にではなく英語を使用した理由は、いろいろ試した結果英語の方が精度が高いと感じたのと、日本語よりも英語の方がしっかりと意図を反映させた文章が書けると思ったからです。
やはり今話題のプログラミング言語である”English”なだけあって使いやすいですね。
from OpenAIClient import request_openai
# ChatGPTを使ってメッセージを検証する
async def validate_massage_by_chatgpt(message: str) -> bool:
prompt = f"Output 1 if the following text is part of a Japanese conversation\n" \
f"\n" \
f"{message}\n" \
f"\n" \
f"Output:"
response = await request_openai(prompt)
response_message = response['choices'][0]['message']['content']
# レスポンスメッセージに'1'が含まれている場合はTrueを返す
return '1' in response_message
このプロンプトではトークンを節約する意図もあってOutput:
で止めてあります。
こうすることで、日本語の会話の一部であると判断した場合に1
だけを返信してくれる確率が上がります。
そうではない場合は0を出力して下さい。
という文も入れていたのですが、返信に1
が含まれていなければ、何かしらの理由で日本語の会話の一部ではないと判断したのだろうということで0
を返信してもらう必要はないと思ったのと、指示が多いと精度が落ちると思ったのでプロンプトから削除しました。
完成したアプリを使ってDiscordを監視させている動画がこれです。
トークンらしきものをしっかり削除してくれてます。
これを応用すれば酔っている時に調子に乗ってツイートしてしまったツイートも自分が寝ているうちにBotに削除してもらったりすることができますね。
(お酒を飲んだらツイッターは触らないようにしましょう。)
リポジトリ
こちらに作成したコードを置いておくのでよかったら試してみて下さい。
プロンプト次第な気もしますが、たまにスルーしてしまうこともあるので
AIを使用せず、サーバー内で使用できるテキストのルールを決めて、それに反するメッセージは自動で削除する方がいいのかもしれないなーと思ったりもしました。
AIなし版
ということで作りましたのでもしよかったらこちらも試してみて下さい。
告知
そういえば、「今北産業」って送信すると直近の会話を3行で要約してくれるサービス(無料です)も作りましたのでもしよかったら試してみて下さい。
サーバーレスで頑張ったのにマジで誰も使ってなくて寂しいので使って下さい!!!!!!!