この記事では、以下のようなAIアプリ開発ツール「Dify(ディファイ)」を用いた、Slackで利用できるAIチャットボットの構築方法を解説します。
弊社Walkersでは、“AIトレンドに乗り遅れたくないけど、具体的な活用法が見えない…”を解決するAI導入支援を行っています。補助金により1/3のコストで導入可能なので、ぜひAI活用にお悩みがある方はお気軽にご相談下さい。⇒AI導入支援サービスの概要はこちら
執筆者:山口 鳳汰
ノーコード・AI開発会社「Walkers」のCMO。
AIサービス「Prompt Lab」運営。
その他、受託開発や教育など多数のAI事業に参画している。
運営会社:株式会社Walkers
ノーコード・AI専門の開発会社。
300件以上の開発/制作実績、200件以上の企業様を支援。
マーケティングやUI/UXと掛け合わせたサービス開発を得意としている。
執筆者:山口 鳳汰
ノーコード・AI開発会社「Walkers」のCMO。
AIサービス「Prompt Lab」運営。
運営会社:株式会社Walkers
ノーコード・AI専門の開発会社。
これまでに300件以上の開発/制作実績、200件以上の企業様を支援。
Dify(ディファイ)とは?
Dify(ディファイ)とは「AI言語モデルを用いてチャットボットなどの独自アプリを開発することができるオープンソースのツール」です。
このツールを使うことで、プログラミングなど専門知識がなくても簡単に高性能なアプリを作成することができます。
「チャットボット」といわれると、企業のホームページなどに配置されている「お問い合わせ対応を行うチャットボット」を連想される方が多いと思われますが、
Difyでは、お問い合わせ対応以外にも複雑な処理を行うチャットボットを簡単に開発できます。
Difyには無料プランも用意されているため、「簡単な業務をAIで効率化したいが、本当にできるか不安」という方でも安心して利用することができます。
»関連記事:Dify(ディファイ)とは?事例や使い方、商用利用まで完全解説!
SlackBotの開発方法
ログインなどの面倒な操作を行わずに「ChatGPT」などの生成AIを利用したい。
社内でのみ使用できるAIチャットボットを構築したい。
このようなお悩みを抱えている方は多くいるのではないでしょうか。
この記事では、「社内のSlackにAIチャットボットを導入する方法」を解説します。
社内のSlackにAIチャットボットを導入することによって、AIへの質問をより手軽に行うことができるほか、業務外での利用を防ぐことが可能になります。
【手順①】Difyを構築する
生成AIへのメッセージ送信や、AIからの回答を発行する作業をDifyを用いて行います。
「GitHub」または「Google」アカウントを用いてDifyではアカウントを作成します。
手順や複雑さに違いはないため、普段よく使用するアカウントを選んで作成しましょう。
画面の指示に従い「GitHub」または「Google」アカウントでログインを行えば、Difyアカウントの作成は完了です。
アカウント作成またはログインが完了すると、Difyのトップページに移動します。
この画面右上に表示されている「自身のアカウント名」をクリックし、表示されるメニューから「設定」を選択します。
「モデルプロパイダー」を選択し、LLMの設定画面に移動します。
ChatGPTとClaudeに関しては標準でモデルの組み込みが行われているため、この2つのLLMのどちらかを使用してDifyを利用する場合には、
ChatGPTの場合は、OpenAIタブの横にある「API-KEYセットアップ」
Claudeの場合は、ANTHROPICタブの横にある「API-KEYセットアップ」
をクリックして、APIキーのセットアップ画面を表示します。
表示された画面にそれぞれのAPIキーを入力すると接続が完了し、Difyで使用できるようになります。
※ChatGPTの利用に限り、API接続を行わなくても一定回数無料で使用することが可能です。
ステップ2と同様に、「モデルプロパイダー」を選択しLLMの設定画面に移動します。
この画面の下に表示されている、「モデルプロパイダを追加」から、使用したいLLMを探し、カーソルを合わせます。
カーソルを合わせると「モデルを追加」または「セットアップ」という表示が現れるため、そちらをクリックします。
表示された画面の指示に従い、モデルタイプの選択やAPIキーなどの求められた情報を入力すると接続が完了し、Difyで使用できるようになります。
※この設定は必須ではありません。特定のLLMをDifyで使用したい場合のみ設定を行なってください。
LLMの接続を行ったらホーム画面に移動し、「アプリを最初から作成」というボタンを選択します。
表示される画面で以下のように設定を行い、「作成する」ボタンをクリックします。
アプリタイプ:チャットボット
オーケストレーション:Chatflow
アプリアイコン:任意のものを選択
アプリ名:任意の名前を入力
今回は「AIに質問文を送付して、それに対する回答を得る」という簡単な処理のみ行うSlackBotを作成するため、Difyでのアプリ作成時に標準で構築されている機能をそのまま利用します。
特に編集を行うことなく、画面右上に表示されている「公開する」というボタンからアプリの公開を行いましょう。
※特定の情報からのみ返答を行なって欲しい場合や、画像の生成などを行うSlackBotを作成したい場合には、この画面でDifyの構築を行う必要があります。
サイドメニューから「APIアクセス」を選択し、APIの管理画面に移動します。
移動後の画面で、右上に表示されている「APIキー」をいうボタンをクリックします。
「新しいシークレットキーを作成」というボタンをクリックし、APIキーを取得します。
ここで取得したAPIキーは後ほど使用するため、必ず控えておきましょう。
【手順②】SlackBotを作成する
URL:https://api.slack.com/apps
ブラウザ上でSlackにログインしていない場合は、その場でログインが求められます。
SlackBotを追加したいワークスペースにログインをしてください。
「Create an App」をクリックして、アプリの作成画面に移動します。
「From scratch」を選択します。
「アプリ名の入力」と「作成するアプリを追加するワークスペースの選択」を行います。
サイドメニューから「OAuth & Permissions」を選択します。
選択後に表示される画面で、下の方にスクロールし「Scopes」の設定項目まで移動します。
「Add an OAuth Scope」を選択し、表示されるメニューの中から以下の権限を付与します。
・app_mentions:read
・channels:read
・chat:write
サイドメニューから「App Home」を選択し、App Display Nameの編集ボタンをクリックします。
表示される画面で、アプリの表示名やユーザー名を入力します。
サイドメニューから「Install App」を選択し、「Install to (ワークスペース名)」をクリックします。
アプリのインストール後に表示される画面に、「Bot User OAuth Token」という項目が表示されます。
トークンは後ほど使用するため、必ず控えておきましょう。
スラックを起動し、アプリを追加したいチャンネルに移動します。
チャンネル設定を開き、インテグレーションの項目から「アプリを追加する」をクリックします。
表示されるアプリ一覧から作成したアプリを選択し、チャンネルに追加します。
【手順③】AWS Lambdaの設定を行う
今回はより簡単・手軽にSlackBotを開発するため、AWS Lambdaの「関数URL」という機能を使用します。
「無料で開始する」または「今すぐ無料サインアップ」というボタンをクリックし、会員登録を行います。
会員登録を行う中でメールアドレスや電話番号の認証、クレジットカード情報の登録が必要となります。
スマートフォンやクレジットカードを手元に用意した状態で、アカウントを作成しましょう。
既にアカウントを保有している方は、ログインを行なってください。
会員登録やログインを行うと、AWSのトップページに移動します。
トップページ上部に表示されている検索バーに「Lambda」と入力して、「Lambda」のサービスページに移動します。
「関数の作成」というボタンをクリックして関数を作成します。
「関数名」を入力します。
外部に公開されることはないため、自身が管理しやすい名前で設定することをお勧めします。
関数名の入力を終えたら、画面を下にスクロールします。
「詳細設定」を選択し、「関数URLを有効化」というボタンにチェックを入れます。
また、「認証タイプの選択」をあわせて行います。
ここでは簡単にアプリを構築するために認証タイプを「NONE」としていますが、不正アクセス等防止の観点からは「AWS_IAM」を選択されることをお勧めします。
「関数名」「関数URL」「認証タイプ」の3つの設定を終えたら、「関数の作成」というボタンをクリックして関数を作成します。
関数の作成を終えたら、Lambdaの詳細画面に切り替わります。
この画面を下にスクロールし、「コード」という機能の編集画面まで移動します。
正しくLambda関数が動くことを確認するために既存のコードを以下のものに差し替えて、「Deploy」ボタンをクリックします。
export const handler = async (event) => {
const body = JSON.parse(event.body);
if (body && body.challenge) {
return {
statusCode: 200,
body: JSON.stringify({ challenge: body.challenge }),
};
}
return {
statusCode: 400,
body: JSON.stringify('Invalid request'),
};
};
コードの編集画面から一番上までスクロールし、「関数URL」を取得します。
取得したURLは後ほど使用するため、必ず控えておきましょう。
【手順④】SlackとLambdaを紐づける
Slack apiのサイトに戻り、サイドバーから「Slack Event Subscriptions」を選択します。
「Enable Events」という機能をオンに切り替えて、Request URLの入力欄に先ほど取得した「Lambdaの関数URL」を入力します。
入力後「Verified」と表示されれば、関数URLの設定が正常に行えています。
Request URLの入力欄の下に表示されている「Subscribe to bot events」というタブを開き、「app_mention」という権限を付与します。
この権限付与の操作を行うことによって、SlackBotのメンションが含まれるメッセージのみLLMにテキストデータを送付して回答を求めることが可能になります。
設定を終えたら「Save Changes」をクリックして保存します。
【手順⑤】AWS Lambdaの設定を完了する
AWS Lambdaの関数編集画面に戻り、動作確認用のコードを以下のものに差し替え、Deployします。
import https from 'https';
const hasSlackRetryHeader = (event) => {
const headers = event.headers || {};
return headers['x-slack-retry-num'] !== undefined;
};
const sendRequest = (hostname, path, postData, token) => {
return new Promise((resolve, reject) => {
const req = https.request({
hostname, path, method: 'POST',
headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }
}, res => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => resolve(JSON.parse(data)));
});
req.on('error', reject);
req.write(JSON.stringify(postData));
req.end();
});
};
export const handler = async (event) => {
if (hasSlackRetryHeader(event)) {
return { statusCode: 200, body: 'Retry event ignored' };
}
try {
const { text, channel, thread_ts, user } = JSON.parse(event.body).event;
const difyResponse = await sendRequest('api.dify.ai', '/v1/chat-messages', {
query: text, response_mode: 'blocking', user, inputs: {}
}, process.env.DIFY_API_KEY);
await sendRequest('slack.com', '/api/chat.postMessage', {
channel, text: difyResponse.answer, thread_ts
}, process.env.SLACK_TOKEN);
return { statusCode: 200, body: 'Message sent successfully' };
} catch (error) {
console.error('Error occurred:', error.message);
return { statusCode: 500, body: 'Internal Server Error' };
}
};
※コードは一例です。必要に応じて編集を行なってください。
設定タブから「環境変数」を選択し、表示された画面で「編集」ボタンをクリックします。
表示された画面に、以下を参考に環境変数を入力します。
キー | 値 |
---|---|
DIFY_API_KEY | DifyのAPIキーを入力 |
SLACK_TOKEN | Slackのトークンを入力 |
入力を終えたら、設定はすべて完了です。
【手順⑥】テストを行う
作成したアプリを追加したチャンネルで、アプリをメンションした状態でAIに確認したい内容を送信します。
送信後、チャットやスレッドに返答が届いたら動作テストは完了です。
このままSlackBotとして利用することができます。
AIからの返答文が長い場合には処理がタイムアウトしてしまい、返答が届かないことがあります。
タイムアウトを防ぐにはLambdaの関数設定画面で「一般設定」を開き、タイムアウトの秒数を変更する必要があります。
デフォルトでは「3秒」となっているため、「5~10秒程度」に変更することをお勧めします。
このタイムアウトの設定を変更してもAIから返答が届かない場合には、もう一度開発手順の確認を行うことをお勧めします。
Difyを用いた「Slackで使用できるAIチャットボット」の構築方法の解説は以上です。この情報がDifyへの理解促進や業務の効率化につながれば嬉しく思います。
弊社Walkersでは、“AIトレンドに乗り遅れたくないけど、具体的な活用法が見えない…”を解決するAI導入支援を行っています。補助金により1/3のコストで導入可能なので、ぜひAI活用にお悩みがある方はお気軽にご相談下さい。