0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SlackからLLMを呼んでみた、要約させてみた

Last updated at Posted at 2025-05-02

SlackからLLMを呼んでみた、要約させてみた

Vertex AI Gemini を利用して Slack スレッドを自動要約する Bot です。スレッド内で「@bot 要約」または「@bot summarize」と入力することで、AIがスレッドの内容を要約します。
slackからアプリの連携を試してみたくて作成してみました。

機能

  • slackからLLMの呼び出し
  • スレッド内の会話を自動要約

git

目次

  1. システム要件
  2. インストール方法
  3. 設定
  4. 使用方法
  5. ファイル構成
  6. カスタマイズ
  7. トラブルシューティング
  8. ライセンス

システム要件

  • 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 の設定

  1. GCP コンソールで「APIとサービス」→「ライブラリ」に移動し、Vertex AI API を有効化
  2. サービスアカウントを作成し、以下の役割を付与:
    • Vertex AI ユーザー (roles/aiplatform.user)
    • Vertex AI サービス エージェント (roles/aiplatform.serviceAgent)
  3. サービスアカウントのキーを JSON 形式でダウンロードし、credentials ディレクトリに配置

2. Slack アプリの設定

  1. Slack API にアクセスし、「Create New App」をクリック
  2. App Name(例: ThreadSummarizerBot)を入力
  3. 開発するワークスペースを選択
  4. 「OAuth & Permissions」で以下の権限(スコープ)を追加:
    • app_mentions:read - ボットのメンションを検知
    • channels:history - チャンネルのメッセージ履歴を読み取る
    • groups:history - プライベートチャンネルの履歴を読み取る
    • chat:write - メッセージを送信
  5. 「Event Subscriptions」を有効化し、Request URL を設定(サーバーの URL: https://your-server-ip/
  6. 「Subscribe to bot events」で app_mention イベントを追加
  7. アプリをワークスペースにインストールし、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

使用方法

  1. ボットをチャンネルに招待:

    /invite @your_bot_name
    
  2. LLMに呼びかける

    @your_bot_name こんにちは
    
  3. スレッド内でボットを呼び出して要約を依頼:

    @your_bot_name 要約
    

    または

    @your_bot_name summarize
    
  4. ボットが「スレッドを要約しています...」と返信し、その後要約を表示します

ファイル構成

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をご確認ください。:

  1. slack_utils.py: Slack API との連携を処理
  2. vertex_ai_utils.py: Vertex AI との連携を管理
  3. app.py: イベントを処理するメインFlaskアプリケーション

その他の設定ファイル:

  • .env.example: 環境変数のテンプレート
  • requirements.txt: Python依存関係
  • nginx/slack-summarizer.conf: Nginxウェブサーバー設定
  • systemd/slack-thread-summarizer.service: システムサービス定義

カスタマイズ

要約スタイルの変更

vertex_ai_utils.pygenerate_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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?