Slack を RAG システムの UI として利用する方法
1. はじめに
株式会社 Hogetic Lab のエンジニア 古川です。
弊社では「データの力で経営を再発明する」をミッションに掲げ、データを活用することで、お客様の課題解決を支援しています。
私は Collectro というデータ収集・分析プラットフォームのプロダクトマネージャ(PdM)として企画・仕様検討を主に担当しています。
今回は Slack を RAG システムの検索・問い合わせの UI として利用するための方法について紹介します。
2. 背景
生成系 AI 、例えば ChatGPT などのベースとなる大規模言語モデル (Large Language Model : LLM) を利用したチャットボットは、その API が公開された当初から個人や企業によって様々な使い方が試され、実装方法や活用に関する記事も数多く公開されています。
最近では RAG (Retrieval-Augmented Generation) という技術が発展し、AI の学習データに含まれない社内情報を参照して回答に利用できるようになりました。
弊社でも、蓄積したデータを活用して分析や可視化によるインサイトの提供を行うだけでなく、生成系 AI を組み合わせることで新たな価値を創造しようと日々模索しています。
できるだけ迅速に新しいことを試すには、業務で使用しているチャットツールを活用することが有効です。
そこで今回は、多くの企業が利用しているチャットツールである Slack を用いて、LLM や RAG などを組み合わせた「RAGシステム」の UI を構築する手順と実用的な注意点・考慮ポイントを紹介します。
皆さまの業務における新しいチャレンジの参考になれば幸いです。
3. Slack アプリの設定方法
Slack はいくつかの連携方式を提供していますが、今回は最も一般的な Slack アプリを利用する方法を紹介します。
前提条件
- Slack のアカウントを持っており、Slack アプリを作成できる権限があること。
- Slack アプリから接続する連携サーバーが準備できること。(例:Google Cloud の Cloud Functions や Cloud Run、 AWS の Lambda など)
Slack アプリの作成
- Slack アプリのページ にアクセスします。
-
Create New App
をクリックし、From Scratch
を選択します。 -
App Name
には任意のアプリ名を入力し、Development Slack Workspace
は Slack アプリを使用するワークスペースを選択し、Create App
をクリックします。
アプリ作成の画面
Slack アプリは Free プランでも利用できるので、無料で試すことができるのは嬉しいですね。
なお、Slack アプリの作成権限がない場合は、組織内の Slack 管理者に依頼してください。
Slack アプリへの権限の付与
画面左の OAuth & Permissions
を選択、右の Scopes > Bot Token Scopes から、必要な権限を追加します。
チャネルにメンションされたメッセージを取得するためには、以下の権限を追加します。(history は、会話の流れを RAG システムに入力する時に必要になります。)
-
app_mentions:read
:メンションされたメッセージを読み込む。 -
chat:write
:チャネルにメッセージを書き込む。 -
channels:history
:public channelのメッセージ履歴を取得する。 -
groups:history
:private channelのメッセージ履歴を取得する。
1対1の DM に対応する場合は、以下の権限を追加します。
-
im:history
:DMに来たメッセージ履歴を取得する。 -
im:write
:DMにメッセージを書き込む。
複数名の DM に対応する場合は、以下の権限を追加します。
-
mpim:history
: 複数名DMに来たメッセージ履歴を取得する。 -
mpim:write
: 複数名DMにメッセージを書き込む。
権限(Scopes)の設定画面
Slack アプリのワークスペースへのインストール
- 画面左の
Basic Information
を選択、右のInstall App
を実行します。 - scopes で設定した権限を付与することに同意する。
アプリインストール時の同意画面
Bot User OAuth Token と Signing Secret の取得
連携サーバー用に以下の情報を取得します。
-
Bot User OAuth Token
: Slack アプリが Slack にアクセスするためのトークンです。- 画面左の
OAuth & Permissions
を選択、右の OAuth Tokens for Your Workspace で確認できます。
- 画面左の
-
Signing Secret
: サーバー側でアクセス元をチェックするために使用するシークレットです。- 画面左の
Basic Information
を選択、右の App Credentials で確認できます。
- 画面左の
連携サーバーの設定
Slack アプリからのリクエストを受け取るための連携サーバーを用意し、上で取得した Bot User OAuth Token
と Signing Secret
を連携サーバーに設定します。
この時点で、連携サーバーには送信元を検証するための Validating a request を実装する必要があります。
※ サーバーサイドの実装は、言語やフレームワークによって異なるためここでは省略します。 SDK が提供されている場合は簡単に実装できます。
(slack api: SDK support によると、javascript, python, Java については SDK が提供されています。)
連携サーバーで Slack イベントを受信するための設定
Slack アプリで受信したイベントを連携サーバーに送信するために、Event Subscriptions
を有効にします。
- 画面左の
Event Subscriptions
を選択、右の Enable Events を On にします。 - Request URLに
連携サーバーのエンドポイント(通知を受け付ける URL)
を入力し、Verified と表示されたら疎通確認完了です。 - Subscribe to bot events に
app_mention
、(DMに対応する場合はmessage.im
も) を追加し、画面下の「Save Changes」 ボタンを押します。
Event Subscriptions の設定画面
Slack アプリをチャネルに追加
- Slack アプリをチャネルに追加します。(メンバー追加と同じ場所から追加できます。)
チャネルへの追加画面 - Slack アプリがメンションされるとイベントが発生し、連携サーバーにリクエストが送信されます。
※ ChatGPT 等の LLM システム と接続するには、Slack アプリからのリクエストを受け取るサーバーに、リクエストを処理する処理を実装する必要があります。
4. 注意・考慮すべきポイント
Slack アプリを RAG システムの UI として利用する際の注意点や考慮すべきポイントをまとめます。
- メンションに対してスレッドで返信するように実装することで、会話が見やすくなります。
- スレッド内での会話へのメンション時に、スレッド内のメッセージを取得することで、 LLM が会話の流れを把握して回答を生成することができます。(history の権限が必要です。)
- サーバーが受信するメッセージにはメンションの文字列が含まれているので、それを削除して RAG システムに渡すことをお勧めします。(回答の精度に影響することがあります。)
- Slack からの通知に 3 秒以内に応答しないと最大3回リトライが発生します。リトライ時はヘッダーに
X-Slack-Retry-Num
が付与されるので、その値をチェックしてハンドリングすることが必要です。 - RAG システムの応答が遅い場合の UX を改善するために、Slack からの通知に対して一旦応答し、その後、RAG システムからの回答で投稿を上書きするなどの工夫が必要です。
- DM で使えるようにするためには、画面左の
App Home
を選択し、 右の Show Tabs > Messages Tab で、Allow users to send Slash commands and messages from the messages tab
にチェックをいれる必要があります。
Slack アプリと ChatGPT を連携した時の画面
5. まとめ
今回は Slack を RAG システムの検索・問い合わせの UI として利用するための方法について紹介しました。連携サーバーでの実装コードについては、たくさんの記事があるので、ご自分の環境や使用予定の言語で調べてみてください。
今後は、Slack 以外のチャットツールの使い方も記事にしていきたいと考えています。お楽しみに。
※ データ分析や AI 活用に関するご相談は、以下よりお気軽にお問い合わせください。
お問い合わせフォーム
Discussion