Slack Bot開発入門【第3回】Geminiを搭載したチャットボットの作成

## シリーズ紹介
この記事は、 **Slack Bot開発入門シリーズ（全3回）** の第3回です。Slackのソケットモードを活用し、Google Colabを使って手軽にBotを開発する方法をステップごとに解説します。シリーズの各回の内容は以下の通りです。

- **第1回:** [ソケットモード対応のSlackアプリの作成と基本設定](https://qiita.com/sprout/items/dc52001e971cb00fbb25)
- **第2回:** [Google Colabを使ったおうむ返しBotの実装方法](https://qiita.com/sprout/items/83823f3bc51e69f3f244)
- **第3回:** Geminiを搭載したチャットボットの作成（本記事）

第3回では、Slack BotにGoogleのAIモデル **Gemini** を搭載する方法を解説します。

---

## 前提条件
この記事を進める前に、以下が準備できていることを確認してください。

- **第2回のコードが完成していること**
- **Gemini APIキーが発行されていること**
- **Googleアカウントを持っていること**  
  （Google Colabを使用するため）

---

## 1. Google ColabでGemini APIの設定

### 1.1 Gemini APIキーの追加
Gemini APIキーをGoogle Colabのシークレットに追加します。

1. 左サイドメニューの **「鍵アイコン（シークレット）」** を開き、 **「Gemini API キー」** をクリックします
![スクリーンショット 2025-02-01 16.53.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/f765a4b9-8b71-263a-0b9e-9b4594131844.png)
2. **「AI Studioからインポート」** をクリックします
![スクリーンショット 2025-02-01 16.55.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/04e167a9-f2e4-d57e-631c-1a458df64436.png)
3. あらかじめ発行したキーを選択し、 **「インポート」** をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/d75782ec-dcc8-d5e4-819d-0a92b89523b3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/cb8c7292-1973-f2e0-501d-d1323969c66d.png)

### 1.2 Geminiの動作確認
`!pip install slack_bolt`のコードセルの下にコードセルを追加し、以下のコードを記載し、Geminiの動作を確認します。

```python
import google.generativeai as genai
from google.colab import userdata

# Gemini APIの設定
genai.configure(api_key=userdata.get("GOOGLE_API_KEY"))

# Geminiモデルの初期化
model = genai.GenerativeModel("gemini-1.5-flash")

# テストメッセージで動作確認
response = model.generate_content("Geminiについて教えてください。")
print(response.text)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/944efaa9-03a3-6dc4-ad5f-b40c8d86f8c4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/708dcf04-0860-b2e0-6c35-676f4af0bd3a.png)

実行すると、Geminiからの回答が出力されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/10ecf6a7-42d3-b2c5-bd60-3982e1b33f65.png)

---

## 2. Slack BotへのGemini統合

### 2.1 コードの修正
Geminiの動作確認ができたら、Slack Botのコードに統合します。まず、 **1.2** のコードから以下の部分を削除します。

```python
response = model.generate_content("Geminiについて教えてください。")
print(response.text)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/18be1952-ff85-3ff3-ea74-051c904c797e.png)

次に、ユーザーのメッセージをそのまま返すのではなく、Geminiが応答するようにコードを修正します。

```python
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler

app = App(token=userdata.get("SLACK_BOT_TOKEN"))

@app.event("app_mention")
def echo_message(event, say):
    response = model.generate_content(event["text"])
    say(response.text)

if __name__ == "__main__":
    SocketModeHandler(app, userdata.get("SLACK_APP_TOKEN")).start()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/fa964935-3281-a558-d27c-06aef96a8ce8.png)

---

## 3. 動作確認

### 3.1 Botの起動
コードを実行してBotを起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/ff9684e6-e1c9-35b4-3220-6193517dd2be.png)

### 3.2 Slackでの動作確認

1. SlackでBotが参加しているチャンネルにメンションします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/b36039b3-3f60-21df-43fb-17124f50f2eb.png)
2. Geminiが生成した応答が返ってくることを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/60f891f3-f40a-340f-80b0-078a4368f272.png)

---

## おわりに
これでGoogle Colabを利用したGemini搭載のSlack Botが完成しました。
次回以降、さらに以下の機能を実装していきたいと考えています。

- **会話履歴を保持する機能**: ユーザーとのやり取りの履歴を保存し、文脈に応じた自然な会話を実現します
- **RAG（取得拡張生成）**: 外部の情報を検索して、LLMに回答を生成させることで、生成AIの精度を高めます