社内情報検索Teamsチャットボットを、Watson Assistant+Watson Discoveryを使ってノーコードで実現


# はじめに： 進化するチャットボット
生成AIが流行している2023年現在、生成AIのみならずAI全般に関する話題は尽きることがないですが、最近は「社内業務でも生成AIを活用していこう」という動きが様々なところから聞こえてきます。

よくある話題の１つとして、**「生成AIを使って業務知識を覚えたチャットボットが作れないか？」** というトピックが挙がります。
確かに、生成AIを使ったチャットボットには以下のようなメリットがあります。
- 質問を１つずつ覚え込ませることなく、良きに計らって未知の質問への回答を生成してくれる
- 他のユースケース向けにファインチューニングしたモデルを流用できる

ところが実際に生成AIを使ってチャットボットを作ってみると、以下のような課題に当たります。
- トークン数の制限により、**あまり多くの業務知識を取り込めない** 
- 生成AIのモデル自体に取り込まれている前提知識に影響され、**予期しない / 誤った回答**が返ってくる
- 回答生成に時間を要すため、**従来型チャットボットに比べて応答時間が大幅に長い**

以上の課題から、特にチャットボットのユースケースにおいては、
- **外部の文書検索エンジンにクエリー**する仕組み
- **RAG** (Retrieval Augmented Generation) の手法を使い、都度外部DBに結果を探しに行く仕組みを作る
などの方法が主流です。

一方で、上記のようなシステムの実装には非常に手間がかかり、外部に実装を依頼する場合には継続的なメンテナンスが行いづらくなる等の課題も発生します。また、ボットの組み込み先として想定されるTeamsやSlackとどのように連携するのか、等の考慮も必要です。

# Watson AssitantのTeams連携対応
最近、IBM社のチャットボットであるWatson Assistantの機能拡張が発表され、Teamsへのチャットボットの組み込みや、文書検索ソリューションであるWatson Discoveryとの連携が強化されました。
これにより、例えば下記の様に社内文書から情報検索を行うボットの構築が簡単にできるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/78612a6f-11d9-349a-701b-2838b9736df4.png)

**手順：**
(0) 事前にTeamsのチャット履歴をWatson Discovery (文書検索エンジン) に取り込んでおく。
(1) Teams上のチャットボットから質問を投げかける。例：「3年目の社員が取得可能な有給休暇の日数は?」
(2) 質問内容がチャットボット (Watson Assistant) に連携され、更に自動でWatson Discoveryの社内文書から検索し、結果が連携される。
(3) Teamsのチャット上で回答が得られる。**例：「このような文書が見つかりました。
『有給休暇は、在籍年数に応じて取得が可能です。・・・在籍1年以上5年未満： 15日・・・』」**

実際に動いているところはこんな感じです。
![Qiita Gif用.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/2deb472e-8109-8322-e4c6-bc0e1ff7a236.gif)

# Teams連携の手順

本記事の手順は全てクラウドサービス上で簡単にトライ可能で、大体2時間~半日もあれば、自分のデータを取り込んでTeams上で動く社内情報検索チャットボットを作ることが可能です。
[IBM社によるガイド](https://cloud.ibm.com/docs/watson-assistant?topic=watson-assistant-deploy-microsoft-teams)もありますが、下記に「人事規則の検索ボット」を例として作成する手順を、画面キャプチャーも入れながら記載しました。

## Teams連携の事前準備

下記が事前に必要となります。 (作業所要時間：30-60分)
- IBM Cloudアカウント作成
    - 手順：[Qiita](https://qiita.com/Topfield/items/d3bdd7f696268a562340)

- Watson Assistantのトライアルプラン作成 (無料: 30日間まで)
    - 手順：[Qiita](https://qiita.com/yanagih/items/b02db00d06de397bec64)

- Watson DiscoveryのPlusプラン作成 (1アカウント1回30日間まで無料)
    - 手順：[Qiita](https://qiita.com/yanagih/items/a55d48892572e2df3383) ("Watson Discovery での事前準備" まで)

- チャットボットを動かしたいTeams環境 (管理者権限付き)
    - デモとして動かすだけであれば、手順3-2で後述するMicrosoft 365 Developerプログラムで取得したMicrosoftアカウントのTeams環境でも可能ですので、現時点でお持ちで無い場合は無視して構いません 


## 手順1: Watson Discoveryのプロジェクト作成・文書を読み込ませる (30-60分)

こちらの[Qiita](https://qiita.com/yanagih/items/a55d48892572e2df3383)の "Watson Discovery での事前準備" までを参考に、Watson Discoveryのプロジェクトを作成し、適当な文書を読み込ませます。
- 今回私は、ダミーで作成した社内人事規則や就業規則のデータを入れてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/52c7b22c-35d3-6381-c774-b46d01439a2b.png)
- Teamsのチャット履歴から元データを取ってくることも可能です。コピペしてtxtファイル/Wordに貼り付けても良いですし、Microsoft社が提供するAPIやエクスポートのページから取得したjsonの利用も可能です。
    - https://privacy.teams.live.com/ui/en/dataexport
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/49d13054-50e2-c64c-d3dc-c5ee1f19ab1c.png)


## 手順2: Watson AssistantとWatson Discoveryの接続 (10-20分)
こちらの[Qiita](https://qiita.com/yanagih/items/a55d48892572e2df3383#watson-assistant-%E3%81%A8%E3%81%AE%E9%80%A3%E6%90%BA) の "Watson Assistant との連携" を参考に、Watson AssistantとWatson Discoveryの接続を行います。

ここまで完了すると、Watson Assistant上で文書検索を行うことができるようになります。


## 手順3： Watson AssistantとTeamsの接続 (30-90分)
ここからは、Watson AssistantのボットをTeams上で使えるようにするための手順を紹介します。
いくつかのMicrosoft社のポータル・サービス上を行き来して設定するため、迷子になりやすいのですが、
Watson Assistantには設定ウィザードが用意されているので、このウィザードに各ポータルで取得した接続情報などを入れながら設定することができます。これにより作業の現在地も分かり、中断した場合などでも比較的安心して作業を再開できます。

### 手順3-1： Watson AssistantでTeams接続の設定ウィザードを開く
事前準備で作成したWatson Assistantの画面にログインし、画面左側にカーソルを持って行くとメニューが出てきます。下側に"Integrations"がありますので、こちらを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/1ff590ec-c3a5-9ef9-18d0-687d5806a58d.png)
"Channels"という項目にTeamsがありますので、こちらの"Add"をクリックしてさらに"Add"を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/e5553bac-71ab-ba9c-91ef-8e184e49f426.png)
- "Get Started"の項目では特に手順がありませんので、"Next"を押します。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/7b360cb4-cc5e-3c73-4874-0a5e1202cbe4.png)
- "App registration"の項目に進みますが、こちらの作業のためにMicrosoft 365 Developerプログラムのアカウントが必要になるので、一旦この画面はそのままにして、別のタブなどを開いて手順3-2に進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/73551ae5-872a-cc3c-cadb-dd049b8f7041.png)

