アルファテックブログ

Copilot Studioで作る多段ナレッジAIチャットボット

カバー

はじめに

この記事は、企業の情報システム部門やAI推進部門で社内業務の効率化や問い合わせ対応の自動化を検討している方、またローコード開発環境やAIチャットボットの導入・運用に関心があり、関連技術を調査しているエンジニアの方を主な対象としています。

年末調整に関するFAQ対応をテーマにして、ローコード開発環境であるCopilot StudioおよびPower Automateを活用した多段ナレッジ型AIチャットボットの開発・運用事例を紹介します。技術紹介が中心ですが、なぜその手法を採用したか背景を含めて解説することを重視しました。具体的には、バックオフィス部門の要望や制約条件をどのように技術選定や設計に反映したか、カテゴリー選択式・質問入力式の併用や多段ナレッジ構成など実運用で直面した課題とその解決策、FAQや外部資料・Web検索を組み合わせたナレッジ優先度設計、運用効果の可視化、そしてCopilot StudioおよびPower Automateの実際の使い勝手やノウハウについて詳しく解説します。

年末調整に関する課題と解決策の方向性

年末調整を担当するバックオフィス部門では、毎年年末調整期間に社員からの問い合わせ電話が多く、特に管理職が対応に時間を要していたことが課題でした。AI推進室では、社員からの問い合わせに回答するチャットボットの開発を担当し、今後は運用をバックオフィス部門へ引き継ぐことを想定して開発を進めました。

課題と対策

バックオフィス部門からの要望

バックオフィス部門からは、質問を入力して回答するチャットボット機能だけでなく、質問を入力せずにカテゴリーを選ぶだけで知りたい情報に簡易にアクセスできる手段の追加要望がありました。この要望を受け、最大3階層のカテゴリーを選択することで関連するFAQを参照できる機能を追加しました。

ナレッジ情報の構成

バックオフィス部門が作成したFAQは約100問ありましたが、FAQだけではカバーできる範囲が限定的でした。そこで、国税庁の手引き資料やWeb検索も回答のための情報源として含めることにしました。ただし、質問に対する回答精度はできるだけ高くしたいため、使用するナレッジの優先度を1.FAQ、2.国税庁の手引き資料、3.Web検索の順に参照し、回答する構成にしました。

技術選定の方針

使用する開発基盤となるサービスの選択肢は他にもありましたが、数が増えると保守運用メンバーにとって、各サービスに関する知識やノウハウが必要になります。そのため、Copilot StudioおよびPower Automateで実現できる範囲に留める方針としました。

チャットボットの構成・技術

Copilot Studio

回答方式の設計

Copilot Studioで実現可能なチャットボットはチャット形式ですが、質問を入力する煩わしさがあるため、知りたいカテゴリーを選択することで、求めるFAQを表示するカテゴリー選択式を優先しました。質問の入力があれば、精度の高いFAQ、国税庁の手引き資料、Web検索結果という優先順位で回答したいため、3種類のナレッジ情報を段階的に検索して回答する構成にしました。

Copilot Studioにおいて一連の処理を定義する単位であるトピック内では、「生成型の回答を作成する」アクションを利用して、それぞれのプロパティで参照すべきナレッジの指定と回答生成に関する指示を行いました。

トピック間フロー

会話の制御

回答後に会話を継続させることで、回答に対する追加の質問を可能にしました。ここで重要なのは、トピック間の呼び出しが途絶えてトピックから抜けると、あらかじめ登録したナレッジ情報に基づく回答ができなくなるという点です。

この問題を解決するため、回答後にトピック抜けしないよう次の質問入力を待機する質問ノードを追加して、「ご参考になりましたか?続けてご質問があれば、このまま入力してください。」というメッセージを表示することで会話処理がループして継続するようにしました。

この会話制御の設計については参考情報があまりなく、試行錯誤を重ねました。

カテゴリー選択式の実装

