こんにちは、ROBOT PAYMENTエンジニアのkanemotoです!
請求管理ロボの開発を担当しています。
普段は「請求管理ロボ」の開発を担当していますが、今回は少し違った挑戦をしてみました。
最近、AIを活用した自動応答システムが注目されていますが、私もその技術に興味を持ち、社内の生産性向上を目指してAIを使ったドキュメント解析と自動応答システムの仕組み作りに挑戦してみました。
これはあくまで試作段階のもので、実際にすぐ使えるシステムではありませんが、AIの可能性を探る第一歩として面白い経験になったので、その過程を紹介します。
課題
ドキュメントの中から必要な情報を見つけるのは簡単ではありません。特に、大量のドキュメントが蓄積されたヘルプサイトでは、次のような問題が発生します。
- 曖昧な検索ワードでは正しいページに辿り着けない キーワード検索に頼ると、関連ページがヒットしなかったり、正確な情報を見つけるのが難しいことがあります。
- 必要な情報を見つけるために記事をすべて読む必要がある ヒットしたページを一つ一つ確認し、求めている情報に辿り着くまでに時間がかかります。
- 文章の内容が難解で理解しにくい 正確な情報を伝えるための言い回しや専門用語が難しく、利用者にとって理解が困難な場合があります。 これらの問題を解決するために、AIを使ってドキュメント解析と自動応答システムを導入することにしました。
システム構成
今回のプロジェクトでは、以下の技術とツールを使用してシステムを構築しました。 slackから問い合わせてヘルプサイトの回答が返ってくるような仕組みを作っています。
- Lambda
- Lambda関数を使用して、SlackからのキーワードをKendraに渡し、その結果をBedrockに渡して最終的にSlackに返すプロセスを担当しています。
- Slackからキーワードを受け取り、Kendraに送信
- Kendraの検索結果をBedrockに送信
- Bedrockの回答をSlackに返す
- Lambda関数を使用して、SlackからのキーワードをKendraに渡し、その結果をBedrockに渡して最終的にSlackに返すプロセスを担当しています。
- Kendra
- Kendraは、ヘルプサイト内のドキュメントを効率よく検索するためのツールです。例えばZendeskを使用しているヘルプページであれば3階層下まで詳細に検索できます。
- zendeskの情報を検索します
- URLからHTMLを解析し、必要な情報を抽出します。
- Kendraは、ヘルプサイト内のドキュメントを効率よく検索するためのツールです。例えばZendeskを使用しているヘルプページであれば3階層下まで詳細に検索できます。
- Bedrock
- Bedrockを使用し、Claude InstantというAIモデルを活用して、取得した情報に基づいて質問に回答するチャットボットを実装しました。特に日本語対応モデルであることからこちらを使用しました。
- AIには下記の人物設定をしています。
- Bedrockを使用し、Claude InstantというAIモデルを活用して、取得した情報に基づいて質問に回答するチャットボットを実装しました。特に日本語対応モデルであることからこちらを使用しました。
あなたはヘルプサイトの情報をもとに請求管理ロボの仕様を説明するチャットbotです。 以下の情報を参考に、質問について答えてください。 情報:「{zendeskから取得した情報}」 質問:「{インボイス}」 与えられたデータの中に質問に対する答えがない場合、 もしくはわからない場合、不確かな情報は決して答えないでください。 わからない場合は正直に「わかりませんでした」と答えてください。 また、一度Assistantの応答が終わった場合、その後新たな質問などは出力せずに終了してください。
※構成図
成果
slackから問い合わせることにより、zendeskの中から情報を収集し自然言語で回答をもらうことができました
課題
今回のシステム開発において、以下のような技術的な課題に直面しました。
- Lambdaの公開URLを特定のSlackからのリクエストに限定する
- セキュリティを確保するために、Lambdaの公開URLが特定のSlackからのリクエストしか受け付けないように設定する必要がありました。これにより、不正なアクセスを防ぎ、システムの安全性を確保します。
- よりスムーズな対話を実現するためのレスポンス改善
- Slackではスラッシュコマンドを使用して問い合わせを行う際、3秒以内に応答が返ってこないとエラーが発生してしまいます。この制約を解決するため、リクエストを受け取った関数はまずキューに登録し、実際の処理を別の関数で実行することで、Slackの「operation_timeout」エラーを回避します。 また、Slackでの問い合わせがより自然に感じられるよう、slack-boltというライブラリを使用し、チャット形式での対話を可能にしました。
- 検索精度の向上
- 現在は、ユーザーが入力したキーワードをそのままKendraに渡してロボのヘルプサイトから情報を収集しています。しかし、与えられたキーワードが必ずしも最適ではないため、検索結果が不十分になることがあります。これを改善するために、質問内容からAI(Bedrock)が適切なキーワードを生成し、それを用いて再度Kendraに検索を投げかけます。さらに、良い結果が得られなければキーワードを自動的に変更し、最適な情報を返す仕組みを導入することで検索精度を向上させる必要がありました。
まとめ
今回、社内の生産性向上を目指して、BedrockとKendraを組み合わせることで、ドキュメント検索から自然言語による回答生成までをスムーズに実装できることが分かりました。この仕組みを利用することで、ユーザーが必要とする情報に簡単にアクセスできる可能性を感じました。 ただし、検索精度についてはまだ改善の余地があると感じています。今後は、AIを活用した検索精度の向上についてさらに勉強し、より良いシステムを作り上げるためのスキルを磨いていきたいと思います。
We are hiring!!
ROBOT PAYMENTでは一緒に働く仲間を募集しています!!!