🥹

Youtubeのひどいコメント、ギャルがレスバしてくれるアプリを作った

2024/12/02に公開

この記事は クソアプリ Advent Calendar 2024 2日目の記事です。

「Youtubeのひどいコメント、ギャルにかばってもらえる」
ついつい誹謗中傷されたくなっちゃう夢のようなアプリを作りました。
イメージ

アプリ概要

どんなアプリかを簡単に説明して行きます。
Youtube投稿主が、ひどいコメントをされたとしましょう。
ひどいコメント
ひどいことを言われてしょげて寝れない投稿主のために、ある一件のコメントが届きます。

端的なイメージ

こんなに励まされたら、ぐっすり寝れますね、二度と目覚めることはないかもしれません。
つまり、ひどいコメントを受けた投稿者が、いつでも快適に永眠できるアプリです。

もうちょっと詳細な流れ

もうちょっと詳細に流れを説明していきます

登場人物(アカウント)は、ギャル、投稿者、ひどいコメントするやつの3人です。

1. まずは投稿者が動画を投稿します
動画投稿

2. 次にひどいこと言ってくるやつがコメントします

3. そして深夜三時まで僕が泣きます
なく
4. 深夜三時にギャルがかばって(コメントして)くれます。
僕庇う
深夜三時に自動投稿というところが、今は手動実行で行う必要があります。理想としてはAWS lambda、EventBridgeに任せたいところです。

5. ひどい事言ったやつにもなんか言ってくれます。
ひどい事言ったやつにもなんか言う

技術的な課題と改善

ここからは技術的な話しをしていきます。

ピラニアの如く誰にでも噛み付く、ただのやばいギャルだった話

作って間もない頃は、攻撃的かどうかの判定をせずにコメントさせていたので、全てのコメントにキレ散らかす害悪モンスターと化していました。
そこで、OpenAI APIを活用し、攻撃的かどうかの判定を行ってもらい改善しました。
ここらへんの処理を、なんと OpenAIの検閲用モデルであるModeration API というものを使うことで、攻撃的かどうかをbooleanで返してくれるので驚きました。
ただ結構過激な内容でないと、検知してくれないです。

以下のコードでは、攻撃的かどうかの判定を行い、攻撃的な文章であれば文章の生成を行っています。

main.js

// コメントに対して、ギャル風の文章を生成
async function analyzeCommentAndGenerateReply(topLevelComment) {
    // コメントが攻撃的かどうかを判定する
    const moderationResponse = await openai.moderations.create({
         model:"omni-moderation-latest",
        input: topLevelComment,
    });

    // モデレーションAPIの結果から攻撃性を判定
    const isOffensive = moderationResponse.results[0]?.flagged || false;

    if (!isOffensive) {
        return isOffensive; // 攻撃的ではない場合 falseを返す
    }

    // 攻撃的なコメントに対して返信を生成
    const stream = await openai.chat.completions.create({
        model: "gpt-4o-mini",
        messages: [
            {
                role: "system",
                content:
                    "あなたはギャル風のキャラクターです。誰かが誹謗中傷を受けたとき、その人を元気づけたり、相手を注意したりする文章を優しく、時に強く作成してください。絵文字を適度に使用し、フレンドリーなトーンで書いてください。",
            },
            {
                role: "user",
                content: `以下のコメントを見て、被害者を守る感じでギャル風の文章を作成してください。\n\nコメント: ${topLevelComment}`,
            },
        ],
        stream: true,
    });

    let replyText = ""; // 生成された文章を保持する

    for await (const chunk of stream) {
        const deltaContent = chunk.choices[0]?.delta?.content || "";
        replyText += deltaContent; // 文章を収集
    }

    return replyText; // 最終的な文章を返す
}

できないこと、現状の課題

深夜三時に投稿するという処理が自動化されていないので、そこを改善したいです。

Youtube APIはYoutubeのコンテンツ獲得だけであれば、APIキーだけで十分なのですが、今回はコメントの書き込みも必要だったので、アクセストークンが必要になりました。
Youtubeのアクセストークンの有効期限が、1時間ととても短いので、リフレッシュトークンを使って、アクセストークンを更新していく必要があります。
これはローカル環境だとうまくいったのですが、本番環境では、まだまだ課題があり実装ができませんでした。
なので、現状は、ギャルがコメントするにはローカル環境での手動実行が必要となります。ここを完全自動化できるよう改善していきたいです。

最後に

今は下記の動画で、コメントされるよう作業中です。
https://www.youtube.com/watch?v=DfmDAXxd7TE

なかなか攻撃的なコメントだと判断されなくて、ギャルが動き出さないので困ってます。
ここに攻撃的なコメントしたら、ギャルからの反撃がもらえるかもしれません!

以上です! 進捗あったらYoutubeにあげるかもです
ありがとうございました!

参考

moderation api
https://platform.openai.com/docs/guides/moderation?moderation-quickstart-examples=text

GitHubで編集を提案

Discussion