📚
Geminiを活用した会話BOTを作成した記録
はじめに
生成AIを活用したアプリケーションの作成を行ってみたいと思い、
今回はDiscord で Gemini API を利用して、複数人が一緒に自然な対話を続けられる AI Bot を作成しました。
Geminiの早い応答、簡単なAPIと、Discordの実装性の高さは、チャットBotとしてとても相性が良く、実用的なプロダクトとなりました。
使用技術
- Python
- DiscordAPI
- Google Gemini API (gemini-2.5-flash-preview-04-17)
- Railway
実装手順
ステップ 1: 最低限ボット
@bot.tree.command(name="chat", description="Geminiと会話します")
async def chat_command(interaction: discord.Interaction, *, message: str):
await interaction.response.defer(thinking=True)
response = model.generate_content(contents=[{"role": "user", "parts": [message]}])
await interaction.followup.send(response.text.strip())
ステップ 2: エラー対処
-
generate_content(message=...)
の誤用 →contents=
に修正 -
run_in_executor
で同期APIを非同期で実行
loop = asyncio.get_running_loop()
response = await loop.run_in_executor(None, lambda: model.generate_content(contents=history))
ステップ 3: 履歴保持
chat_sessions[channel_id] = {
"history": [
{"role": "user", "parts": ["<@user>: メッセージ"]},
{"role": "model", "parts": ["応答"]},
],
"last_active": time.time()
}
ステップ 4: 自然な対話の実現
-
@Bot
メンション時にも対応 -
/chat
と同じ履歴を使用 - 表示を「> 発言\n↓ 応答」の形式に
ステップ 5: 運用対応
-
/clear
で履歴削除 - 1時間以上未使用のセッションを自動削除
- MR編集、マージ完了
-
v1.0.0
としてGit tag
実装機能
コマンド | 内容 |
---|---|
/chat |
Geminiと履歴付きで対話 |
@Bot |
自然なやり取りに反応 |
/clear |
チャンネル単位の履歴削除 |
今後の拡張アイデア
-
/log
で履歴表示 -
/session
で状態確認 - Gemini Pro対応 / 翻訳Botとしての展開
- モデル切り替え / スレッド応答
おわりに
このプロジェクトは、「誰かが言ったことをAIが文脈を認識しながら返信する」ことを目指して実装しました。
Geminiも DiscordもAPIの実装性が高く、それぞれに適した対応を組み合わせるだけで、実用的で使いやすいボットが完成しました。
最後まで読んでいただきありがとうございました!
改善点やアドバイス等ありましたら、ぜひコメントください 🙌
Discussion