### 手順3-2： Microsoft 365 Developerプログラムアカウントの取得 
注意：本手順でのアカウント作成時、まずは普通のMicrosoftアカウントでのログインが必要です。うまくアクセスできない場合などは、フリーメールアドレスでアカウントを作成しログインしてからアクセスするなどの手順を試してみてください。
- Microsoft Dev Centerにアクセスし、"Join now"をクリックします。
 https://developer.microsoft.com/en-us/microsoft-365/dev-program
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/40fc6d4b-a9ae-b72a-6aac-64e8f38fcc36.png)
- 必要事項を入力していきます。環境選択はどちらでも問題ありませんが、基本は"Instant Sandbox"で問題ありません。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/e2324e60-937c-ff9b-fc9e-4baf5558f3f1.png)
- こんな画面が出れば完了です。発行されたメールアドレスをメモしておきます。(あとでダッシュボードからも戻ってこれます：https://developer.microsoft.com/en-us/microsoft-365/profile)
![qiita1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/487fed04-f5ae-d074-780c-1a2c98bd0a8a.png)

### 手順3-3: アプリケーションの登録 (App registration)
- Watson AssistantのTeamsウィザードに戻ります。
- Azureポータルを開き、手順3-2のアカウントでログインします。https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade
- "アプリケーションの登録"から、"新規登録"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/da7f5431-5fe2-eab1-21d5-07bee1be829d.png)
- 情報を選択・記入したら、"登録"をクリックします。
- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/9995609d-7e20-46b4-dbd5-e4dd2556b251.png)
- 登録後の画面から、アプリケーションIDが確認できるので、コピーします。 (日本語設定の場合は文字が見切れていますが、一番上の項目です)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/806de639-2d23-befa-038c-40bf6d7b7020.png)
- Watson Assistantのウィザードに戻り、アプリケーションIDをペーストする箇所がありますので、こちらに貼り付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/541b2679-03bd-87cf-5c45-451acb0be9e1.png)
- Azureに戻り、"証明書またはシークレットの追加"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/2723cfab-4497-0e7b-ddf0-792b1bba9f3a.png)
- "新しいクライアント シークレット"から、シークレット情報を取得します。デモ用途では有効期限はデフォルトの180日で問題ありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/76fcb58c-fde2-4fd3-1102-43abb238d741.png)
- "値"をコピーして、同様にウィザードに貼り付けます。(シークレットの有効期限をデフォルトから変えている場合は、そちらも変更しておきます)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/794d1ac3-7968-83aa-e10d-a6aae276d868.png)

### 手順3-4: ボットの作成
- Microsoft Bot Framework 開発者ポータルにアクセスし、手順3-2で作成したアカウントでログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/cb2e8ecf-f0ea-20d7-6aa9-f849ab5208d9.png)
- "Tell us about your bot"のページで、必要情報を入力していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/fd9f8c64-c9d5-35a8-3844-d3500b46c8a8.png)
    - 途中、"Configuration"項で"Messaging endpoint"の入力が必要になりますが、こちらはWatson Assistantのウィザードからコピー&ペースト可能です。
    - "App type"は"Multi Tenant"になっていることを確認します。
    - "app ID"も、同様にウィザードからコピー&ペーストします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/27fd301f-1173-fc07-f95a-de079fbc6e5e.png)