カテゴリー選択式では、FAQから確実に回答するため、回答生成ではなく、FAQをSharePointリストで定義し、Power Automateで検索フローを作成して、Copilot StudioからPower Automateのフロー呼び出しコネクターを使用して該当するFAQを抽出して回答する構成にしました。カテゴリーを選択した後の次のカテゴリーリストもSharePointリストから取得する処理にしました。

SharePointリストをPower Automateフローで検索することにより、正確で漏れのない検索結果を取得でき、Copilot Studioにおける画面UIであるAdaptive Cardノードへ検索結果をダイレクトに流し込み、カテゴリー選択画面を作成しました。

回答作成フロー

Web検索回答ノードの設定

Web検索回答ノードを普通に組み込んだ場合、関連性の低い情報も回答してしまう可能性があります。プロパティで関連度の設定を「中」に設定することで、比較的関連性の高い情報のみを回答し、関連性が低く誤っている情報の回答を低減しました。

利用ログの取得

利用ログは、トピック内でカスタム テレメトリ イベントを送信する処理を追加し、AzureのApplication Insightsで検索クエリを発行して取得します。Azureの知識も必要になりますが、一度設定してしまえば改修の可能性は低いので、Copilot Studioで用意されているノードが使用可能なこの方式をおすすめします。

Power Automate

各階層のカテゴリー選択肢の一覧、および選択カテゴリーに含まれるFAQデータは、SharePointリストに登録し、Power Automateのコネクターでアクセスする構成にしました。この構成により、FAQに記載したとおりの文章で回答でき、かつ回答レスポンスも早く、複数のカテゴリーを参照して回る操作でもストレスは少なくなりました。

ユーザー認証

社内のTeamsやMicrosoft365 Copilotのライセンス状況が統一されていないため、ユーザー認証はEntra ID(OpenID Connect)を採用し、どの社員も一貫した認証で年末調整チャットボットへSSOが利用できる構成にしました。

社員は、社内ポータルサイトにログインする際にEntra ID認証を済ませており、ユーザー認証は「社内ポータルサイト →(Entra ID SSO)→ チャットボット」という流れで行います。

Azure側の主な設定手順

以下に、Azure側の主な設定手順と目的を説明します。

  1. Azure Functionsで「Function App」を作成

Copilot Studio(Web/Direct Line)用の短期トークンを安全に発行するAPI基盤を用意します。Azure PortalでFunction Appを新規作成し、Node.js/Consumptionプランを選択します。App SettingsにDirect Line Secretや許可オリジンを設定します。

  1. HTTPトリガー関数の作成(/api/directline/token)

フロントエンド(agent-sso.html)から呼び出すトークン発行APIのエンドポイントを作成します。HTTP トリガーで関数名をdirectline-token、認証レベルはAnonymous(まず動作確認を優先)とします。

  1. CORSと認可の最小設定

許可されたオリジン(社内ポータルのCanvasページ)以外からの呼び出しを遮断し、資格情報付き通信を許可します。FunctionsのCORSにCanvasページのオリジンを登録し、Access-Control-Allow-Credentials: trueを返すように設定します。

  1. 関数コード(Node.js・TypeScript例)

サーバー側でDirect Lineのsecretを使って短期トークンを生成し、クライアントへtokenのみ返します。Direct Line API(/v3/directline/tokens/generate)にPOSTし、レスポンスのtokenをJSONで返します。

  1. 関数の公開URLを取得 → agent-sso.htmlに設定

フロントエンド(Web Chat・MSAL)が自社APIのトークン発行URLへアクセスできるようにします。Functionsの「Get Function URL」で公開URLを取得し、agent-sso.htmlのconfig.dlTokenEndpointに設定します。

Azure設定項目

ナレッジ情報の準備

FAQはバックオフィス部門からExcelファイルで提供されました。人間が見れば分かる内容ですが、AIが誤りなく参照できるよう、事前に構造化しました。具体的には、画像で貼り付けられていた図表はWordで作成し直し、表はセル結合を解除したものを用意して、ナレッジとして読み取りやすい形式に修正しました。

ナレッジの登録方法

