松本典子の「はじめよう!Azure Logic Apps/Power Automateでノーコード/ローコード」 第30回
Azure AIサービスの「Document Intelligence」とAzure Logic Appsで作るワークフロー
AIがメールで届いた請求書の内容を自動抽出する仕組みを作ってみよう
2023年10月03日 08時00分更新
こんにちは、Microsoft MVP(Azure / Business Applications)の松本典子です。
皆さんも、毎月決まったタイミングで請求書などの定型書類をメールで受け取ることがあると思います。たとえば毎月、下図のような形式の請求書を、メールの添付ファイル(PDFファイル)として受け取っているとします。
届いたメールを開けて、添付ファイルを開き、請求書の内容を目視確認する――。通数が少なければ大した手間ではありませんが、数が増えてくると面倒です。わざわざファイルを開くことなく、自動的に請求書の概要情報(請求先、合計金額、支払期限など)が抽出できたら、とても便利ではないでしょうか?
今回は「Azure Logic Apps」と、Azure AIサービスの「Document Intelligence」を利用し、メールに添付されたPDF形式の請求書ファイルの内容を自動的に解析/抽出して、概要情報を「Microsoft Teams」に自動投稿する仕組みをノーコードで作ってみましょう。
なおPower Automateにも同様のコネクタがありますので、今回のフローはPower Automateでも作成が可能です。
1. 事前準備
ワークフロー作成前に以下の準備をしてください。
1-1. Microsoft Teamsのチャネル作成
まずはTeamsに、請求書の概要情報を投稿するためのチャネルを1つ作成します。今回は「請求書関連」というチャネル名にしました。
1-2. OneDriveのフォルダー作成
今回のワークフローでは、受信した請求書ファイルをいったん「OneDrive for Business」に保存し、そのうえで内容の解析/抽出処理を行います。そこで、OneDrive for Business内にわかりやすい名前のフォルダーを1つ作成します(今回は「LogicApps-請求書」という名前にしました)。
なお今回作成するワークフローには、メールの添付ファイルをOneDriveに自動保存する部分は含まれません。本連載の第3回記事でご紹介していますので、そちらを参考に別途ワークフローを作ってください。
2. Document Intelligenceとは
今回は、Azure AIサービスの1つである「Document Intelligence」を利用します。
Document Intelligence(旧称:Form Recognizer)は、機械学習モデルを使って、与えられたドキュメントからキーと値のペア、テキスト、テーブルを抽出するクラウドサービスです。「キーと値のペア」というのは、たとえば「商品A(キー)が10個(値)」「合計金額(キー)が15000円(値)」といった、項目と値が組み合わさった情報のことです。
2-1. Document Intelligenceの準備
Document Intelligenceを使うための準備をしましょう。まずはAzureポータルにサインインし、ポータルメニュー内の「すべてのサービス」をクリックします。
画面左メニューから「AI + Machine Learning」をクリックすると、Azure AIサービスの一覧が表示されます。「Document Intelligence」にマウスオーバーすると「+」が表示されるので、これをクリックします。
「Form Recognizerの作成」の画面が表示されます。サービス名が旧称のままですが、Document Intelligenceの作成画面です。以下のとおり、必要な内容を入力してます。
(1)サブスクリプション:利用するサブスクリプションが選択されているか確認
(2)リソースグループ:「新規作成」をクリックすると名前入力が表示されるので、わかりやすい名前を入力(半角英数字)して「OK」をクリック
(3)リージョン:今回は「Japan East(東日本)」を選択
(4)名前:わかりやすい名前を入力(半角英数字)
(5)価格レベル:無料の「Free F0」を選択
(1)~(5)の入力が完了したら「確認と作成」をクリックします。
2-2. Document Intelligenceのキーとエンドポイントの確認
リソースの作成(デプロイ)処理が実行され、10~20秒ほどで「デプロイが完了しました」という画面が表示されます。表示されたら「リソースに移動」ボタンをクリックします。
左メニューの「Key and Endpoint」をクリックすると、Document IntelligenceのAPIへのアクセスに必要なキーとエンドポイントが表示されます。
上図の赤枠内の情報は、のちほどワークフローを作成する中で利用するので、テキストエディタなどにコピー&ペーストして保存しておきます。また、このキーとエンドポイントは他人には公開しない(知られない)ように気をつけてください。
3. Azure Logic Appsを新規作成する
続いて、Logic Appsのワークフローを作成していきます。
Azureポータルで「すべてのサービス」画面を開き、左メニューの「統合」をクリックします。表示されるサービス一覧で「ロジックアプリ」にマウスオーバーすると「+」が表示されるので、これをクリックします。
「ロジックアプリの作成」画面に遷移するので、以下の内容を入力します。
(1)サブスクリプション:利用するサブスクリプションが選択されているか確認
(2)リソースグループ:「2-1. Document Intelligenceの準備」で新規作成したリソースグループを選択
(3)ロジックアプリ名:わかりやすい名前を入力(半角英数字)
(4)公開:「ワークフロー」を選択
(5)地域:今回は「Japan East(東日本)」を選択
(6)ログ分析を有効化:今回は「いいえ」を選択
(7)プランの種類:「消費」を選択
(8)ゾーン冗長:「無効」を選択
(1)~(8)の入力が完了したら「確認と作成」をクリックします。
リソースの作成(デプロイ)処理が実行され、10~20秒ほどで「デプロイが完了しました」という画面が表示されます。表示されたら「リソースに移動」ボタンをクリックします。
赤枠内の「空のロジックアプリ」をクリックし、ワークフローの作成を開始します。
4. ワークフロー全体図
今回作成するワークフローの全体像は上図のとおりです。請求書ファイルがOneDriveの指定フォルダーに保存されたら、Azure AIサービスのDocument Intelligenceを利用して内容を解析/抽出し、抽出された情報をTeamsの指定チャネルに投稿します。
4-1. トリガーの設定
OneDriveの指定フォルダーにファイルが作成されたら、それをトリガーとしてワークフローが起動するよう設定します。今回は請求書を扱うので、ビジネス向けのOneDrive for Businessを利用します。
検索窓に「OneDrive」と入力して、「OneDrive for Business」コネクタを選択します。トリガー一覧から「ファイルが作成されたとき」をクリックします。
(1)フォルダー:「1-2. OneDriveのフォルダー作成」で作成したフォルダーを選択(今回は「LogicApps-請求書」)
(2)サブフォルダーを含める:「いいえ」を選択
(3)コンテンツタイプの推測:「はい」を選択
(4)項目を確認する頻度:OneDriveに新たな添付ファイルが保存されているかどうかを確認するサイクル(今回は「3分」としましたが、適宜変更してください)
4-2. アクションの設定:事前ビルドまたはカスタム モデル用のドキュメント分析 (v3.0 API)
続いて、OneDriveに保存された請求書ファイルをDocument Intelligenceに渡し、内容を解析/抽出する処理を行います。ここでは「Form Recognizer」コネクタを利用します。
これもまだ旧称のままですが、Document Intelligenceのコネクタです。以前からあるコネクタですが、最近になって日本語対応のAPI(v3.0)が利用できるようになりました。
検索窓に「Form Recognizer」と入力して「Form Recognizer」コネクタを選択し、アクション一覧から「事前ビルドまたはカスタム モデル用のドキュメント分析 (v3.0 API)」をクリックします。
なお、初めてこのコネクタを利用する場合は、API接続の設定が必要です。以下のように入力してください。
(1)接続名:わかりやすい名前を入力(半角英数字)
(2)Endpoint URL:「2-2. Document Intelligenceのキーとエンドポイントの確認」のエンドポイントURLを入力
(3)Account Key:「2-2. Document Intelligenceのキーとエンドポイントの確認」のAPIキーを入力
Document Intelligenceに接続できると上図の表示に変わるので、それぞれ内容を入力します。
(1)モデル識別子:今回は請求書を解析するので「prebuilt-invoice」を入力
(2)ドキュメント/画像のファイルコンテンツ:「ファイルが作成されたとき」の動的なコンテンツ「ファイルコンテンツ」を選択
4-3. アクションの設定:For each
For eachアクションは「制御」コネクタで提供されます。検索窓に「制御」と入力して「制御」コネクタを選択し、アクション一覧から「For each」をクリックします。
なおここでFor eachアクションを使うのは、Document Intelligenceが1つのファイルから抽出した複数の情報が動的なコンテンツ「documents」にまとめて格納されており、それらを1つずつ取り出して処理するためです。For each(Power Automateでは「Apply to each」)の動作については、本連載の第12回を参照してください。
For eachアクションの「以前の手順から出力を選択」では、動的なコンテンツから「事前ビルドまたはカスタム モデル用のドキュメント分析 (v3.0 API)」の「documents」を設定します。
4-4. アクションの設定:チャットまたはチャネルでメッセージを投稿する
Document Intelligenceが解析/抽出した情報を、「1-1. Microsoft Teamsのチャネル作成」で作成したTeamsチャネルに投稿します。
検索窓に「Teams」と入力して「Microsoft Teams」コネクタを選択し、アクション一覧から「チャットまたはチャネルでメッセージを投稿する」をクリックします。
(1)投稿者:「フローボット」を選択
(2)投稿先:「Channel」を選択
(3)Team:該当のチームを選択
(4)Channel:「1-1. Microsoft Teamsのチャネル作成」で作成したチャネル名を選択
(5)Message:Teamsに投稿するメッセージ内容を入力
(5)のメッセージ内容は、上図を参考にしながら次のように入力します。
「請求書ファイル名」には、「ファイルが作成されたとき」の動的なコンテンツ「ファイル名」を入力します。
また請求書から抽出した情報をTeamsに投稿するため、以下のそれぞれの項目は、次のような「式」を入力します。
請求書送信元:items('For_each')?['fields']?['VendorName']?['content']
請求書 ID:items('For_each')?['fields']?['InvoiceId']?['content']
支払い期限:items('For_each')?['fields']?['DueDate']?['content']
請求額:items('For_each')?['fields']?['InvoiceTotal']?['content']
請求額(信頼度):items('For_each')?['fields']?['InvoiceTotal']?['Confidence']
なお最後の項目「請求額(信頼度)」には、AIが解析/抽出した結果(請求額)の信頼度を示す数値が入ります(数値が「1.0」に近いほど信頼度が高い)。信頼度が低い場合は、AIが読み取った結果をうのみにせず、元の請求書ファイルを目視確認することをおすすめします。
以上でワークフローが完成しました。最後に画面上部タブの「保存」をクリックして保存します。
5. 実行結果
実際にワークフローを動かしてみましょう。「1-2. OneDriveのフォルダー作成」で作成したフォルダーに、上図の請求書ファイル(サンプル)を保存してみます。
ワークフローが自動実行されて、上図のとおり請求書のファイル名や、AIが請求書の内容を読み取った結果が投稿されました。
最後に
今回は、Azure AIサービスを利用する自動処理のワークフローをノーコードで作成しました。
「5. 実行結果」でOneDriveのフォルダーに直接、請求書ファイルを保存していることからもわかるとおり、このワークフローは受信メールの添付ファイルに限らず適用することができます。
またDocument Intelligenceは、請求書以外にも「レシート」「名刺」「一般的なドキュメント」など、さまざまなドキュメントの解析/抽出に対応したモデルを用意しています。以下の参考資料(公式ドキュメント)を参照して、「4-2. アクションの設定:事前ビルドまたはカスタム モデル用のドキュメント分析 (v3.0 API)」で指定している「モデル識別子」を変更し、「4-4. アクションの設定:チャットまたはチャネルでメッセージを投稿する」の「式」の内容を変更することで、請求書以外の情報抽出にも使えます。書類を自動処理する方法の1つとして、ぜひ活用してみてください。
参考
この連載の記事
-
第43回
Team Leaders
社内からの質問に自動回答! AI Builder+ノーコードでQ&Aボットを作ろう -
第42回
Team Leaders
Power Automateで複数人の承認(多段階承認)ワークフローを簡単作成しよう -
第41回
Team Leaders
重要なTeamsメッセージの見失い/見落としを防ぐPower Autometeのフローを作ろう -
第40回
Team Leaders
クラウドフローからデスクトップフローを「Picture-in-Picture」で起動する -
第39回
Team Leaders
面倒なカレンダー登録作業を生成AIで自動化するワークフローを作ろう -
第38回
Team Leaders
生成AIに日本語プロンプトで指示を出し、メールから情報を抽出してもらおう -
第37回
Team Leaders
フォルダー内のすべてのファイルを添付してメールを自動送信するフローを作ろう -
第36回
Team Leaders
ローカルPCのテキストファイルをPower Automateに読み込ませて活用しよう -
第35回
Team Leaders
受信メールの添付ファイルを種類に応じたフォルダに自動保存する -
第34回
Team Leaders
Power AutomateでTeamsのチーム全員にメンションを送る方法 -
第33回
Team Leaders
Power AutomateのCopilotは日本環境でも使えるか? 試してみました - この連載の一覧へ