- "Register"を押せば登録完了です。登録完了後の"Connect to channels"というページで、"Add a featured channel"という項目があり、Teamsのアイコンがありますのでこちらをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/4b846872-c7c0-2a2b-f39a-7cf785d7fbf6.png)
- 設定画面では、Teamsの種類を選択し、Saveします。(通常はデフォルトのままで良いです)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/a2ac9087-c858-27bd-d9b7-cb78fb97150b.png)
- "Calling"、"Publish"の項目も設定できますが、特に何も無ければそのままで問題ありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/3b2d8140-bbb3-cc55-b429-2273f5736277.png)

### 手順3-5: Teamsアプリの作成
- Microsoft Teams 開発者ポータルにアクセスし、ログインします。
https://dev.teams.microsoft.com/home
- 画面左側のメニューから"Apps"を選択し、"New App"をクリックします。Appの名前を入れて"Add"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/ef27cb0f-63b1-8a2a-0342-1ed916849dce.png)
- 必要情報を入力していきます。
    - "Application (client) ID"は、ウィザードからコピー&ペーストします。
- 情報の入力が完了したら"Save"します。
- 画面左側のメニューから"App features"を選択し、右側の画面から"Bot"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/1f5c8857-630e-e33b-e307-3d05d2370413.png)
- 必要情報を入力していきます。
    - "Identify your bot"の項目では、"Select an exisiting bot"のプルダウンメニューを選択すると、既存のボットが選択できますので、手順2-4で作成したボットを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/f0310a50-0d94-5f6f-0031-901201c10788.png)
    - Select the scopes ~~~" の項目では、全ての項目にチェックを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/9a33f79b-56af-0242-5b4f-1311674d0e64.png)
    - "Save"を押して保存完了です。

- 右上の"Publish"を押して、Teamsに必要なアプリのダウンロードやアプリケーションの登録が可能です。今回は、一旦パッケージをダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/b568e471-dc61-4bf9-1488-3a369b216011.png)

### 手順3-6: Teamsアプリの登録
- お使いの組織のTeamsの管理者権限を持ったアカウントにログインします。
注意：管理者権限がない場合などは、手順3-2で作成しているアカウントでもTeamsの利用が可能です。
- 画面左下の"アプリを管理"をクリックし、"アプリをアップロード"を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/395e50b3-eb4c-b58a-710b-5a7dcb51a937.png)
- 先ほどダウンロードしたパッケージを選択してアップロードします。
![スクリーンショット 2023-08-27 11.48.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/1c814b5a-676c-4701-27d2-17157e56fd0f.png)
- アプリを追加します。
![スクリーンショット 2023-08-27 11.48.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/4574b37a-dcc5-c47d-019c-4376c6557b78.png)

## 手順4:  実際にTeams上から文書検索ボットを使ってみる
- 手順3まで完了すると、TeamsのチャットからWatson Assistantのチャットボットが利用できるようになっており、そのチャットボットから文書検索が行えるようになっています。
- 実際に質問を投げかけてみると、文書検索が実装できていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/80eb66c1-5d31-8c9d-71f3-2e438c58b9a4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172843/93e5fdb2-cbc7-0d22-96bc-0fcee5c07093.png)



# おわりに： この仕組みのポイント
ここまで、Watson Assitant (チャットボット) とWatson Disovery (文書検索) を使って、Teams上から社内情報検索を行うチャットボットの実装を行いました。
実際に設定・構築を行ったり、利用してみると、下記の様なポイントがあることが分かります。
- **誰でもノーコードで短時間で構築できる**：最短1時間~半日程度あれば誰でもTeams連携まで構築でき、コーディング無し + 無料で最新の文書検索ボットの能力を知ることができる (注：一部ライセンスは無料期間の制限あり)
- **継続してカスタム可能**：自分でカスタムすることができ、文書追加などを行うことで自分で継続的にレベルアップできる。よくある質問は自分でチャットボット側に追加して、確度を高めるようなことも可能
- **AIへの業務知識の取り込みが簡単かつ低リスク**：業務知識の取り込みは、文書のアップロードだけで行える。生成AI利用時に懸念されるファインチューニング・プロンプトエンジニアリングの労力や、AIモデルへの機密情報への取り込みリスクも無い

AI関連の技術は玉石混淆で日々発展を遂げていますが、どれだけ高度な技術でも、ユーザーに使ってもらえなければ意味がありません。
今回ご紹介した社内情報検索Teamsチャットボットは、Teamsという身近なインターフェースであり、とりあえずユーザーに使ってもらうという意味で非常にハードルを下げてくれます。
また、開発側にとっても、この仕組みは数時間あれば自分たちで構築・検証可能で、かつ文書検索のエンジンもほぼ全自動で解析を行ってくれるということで、「**まずは試してみる**」という障壁を減らしてくれます。

本記事にご関心いただけましたら、是非一度試してみて下さい。