エージェントのナレッジ項目にファイルを登録し、回答生成ノードのプロパティから登録したファイルを選択して利用します。また、回答時の具体的な回答指示や禁止事項のプロンプトを回答生成ノードに記入して回答内容を制御しました。

運用結果・効果

利用状況

期間中の利用件数は、カテゴリー選択式が186件、質問入力式が435件で、合計621件でした。質問入力に応じて内部処理で回答を生成した内訳は、FAQ検索が195件、国税庁の手引き資料検索が110件、Web検索が130件でした。

当初の予想に反して、質問入力の割合が高い結果となりました。入力された質問を確認すると、それぞれ込み入ったケースでどのように入力するべきかを確認する質問が多く、カテゴリー選択式の容易さより、自分にフィットした回答を求める社員の割合が多かったものと考えられます。

利用状況

セッション分析

セッション分析の結果、一度のアクセスで平均1.4問、最大5問の質問を連続で確認したケースもありました。約4割は2回以上の質問を連続して行っており、連続した会話の実現により、ユーザーの要求に対応したものと考えます。

セッション当たりの質問数

効果

社員からの電話・メールによる問い合わせ対応件数を例年約90件から7件へ92%削減できました。担当部門からも、かつてないほどに問い合わせ数が減少したと報告がありました。

AIチャットボット運用のポイント

利用ログは、Web検索や参照したナレッジ情報も記録することで、FAQや国税庁の手引き資料でもカバーしきれない範囲の質問を把握できました。今後FAQへ反映する候補として、社員の質問への対応カバー率の向上や改善に利用します。

ローコード開発の実態

Copilot StudioおよびPower Automateは、ローコードで非エンジニアでも開発できることがメリットと謳われていますが、実際はPower Fx式の作成で変数の型を意識することや、Copilot StudioおよびPower Automateで利用可能な関数に違いがあるため、同じようなロジックを式で表現する際に見直しが必要です。

Power Automateでは式の入力欄やテスト機能でエラーが出た際、Copilotによる代替式の提案やエラー解析の支援を受けられますが、その支援内容が誤っている場合もあります。今回の開発では、Microsoft365 Copilotアプリを利用しながら各ノードの設定方法のアドバイスを受けたり、エラーに対応したりというスタイルで開発を進めました。

今後のCopilot Studioの機能改良のロードマップでは、処理の起点となるトリガーの簡素化やテストの自動化なども計画されており、さらなるサポート強化に期待したいところです。

今後の展望

今後は、今回のチャットボット開発・運用で得られた知見をもとに、以下の取り組みを進める予定です。

  • 年末調整以外の問い合わせ対応への展開
  • 最新の生成AI技術を活用した自動化・省力化の促進
  • Copilot StudioやPower Automateの新機能・アップデートをもとにした継続的な改善

さらなる業務効率化・ユーザー体験向上に取り組んでいきます。

さいごに

この記事では、年末調整FAQ対応を題材に、Copilot StudioとPower Automateを活用した多段ナレッジ型AIチャットボットの開発・運用事例を紹介しました。

カテゴリー選択式と質問入力式の併用、多段ナレッジ構成による回答精度の向上、会話制御の工夫、Azure Functionsを使ったEntra ID認証の実装など、実運用で直面した課題とその解決策について詳しく解説しました。結果として、問い合わせ対応件数を92%削減するという大きな効果を得られました。

Copilot StudioとPower Automateは、ローコードで開発できる一方で、実際の運用ではさまざまなノウハウが必要になります。この記事が、これから社内チャットボットを導入・改善したい方の参考になれば幸いです。

記事の執筆にあたっては情報の正確性に努めておりますが、掲載されている文章やソースコード、設定ファイル等の内容について、完全な正確性や安全性を保証するものではありません。活用される際は、必ず公式ドキュメント等をご自身で確認のうえご判断ください。


TOP
アルファロゴ 株式会社アルファシステムズは、ITサービス事業を展開しています。このブログでは、技術的な取り組みを紹介しています。X(旧Twitter)で更新通知をしています。