📚

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