見出し画像

Gemini API で遊ぶ Discord Bot


はじめに

Google I/O 2024で発表されたGemini flashがなかなか好みな感じだったのでDiscord Botに組み込んでみることにしました✨

ちなみに以下は順調に増えている(?)類似シリーズ

Gemini APIについて

Gemini APIは最新(1.5)でいうと、現在2種類公開されています
現時点では無料なのですが、今後を踏まえた価格は以下の感じです

Gemini Pro
Pro価格


Gemini Flash
Flash価格

コンテキストキャッシュの機能も気になるところなのですが、
まだ公開されていないので
ひとまずはコスパが良い感じそうなGeminiFlashを試すことにしました👀✨

128K以下だとClaude3 Haikuと比べてもいい感じですし、
1Mトークンいけちゃうのも良いですねー!

Claude3さん

実装方法とか結果

GeminiAPIのクイックスタートガイドを見るとだいたいOKではありますが
せっかくなので順に書いてみます

環境インストール

APIキーの取得や設定はスタート参照ということで省略します
次に、GeminiAPIの環境設定をしていない場合はインストールします
以下の感じ

pip install -q -U google-generativeai

実装

相変わらず過去Noteとの共通点が多いのですが、以下の感じにしました

import discord
import os

import google.generativeai as genai
genai.configure(api_key=os.environ["GOOGLE_API_KEY"])
model = genai.GenerativeModel('gemini-1.5-flash-latest')
chat = model.start_chat(history=[])

### 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}')


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

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

  answer = chat.send_message(input_text)

  splitted_text = split_text(answer.text)
  for chunk in splitted_text:
    await message.channel.send(chunk)

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

Gemini APIに関連するところは

import google.generativeai as genai
genai.configure(api_key=os.environ["GOOGLE_API_KEY"])
model = genai.GenerativeModel('gemini-1.5-flash-latest')
chat = model.start_chat(history=[])


  answer = chat.send_message(input_text)

  splitted_text = split_text(answer.text)

の部分です
なんだか珍しくすっきりしたコード…!!👀✨

テキスト応答のAPIコードではなく、
チャット応答のAPIコードの方を使用しています
これにより過去の会話を覚えておく実装が簡単にできます

APIキーは環境変数の GOOGLE_API_KEYとして設定しています

結果

できました!!!✨

反応は超早いです❣
Cohere command R+やGPT-4oも早かったですが
体感だとGemini Flashのほうが早い気もします
(ちゃんと計測はしていないです)

応答内容については正直期待半分だったのですが
いい意味で裏切られたというか、なかなか良い感じです👀

コスパ、速度、応答内容のトータルバランス的に、
現在もっともお気に入りかもしれないです

システムプロンプトみたいな設定方法はまだ見つけられてないのですが、
どこかにあるのかなあ、気になるところですね

備考:コンテキストキャッシュ機能

近日公開かつGemini Flashでは使用できないみたいなのですが
コンテキストキャッシュ機能も気になるところです

公式ドキュメント抜粋は以下の感じ

大規模かつ高頻度なシステム向けの印象もありますねー
公開されたら使ってみたいなあ


この記事が気に入ったらサポートをしてみませんか?