SlackからLLMを呼んでみた、要約させてみた
Vertex AI Gemini を利用して Slack スレッドを自動要約する Bot です。スレッド内で「@bot 要約」または「@bot summarize」と入力することで、AIがスレッドの内容を要約します。
slackからアプリの連携を試してみたくて作成してみました。
機能
- slackからLLMの呼び出し
- スレッド内の会話を自動要約
git
目次
システム要件
- Python 3.9+(Debian 12のデフォルト)
- Google Cloud Platform アカウント
- Vertex AI API の有効化
- Slack ワークスペースの管理者権限(またはアプリ作成権限)
- Debian 12 (Bookworm)
インストール方法
1. リポジトリのクローン
# 必要なパッケージをインストール
sudo apt update
sudo apt install -y git python3-pip python3-venv nginx
# リポジトリのクローン
git clone https://github.com/sts1992/slack-app-demo.git
cd slack-app-demo
2. 環境のセットアップ
# 仮想環境の作成とアクティベート
python3 -m venv venv
source venv/bin/activate
# 依存関係のインストール
pip install -r requirements.txt
3. Nginx と SSL の設定(本番環境用)
# 証明書を保存するディレクトリを作成
sudo mkdir -p /etc/nginx/ssl
# 秘密鍵と証明書を生成
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/ssl/nginx.key \
-out /etc/nginx/ssl/nginx.crt
# 重要: プロンプトが表示されたら、Common Name に必ず値を入力してください
# サーバーのドメイン名または IP アドレスを設定します
# Nginx の設定
sudo cp nginx/slack-summarizer.conf /etc/nginx/sites-available/
sudo ln -s /etc/nginx/sites-available/slack-summarizer.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
4. サービスの設定
# サービスファイルをコピー
sudo cp systemd/slack-thread-summarizer.service /etc/systemd/system/
# パスを環境に合わせて編集
sudo vim /etc/systemd/system/slack-thread-summarizer.service
# サービスの有効化と起動
sudo systemctl daemon-reload
sudo systemctl enable slack-thread-summarizer.service
sudo systemctl start slack-thread-summarizer.service
設定
1. Google Cloud の設定
- GCP コンソールで「APIとサービス」→「ライブラリ」に移動し、Vertex AI API を有効化
- サービスアカウントを作成し、以下の役割を付与:
- Vertex AI ユーザー (roles/aiplatform.user)
- Vertex AI サービス エージェント (roles/aiplatform.serviceAgent)
- サービスアカウントのキーを JSON 形式でダウンロードし、
credentials
ディレクトリに配置
2. Slack アプリの設定
- Slack API にアクセスし、「Create New App」をクリック
- App Name(例: ThreadSummarizerBot)を入力
- 開発するワークスペースを選択
- 「OAuth & Permissions」で以下の権限(スコープ)を追加:
-
app_mentions:read
- ボットのメンションを検知 -
channels:history
- チャンネルのメッセージ履歴を読み取る -
groups:history
- プライベートチャンネルの履歴を読み取る -
chat:write
- メッセージを送信
-
- 「Event Subscriptions」を有効化し、Request URL を設定(サーバーの URL:
https://your-server-ip/
) - 「Subscribe to bot events」で
app_mention
イベントを追加 - アプリをワークスペースにインストールし、Bot User OAuth Token を取得
3. 環境変数の設定
.env.example
ファイルを .env
にコピーし、必要な値を設定します:
cp .env.example .env
vim .env
以下の変数を設定してください:
SLACK_VERIFICATION_TOKEN=your_verification_token
SLACK_BOT_TOKEN=your_bot_token
SLACK_CHANNEL_ID=your_channel_id
PORT=8080
GOOGLE_APPLICATION_CREDENTIALS=./credentials/service-account-key.json
VERTEX_AI_PROJECT_ID=your_google_cloud_project_id
VERTEX_AI_LOCATION=us-central1
VERTEX_AI_MODEL_ID=gemini-2.5-pro-preview-03-25
使用方法
-
ボットをチャンネルに招待:
/invite @your_bot_name
-
LLMに呼びかける
@your_bot_name こんにちは
-
スレッド内でボットを呼び出して要約を依頼:
@your_bot_name 要約
または
@your_bot_name summarize
-
ボットが「スレッドを要約しています...」と返信し、その後要約を表示します
ファイル構成
slack-app-demo/
├── app.py # メインアプリケーション
├── slack_utils.py # Slack API 関連機能
├── vertex_ai_utils.py # Vertex AI 関連機能
├── .env.example # 環境変数テンプレート
├── requirements.txt # 依存関係
├── README.md # このファイル
├── credentials/ # 認証情報(.gitignore に追加済み)
│ └── .gitkeep
├── nginx/ # Nginx 設定
│ └── slack-summarizer.conf
└── systemd/ # Systemd サービス設定
└── slack-thread-summarizer.service
アプリケーションコード
アプリケーションは主に3つのPythonファイルで構成されています。詳しくがgitをご確認ください。:
- slack_utils.py: Slack API との連携を処理
- vertex_ai_utils.py: Vertex AI との連携を管理
- app.py: イベントを処理するメインFlaskアプリケーション
その他の設定ファイル:
- .env.example: 環境変数のテンプレート
- requirements.txt: Python依存関係
- nginx/slack-summarizer.conf: Nginxウェブサーバー設定
- systemd/slack-thread-summarizer.service: システムサービス定義
カスタマイズ
要約スタイルの変更
vertex_ai_utils.py
の generate_thread_summary
関数内のシステムプロンプトを変更することで、要約スタイルをカスタマイズできます。
複数の要約スタイルの追加
コマンドに引数を追加して、詳細/簡潔など複数の要約スタイルをサポートするようにカスタマイズすることも可能です。
# 例: app.py の process_llm_response 関数内で処理を追加
if re.search(r'summarize|要約', message.lower()):
# スタイルの検出
is_detailed = re.search(r'detailed|詳細', message.lower()) is not None
is_bullet = re.search(r'bullet|箇条書き', message.lower()) is not None
# システムプロンプトの選択
if is_detailed:
system_prompt = DETAILED_PROMPT
elif is_bullet:
system_prompt = BULLET_PROMPT
else:
system_prompt = DEFAULT_PROMPT
# 残りの処理...
トラブルシューティング
Vertex AI の対応モデルの確認と更新
モデルのバージョンや利用可能性は定期的に変更される
最新の対応モデルを確認して更新すること
現在の設定を確認:
grep VERTEX_AI_MODEL_ID .env
Vertex AI のモデルページで最新の対応モデルを確認
https://cloud.google.com/vertex-ai/generative-ai/docs/models?hl=ja
.env ファイルを更新:
vim .env
サービスを再起動して変更を適用:
sudo systemctl restart slack-thread-summarizer.service
ログの確認
# アプリケーションログ
sudo journalctl -u slack-thread-summarizer.service -f
# Nginx エラーログ
sudo tail -f /var/log/nginx/error.log
あとがき
slackから呼び出せるといろいろ便利そうですよね。
ちなみにほぼclaude先生に作ってもらいました。
ライセンス
MIT