見出し画像

GPT-4o API で遊ぶ Discord Bot


はじめに

GPT-4o はOpenAIのSpring Updateで公開されたOpenAI現状のフラグシップモデルです

リアルタイムの音声処理や動画処理も今後来るようで、大変楽しみですねー👀✨

そんなGPT-4oのAPIが公開されたので、いつものようにDiscord Botに組み込んでみました

ちなみに以下は類似シリーズ(?)

実装方法とか結果

正直なところ、OpenAIのまにある参照で終わってしまう話なのですが
それだとNoteとして寂しい(?)ので順を追って記載してみます

まずまにあるは以下

OpenAI Python Libraryのアップデート

gpt-4o使用のために確かアップデートが必要だった気がするので
未実施の場合はしておきます、以下の感じ

pip install --upgrade openai

APIは取得済み、あるいはマニュアル参照して取得って感じで次に進みます

実装

過去Noteと共通点も多いのですが、以下の感じにしました

import discord
import os

### for OpenAI
from openai import OpenAI
client = OpenAI()


### discord initial
intents = discord.Intents.default()
intents.message_content = True
discord = discord.Client(intents=intents)

def split_text(text, chunk_size=1500):
  # テキスト文字列をchunk_sizeで指定した大きさに分割し、リストに格納する
  return [text[i:i+chunk_size] for i in range(0, len(text), chunk_size)]

@discord.event
async def on_ready():
  print(f'We have logged in as {discord.user}')

input_text = ""
old_answer_text = ""

@discord.event
async def on_message(message):
  global input_text,old_answer_text
  if message.author == discord.user:
    return
  if message.author.bot == True:
    return

  await message.channel.send("---")
  old_input_text = input_text
  input_text = message.content

  ### for OpenAI
  answer = client.chat.completions.create(
    model="gpt-4o",
    messages=[
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": old_input_text},
      {"role": "assistant", "content": old_answer_text},
      {"role": "user", "content": input_text}
    ]
  )
  splitted_text = split_text(answer.choices[0].message.content)

  for chunk in splitted_text:
    await message.channel.send(chunk)

  ### for OpenAI
  old_answer_text = answer.choices[0].message.content

discord.run(os.environ['BOT_KEY'])

OpenAIの記述に関連するところは「### for OpenAI」の箇所で、

### for OpenAI
from openai import OpenAI
client = OpenAI()

  ### for OpenAI
  answer = client.chat.completions.create(
    model="gpt-4o",
    messages=[
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": old_input_text},
      {"role": "assistant", "content": old_answer_text},
      {"role": "user", "content": input_text}
    ]
  )
  splitted_text = split_text(answer.choices[0].message.content)

  ### for OpenAI
  old_answer_text = answer.choices[0].message.content

な部分です

API Keyの指定が記述に無いのはマニュアルの推奨設定である
環境変数OPENAI_API_KEY へ設定しているためです


まにある こんな感じ

結果

出来ました✨

GPT-4o エリちゃん

この結果だとGPT-4oの凄さは全く伝わりませんが、、
早いし賢いしいい感じです👀✨

早く残りのアップデートもこないかなあ、待ち遠しい。。


いいなと思ったら応援しよう!