4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Automate】Copilot Studioで作ったプロンプトをAutomateで使う

4
Last updated at Posted at 2026-04-28

0. INDEX

  1. はじめに
  2. シナリオと目的
  3. Copilot Studioで作ったプロンプトをAutomateで使う
  4. あとがき

1. はじめに

こんにちは。
先日、↓これに開発担当者として参加して先達の @ma-booooo 氏にPowerAutomateのあれこれを教えてもらう機会がありました。

今回臨んだお題は、 業務で使っている様々な書式の PDFからテキストデータを抽出し、Dataverseに登録する というAutomateでやるには少々腰の引けるものでしたが、 プロンプトを実行する アクションを使うことであっさり解決できたので、そのナレッジを書いていこうと思います。

よかったらセルフハンズオン的に進めてみてください!

なお、開発環境自体は整っているものとして進めます。
おそらく、Copilot Studio、Power Platform周りのプレミアムライセンスが必要になるかと思いますが、残念ながら私は管理者ではないので詳細不明です。すみませんorz

…とはいえこれは分かります。環境を作る権限がある管理者等に問い合わせてください。

  • Dataverseのテーブルと、Automateフローは同じソリューションに含めないとならない
  • Automateフローと、Copilot Studioのプロンプトは、同じ環境で作らないとならない

2. シナリオと目的

2.1. シナリオ

各社から提出されるPDFレポートを、現在手動で集計しエクセルにまとめてます。
しかし、各社のPDFフォーマットが異なっており、作業が大変です。ボスケテボス、決して走らず、急いで歩いてきて、そして僕らを助けて

2.2. 目的

手動集計している部分をAutomateを使い自動で抽出し、Dataverseに登録をします。
Dataverseに入れてしまえばエクスポート自体は何とでもなりますしね!

絵にするとこうなります!
image.png

3. Copilot Studioで作ったプロンプトをAutomateで使う

処理したい内容の全貌はこんな感じです。

  1. SharePointにアップロードしたPDFファイルをAutomateで読み取る
  2. PDFファイルから、登録したい値を抽出する
    • 今回は 会社名hogefugapiyo を取得します
  3. 抽出した値を、Dataverseに登録する
  4. Dataverseへの登録に成功したら、SharePointドキュメントのプロパティに登録結果を書き込む

3.1. テストデータ

こういうパワポを作って、PDF出力してみました。
image.png

3.2. Copilot Studioでプロンプトを作ろう

何はなくとも Copilot Studio にログインします。

ツール+新しいツール
image.png

プロンプト を押下
image.png

タイトル と 適当な指示(プロンプト) を入れていったん保存しておきます。
image.png
image.png

では保存した (タイトル)※スクショでは「PDFからデータを抽出する」 をクリックして再びプロンプト設定画面に切り替えます。

コンテンツを追加する(または「/」キー) を使うと、プロンプトにファイルデータなど任意の引数を渡せるようになります。

では、PDFファイルをプロンプト埋め込めるようにします。
任意の位置(スクショ中だと「」 のカッコの中)を一度クリックして入力カーソルを置いてください。
その状態のまま +コンテンツを追加する画像またはドキュメント を選択します。
image.png

「ドキュメント入力」では、 名前 を任意に設定します。この 名前 は、Automateの プロンプトを実行するアクションの「引数」になります。わかりやすい名前にしましょう!
image.png

また「サンプルデータ」では、テストデータを登録するとこのStudio上で応答を確認及び調整できるようになります。
テストデータをアップロードしてみます。
image.png
「202604_A社_月次レポート.pdf」の中身
image.png

そして、テスト をしながらプロンプトを調整していきます。
結果はモデル応答のほうに出力されます。理想の出力になるまで テスト を繰り返しましょう。
image.png

個人的にはJSONの方がAutomateで扱いやすそうなので、フォーマット込々でこんな感じに指定しました。
納得のいくプロンプトが書けたら忘れずに 保存 しておきましょう。
image.png

3.3. SharePointにPDFのアップロード先を確保しよう

ファイルのアップロードによりフローを起動させたいので、SharePointにアップロード先を確保しておきます。
image.png
image.png

それから登録完了用のメッセージもいれて、ファイルの状態を見せたいので Message 列を テキスト として追加しておきました。
image.png
image.png

3.4. Automate から作成したプロンプトを呼び出そう

書き始めや最初にフローを保存しましょう的な部分はこちらの 2.2. フローを保存する あたりに書いたので参照してください。

