1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

闇のプログラミングAdvent Calendar 2023

Day 19

AIカートコバーン

Last updated at Posted at 2023-12-18

カートコバーンとは

  • 過剰に崇拝されてるメンヘラ自殺おじさんのこと

カート・コバーン(1967-1994)は、米国のミュージシャンで、ニルヴァーナのリーダー。感受性豊かなソングライティングと荒々しい演奏で90年代のオルタナ・ロックを牽引。苦悩と成功を背負い、自らの人生に絶えず問いかけ、音楽シーンに深い影響を与えた。

GPTでカートコバーンを再現する

  • secretは各自発行してexport gpt_api_key=XXXXするように
ai_kart.py
def ai_create_tweet():
    api_key = os.environ.get('gpt_api_key')
    client = OpenAI(api_key=api_key)
    response = client.chat.completions.create(model="gpt-3.5-turbo",
                                              messages=[
                                                  {"role": "system",
                                                    "content": "あなたは伝説のロックスターカートコバーン。日本に生まれ変わった。洋ドラの翻訳っぽく言って。当事者っぽく言って。乱暴に言って。"},
                                                  {"role": "user",
                                                   "content": "新譜「nevermind pt2」について一言コメントをください。140文字以下にまとめてください。"}
                                              ])
    return response


response = ai_create_tweet()
print(response)

### 発言だけ取り出す
content = response.choices[0].message.content
print(content)

結果

ロックの真髄を絶妙なバランスで表現したサウンド。力強さと繊細さの融合。真のファンに捧げる続編。最高! #nevermindpt2 #legendaryrock

  • あまりにもゴミ

ゴミを発信する

  •  ツイートする
ai_kart.py
import os
from openai import OpenAI
from pprint import pprint
import configparser
import tweepy


def auth_api_v2(envName):
    config = configparser.ConfigParser(interpolation=None)
    config.read('ai_kart.ini')
    consumer_key = config.get(envName, 'consumer_key')
    consumer_secret = config.get(envName, 'consumer_secret')
    access_key = config.get(envName, 'access_key')
    access_secret = config.get(envName, 'access_secret')
    bearer_token = config.get(envName, 'bearer_token')
    client = tweepy.Client(bearer_token=bearer_token,
                           consumer_key=consumer_key,
                           consumer_secret=consumer_secret,
                           access_token=access_key,
                           access_token_secret=access_secret)
    return client
response = ai_create_tweet()
print(response)

# 発言だけ取り出す
content = response.choices[0].message.content
print(content)

# ツイート
client = auth_api_v2('ai_kart')
post_tweet = client.create_tweet(text=content)
print(post_tweet)

自動でゴミを発信する

  • github actionで自動化する
  • iniファイルはcat hoge.ini|base64したのをsecretに入れる
name: ai_kart
on:
  schedule:
    - cron: "0,30 * * * *"
  workflow_dispatch:

jobs:
  okera:
    name: ai_kart
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read

    defaults:
      run:
        shell: bash
        working-directory: ./

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v4

      - name: twitter key decode
        env:
          JSON_DECODE: ${{ secrets.AI_KART_INI }}

        run: |
          echo -n $JSON_DECODE | base64 --decode > ./ai_kart.ini

      - name: pip install
        run: pip install -r ai_kart_requirements.txt

      - name: schedule_evil_tweet
        if: github.event_name != 'workflow_dispatch'
        run: |
          python ai_kert.py
        env:
          gpt_api_key: ${{ secrets.GPT_API_KEY }}

      - name: workflow_dispatch_evil_tweet
        if: github.event_name == 'workflow_dispatch'
        id: workflow_dispatch_evil_tweet
        run: |
          python ai_kert.py
        env:
          gpt_api_key: ${{ secrets.GPT_API_KEY }}

結果

  • ファンの人から怒られそう
    • AI生成した画像添付したい
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?