Gemini API で遊ぶ Discord Bot
はじめに
Google I/O 2024で発表されたGemini flashがなかなか好みな感じだったのでDiscord Botに組み込んでみることにしました✨
ちなみに以下は順調に増えている(?)類似シリーズ
Gemini APIについて
Gemini APIは最新(1.5)でいうと、現在2種類公開されています
現時点では無料なのですが、今後を踏まえた価格は以下の感じです
コンテキストキャッシュの機能も気になるところなのですが、
まだ公開されていないので
ひとまずはコスパが良い感じそうなGeminiFlashを試すことにしました👀✨
128K以下だとClaude3 Haikuと比べてもいい感じですし、
1Mトークンいけちゃうのも良いですねー!
実装方法とか結果
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では使用できないみたいなのですが
コンテキストキャッシュ機能も気になるところです
公式ドキュメント抜粋は以下の感じ
大規模かつ高頻度なシステム向けの印象もありますねー
公開されたら使ってみたいなあ
この記事が気に入ったらサポートをしてみませんか?