まずトリガーとしてSharePointコネクタの「ファイルが作成されたとき (プロパティのみ)」を置きます。
image.png

トリガー設定は、 3.3. SharePointにPDFのアップロード先を確保しよう で作ったフォルダーを使います。
image.png

フォルダー 設定が見つからない場合は、 詳細パラメーターフォルダー にチェックをつけてください。
image.png

AI Builderコネクタの プロンプトを実行する を置きます。
image.png

内容を設定…おっと!PDFファイルの設定もしなければ駄目ですね。
プロンプト作成時に UploadedPDF画像またはドキュメント で作ったため、Automate側では「ファイルコンテンツ」を指定する必要があります。
ちなみに引数名 UploadedPDF 部分は、 3.2. Copilot Studioでプロンプトを作ろう のCopilot Studioのコンテンツの追加で指定したドキュメント名になってますね!
image.png

SharePointからPDFファイルを引っ張ってきます。
「ファイルコンテンツの取得」を置きます。
image.png

設定値はこう。
image.png

ファイル識別子 は「ファイルが作成されたとき (プロパティのみ)」に含まれていますが、初期状態では見えないので「表示数を増やす」をクリックしましょう。
image.png
image.png

ここまで出来たら 保存 しておきましょう。
image.png

3.5. 中間動作確認!PDFが読み出せているかどうかを確認しよう

ここまで作成したフローの動きを確認してみます。 テスト手動 を実施します。
この画面はしばらくローディング画面で止まった状態になりますが、気にせず次へ進みます。
image.png

3.3. SharePointにPDFのアップロード先を確保しよう で準備したフォルダーにPDFファイルをアップロードします。
image.png

しばらくすると、ローディング画面で止まっていたテストが動き始めます。
最後まで実行したら プロンプトを実行する アクションをクリックすると、PDFから取得できた値が確認できます。
image.png

値が確認できた方はおめでとうございます。タイトル回収です!

3.7. Dataverseを準備しよう

プロンプトの方ではJSON形式で値を出力しています。これがDataverseテーブルのカラムになります。
image.png

これに対応したテーブルを追加します。Power Apps にサインインします。
この作業はプレミアムライセンス必要です。
利用できない場合は、SharePointリストでも似たような処理はできますので適宜読み替えてください。

テーブル+新しいテーブル新しいテーブルを作成する を実施します。
もし テーブル が見つからない場合は、青枠の 詳細 から探してみてください。
image.png

「空白から開始」を選びます。
image.png

hogefugapiyovendorを追加しましょう。会社名は最初のほうが良さそうなので、vendorは先頭に入れています。
型は 1行テキスト でよいでしょう。
image.png

デフォルトの テーブル1 ではあんまりなので適宜変更します。
「テーブル1」の プロパティ を選択します。
image.png
表示名 を変更すると 複数形の名前 も連動して変わります。意味はちょっと分かりません。すみません。
image.png

最後に「保存して終了」を押下してください。
image.png
Power Appsのホームに戻ると作成したテーブルが確認できるはずです。
image.png

3.8. PDFから取り出した値をDataverseに登録しよう

さあ、佳境に入ってきました。
3.7. Dataverseを準備しよう で登録したDataverseテーブルにPDFの内容を登録していきましょう。
「新しい行を追加する」を置きます。
image.png

設定はこんな感じです。 プロンプトを実行する アクションは JSON形式を解析した状態で直接読み出せます。さすプロです!
image.png

では、 保存 をして テスト をしてみましょう。
image.png

先ほど動作確認をした履歴があるはずなので、 自動 から進めてみましょう。
image.png

下まで実行できたようです。
image.png

では、テーブルの方を確認して登録できているかどうかを見てみましょう。
image.png

行が増えていたら成功です!

3.9. 追加お題: PDFの入力チェックをして、正常なものだけDataverseに登録しよう

追加シナリオ

どうやら、PDFデータは場合によって入力忘れなどの欠損があり得るそうです。
なので、PDFから抽出するときに未入力チェックをし、欠損データがある場合は登録しないようにしてほしい。

追加シナリオの目的

…ということで、こういう機能をさらに追加します。

  • 未入力のバリデーションチェックを行う
  • 未入力項目があった場合は、SharePointのMessageプロパティにてチェック結果を出力する
  • ついでに正常登録できた場合は、「処理済み」と出力する

テストデータ

こういうデータを作ってみました。fuga が入っていないですね。
image.png

実装する

