本記事は、当社オウンドメディア「Doors」に移転しました。
約5秒後に自動的にリダイレクトします。
5月16日から毎日更新を続けてきたLLM特集も、本ブログで第1弾が一区切りとなります。
最後を飾るブログでは、知りたいことを質問すると社内データから関連する内容を検索し、質問に対してよしなに回答をしてくれるSlack BotおよびWebアプリをChatGPT APIを使って作成したので、その内容をご紹介します。
こんにちは、アナリティクスサービス部の田中です。
社内には有益な情報が多くありますが、データ量が増えるにつれて調べたい情報に正確にアクセスすることが難しくなります。このプロセスを効率化することができれば、多くの時間をメインの業務に使うことができ組織全体として生産性の向上に繋がると考えられます。
今回はそんな課題を解決するために、ChatGPT APIを使い、調べたいことを質問すると社内データに対して関連する内容を検索し、質問に対してよしなに回答をしてくれるSlack BotおよびWebアプリを作成しました。
プロダクトの開発および記事の執筆は以下のメンバーで行いました。
アナリティクス本部 上田、内田、尾村、田中、橋本、林
社内データ検索Slack Bot & Webアプリ概要
今回はチャット形式で社内の情報について質問を行うことができるプロトタイプを構築しました。システムのおおまかな処理は以下のようになっています。
- 質問を受け取る
- 質問内容に近い社内の文章データを検索する
- 取得した文章データをもとに質問への回答となる文章を生成する
具体的な構成はアーキテクチャで記載しています。
また、インターフェースとしてSlack Botのものと、Slackを社内で使っていなくて作成することができるWebアプリのものを開発しました。以下がそれぞれの出力例になります。
出力例
Slack Botの回答の様子
上の2つのデモ動画はSlack Botの回答の様子です。
左:簡単な受け答えはできるように設定しています。
右:「休暇申請の方法」について質問をしており社内のデータに基づいて回答を行なっています。
DashによるWebアプリの回答の様子
上の2つのデモ動画はDashによるWebアプリの回答の様子です。
左:「子どもが生まれた時にどうすればよいか」をこちらも社内のデータに基づいて回答を行なっています。
右:「日本の総理大臣は誰ですか?」という質問に対しては社内のデータに含まれないため、あえて回答をしないように設定しています。
アーキテクチャ
Slackの実装ではSlack APIを使い質問を受け取り、Azure Functions内でAzure OpenAI ServiceやAzure Cognitive SearchのAPIを実行します。Webアプリの実装ではDashのUIから質問を受け取りAzure OpenAI ServiceやAzure Cognitive SearchのAPIを実行しています。以下は今回使用したAzureのサービスやOSSになります。
- Dash:Pythonでwebアプリケーションを開発するためのPythonフレームワークです。
- Azure Functions:Azure上でコードをサーバーレスに実行できるサービスです。
- Azure Cognitive Search:Azure Cognitive Searchは文章のデータをベクトルデータベースとして保存する機能と保存したものに対して検索を行う機能として利用しました。
- Azure OpenAI Service:Azure経由でGPT-4などのOpenAIのモデルを利用できるサービスになります。利用方法やより詳細な説明については以下の記事が参考になるかと思います。
工夫した点
Azure Cognitive Searchでの検索方法
調べたい情報を検索する際に必ずしも検索先に記載されている言葉で検索を行えていない場合がほとんどです。そこで、Azure Cognitive Searchで検索を行う前に入力されたキーワードと類似する言葉や関係の深い言葉などをAzure OpenAI Serviceを使い生成し、検索キーワードを拡張してから検索を行う構成にしました。
これにより質問した内容に含まれているキーワードが検索先に記載されているものと異なっていても、安定して出力を得ることができるようになりました。
Webアプリ版の開発
Slackを使っていない場合でも社内データに対して質問ができるWebアプリ版も作成しました。Webアプリ版はどのような企業でも導入することができると考えています。
以下は今回作成する際に用いたDashコンポーネントになります。よろしければ参考にしてください。
github.com
その他にもプロンプトを工夫し、検索結果に含まれていない内容に回答しないような工夫をしました。
課題と展望
今回作成したプロトタイプの課題には以下のようなものがあります。
- ベクトルデータベースの検索が上手くいかないことがある
- 取得したデータに関係ないものが含まれていると上手くいかないことがあり、例えば検索で取得したデータに回答すべき内容が含まれていても分からないと回答することがある
今回のプロトタイプではGPT-3.5-turboを使っていたので、上記の課題についてはGPT-4使うことで解決できるかもしれません。
また展望としては以下のようなことを考えています。
- より多くの社内データの利用
- NeMo Guardrailsの利用
NeMo GuardrailsはLLMを利用した会話システムの出力を制御することができ、攻撃的な発言やジェイルブレイク*を防ぐことができます。LLMのガードレールに関する詳細な説明は以下の記事が参考になると思います。
blog.brainpad.co.jp
ジェイルブレイク...言語モデルの出力にかけられている制限を外すこと
- Block Kitの利用
Slack APIのBlock Kitという機能を用いることで、インタラクティブなボタンの追加などが可能となります。この機能により、ユーザーからの直接的なフィードバックを出力した回答に対して収集することが可能となり、質の高い回答を生成するためのサービス改善に繋げることもできます。
今後は上記のようなことにも取り組み、よりユーザーが使いやすいものを作っていきたいと考えています。
まとめ
今回は、「ChatGPT APIで社内データについて回答するSlack BotとWebアプリ」の開発を行いました。
今回のプロトタイプを作る過程で社内データを活用する難しさを身をもって経験することができました。しかし、その壁を乗り越え様々な社内データに効率的にアクセスできる環境を作ることができれば、企業全体の業務の効率化に繋がると感じました。
この記事のプロトタイプのプロダクトに関心がある方は、ぜひお気軽にご連絡ください。ChatGPTなどのLLMを活用したプロダクト開発をともに進めていきましょう。