実装をどうするかについて、次の2点に注目します。

  • プロンプトからのJSONデータには、hogefugapiyovendorというキーを必ず含まれている
  • それぞれのキー値に対する未入力チェックという共通処理が必要になる

ということで、未入力チェックする項目として 「キーの文字配列を準備し、For eachで回しつつ、共通処理である未入力チェックをする」 ように実装してみます。

「変数を初期化する」を置きます。
image.png

JSONのキー名で配列を作り設定します。
image.png

配列変数でループをさせたいので「それぞれに適用」で、配列変数を指定します。
image.png
image.png

キー毎に未入力チェックをしていきます。
「条件」をループの中に置きます。
image.png

条件 は空っぽチェックをするので empty() を使います。
併せて、項目値を動的に取得したいので outputs() に設定する文字列を調整します。
とりあえず、 vendor を取り出すように選択してみたところ。
image.png

body/responsev2/predictionOutput/structuredOutput/vendor の末尾を弄ればよさそうですね。
body/responsev2/predictionOutput/structuredOutput/ + (それぞれに適用) に置き換えます。
image.png

右辺には true を入れておきましょう。
image.png

未入力チェックでは、問題があったキー名を残しておきたいので、もう一つ配列変数を用意します。
また、すでに用意している配列変数をアクション名が被るので、それぞれリネームしておきましょう。
image.png

未入力チェック条件は定義済みなので、中身を書きましょう。
True側、つまり「未入力であった」場合は、単純に「検査をしたキー名」を配列に追加しておきます。
image.png
image.png

False側は特に何もありません。

では最後、Dataverseに登録をするかどうかです。
未入力チェックがすべて問題ない場合、変数WrongFieldsは空っぽのはずです。なのでそういう条件を組みましょう。
image.png
image.png

そして忘れずに右辺にはtrueを入れます。
image.png

True側は「未入力がないので登録してOK」です。Dataverseの登録処理をドラッグで移動させましょう。
image.png

移動させました。
image.png

最後に、SharePointドキュメントのアップロードしたファイルのプロパティ Message に「処理済み」と登録しましょう。
ID には、「ファイルが作成されたとき (プロパティのみ)」の ID を指定してください。
image.png

False側は「何らかの未入力項目があるので登録NG」です。未入力項目の配列を使って、SharePointドキュメントの該当ファイルのプロパティMessageに入れるメッセージを登録しましょう。
アクションをコピペします。

アクション上で右クリックをし、 アクションをコピーする を選択してください。
image.png

続けて、False側の「+」を右クリックし、 アクションを張り付ける を選択してください。
image.png

設定はこんな感じに、未入力フィールドの配列変数を、 concat()join()を使ってMessageプロパティの保存内容を作成します。
image.png

最後の確認です。保存をしてテストを実行します。
今回はエラーファイルを上げるので手動です。
image.png

エラーのファイルをアップロードします。
image.png

テスト画面を確認します。
うまく未入力チェックに引っかかってくれたようです。
image.png

SharePointドキュメントもリロードして確認します。
こちらも未入力チェック結果がプロパティに保存できていますね!
image.png

さて、そういえば正常系を通していませんでした。…が、DataverseはvendorをユニークにしてしまっていてA車をアップロードすると競合エラーを起こすのが目に見えているので、B社、C社のデータをアップしてみます。1
image.png

しばし待ちます。「処理済み」と登録できたので良さそうですね!
image.png

Dataverseにも登録されていました!
image.png

以上です。

4. あとがき

前回は弊社で開催した内輪のPowerPlatform勉強会のアウトプット記事になります。

今回何となく面倒そうに感じていた「Copilot Studio」を利用したものです。今回この便利さに気が付けたという点が一番の収穫だったと思います。

それと同時に、先駆者が身近にいない環境での独学をするには最初の一歩が非常に重いとも感じました。
開発中は割とバグっぽい挙動があって回避策を講じたりする必要があるのですが、その時に先駆者がいると「ああ、それ~ですよ」とサクッと解決できるのが大きい。
一人だとさんざん調べまくった上に、MS Learnでは結局解決策がわからずにぶん投げそうです。2

それでは。ノシ

  1. 競合回避をするには、vendor以外のユニーク列を設ける等の対応が必要。つまり…ちゃんと直しなさい!!

  2. 一抹の望みをかけてMSForum、Raddit、Stack Overflowあたりを漁った挙句、結局愚痴しか見つからなかったらどうかしてしまうかもしれないorz

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?