1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Power Platform】Copilot StudioとPower BIを連携してAIに回答させる

1
Posted at

はじめに

今回も引き続き、記事を書いていきます。
本記事では「Power BI×Copilot StudioのAI回答」について記事を投稿しました。

今回つくるもの

結論として、以下の流れで検証を進めていきます。

  1. ユーザーが Copilot Studio のエージェントに質問する
  2. エージェントが裏で「エージェントフロー」を呼び出す
  3. フローが Power BI のデータセットにクエリを投げて結果を取ってくる
  4. その結果をエージェントが受け取って、自然な文章で答える

今回のポイントはエージェントフローを用意して、それをAIにデータとして持たせる ことです。

ここがイメージできていると、このあとの手順が「なぜそれをやるのか」も含めてスッと入ってくると思います。

登場人物の整理

手を動かす前に、出てくるものを軽く整理しておきます。

  • Power BI のデータセット(セマンティックモデル):今回AIに答えさせたい元データ。Power BIサービス上に発行済み
  • エージェントフロー:Copilot Studio のエージェントから呼び出せるフロー。「エージェントに呼ばれて、結果を返す」用途に特化したもの
  • Copilot Studio:エージェント(チャットで応答するAI)を作る場所。作成したエージェントフローをツールとして追加

今回はCopilot Studioで開発した商品マスタAIエージェントとPower BIで作成した商品マスタレポートを使って手順を進めていきます。

1. エージェントフローを作る

まずはデータを取りに行く部品から作ります。これが今回の心臓部です。

1-1. フローを新規作成する

  1. Copilot Studio(または Power Automate)でエージェントフローを新規作成します
     image.png

  2. トリガーは「エージェントフローが呼び出されたとき」を選びます
    最初から出てこない場合は「エージェント」と検索すれば出てきやすいです。

    image.png

1-2. データセットにクエリを実行する

次に、Power BIのデータを取ってくるアクションを足します。

  1. アクションの追加で 「データセットに対してクエリを実行する」(Power BIコネクタ)を選びます

    image.png

  2. 対象の ワークスペースデータセット を指定します

 image.png
3. 実行する DAXクエリ を入力します
DAXクエリは以下になります。(テーブル名・列名は自分の環境に合わせて置き換えてください)。

EVALUATE
	SELECTCOLUMNS(
	'商品売上',
	"合計売上金額", '商品売上'[合計売上金額],
	"バスケットボール", '商品売上'[バスケットボール],
	"ダーツセット", '商品売上'[ダーツセット],
	"空気清浄機", '商品売上'[空気清浄機],
	"【おすすめ!】フルーツ盛り合わせセット", '商品売上'[【おすすめ!】フルーツ盛り合わせセット],
	"豚肉(350g)", '商品売上'[豚肉(350g)],
	"モニター", '商品売上'[モニター],
	"マフラー", '商品売上'[マフラー],
	"PS5コントローラー", '商品売上'[PS5コントローラー],
	"カニ", '商品売上'[カニ],
	"Nintendo Switch2", '商品売上'[Nintendo Switch2],
	"年月", '商品売上'[年月]
)

ここで一度フローだけテスト実行してみると、結果がJSONで返ってくるのが確認できます。
ここでちゃんとデータが返ってくるか を先に見ておくことで、後でハマったときの切り分けがラクになります。

image.png

1-3. JSONを解析する

返ってきたJSONはネストが深く扱いづらいため、
「JSONの解析」アクションで必要な形に整えます。

  1. アクションの追加で「JSONの解析」を選びます
    image.png

  2. コンテンツに、1-2のクエリ結果(本文)を動的コンテンツでセットします
     image.png

  3. スキーマは、先ほどのテスト実行で得たJSONを 「サンプルから生成」 に貼り付ける
    image.png

スキーマを手書きする必要はありません。サンプルから自動生成が一番ラクでした。

1-4. エージェントに結果を返す

最後に、解析した結果をエージェントへ返します。

  1. 応答(エージェントに返す)アクションを追加します
      image.png
  2. 返す値に、1-3のJSON解析の結果を動的コンテンツとしてセット します
    image.png

これでフローが完成です。
「呼ばれたらクエリを投げて、整形して、結果を返す」という一連の流れができました。

2. Copilot Studio にツールとして追加する

作ったフローを、エージェントの「道具」として登録します。

  1. Copilot Studio で対象のエージェントを開きます

  2. 「ツール」から「ツールの追加」を選びます
    image.png

  3. 一覧から、1で作成したエージェントフロー を選んで追加します
    image.png

これでエージェントが、このフローを呼べるようになりました。
ただ、追加しただけだと「いつこの道具を使うか」をAIは判断できないことがあります。
上記を踏まえて、プロンプト以下のプロンプトへ修正しました。

プロンプト.txt
# 役割
あなたは、自社の商品マスタテストデータに基づいて、顧客・社内担当者からの商品に関する質問に回答する商品案内の専門アシスタントです。ユーザーから質問された内容に対して、ナレッジ(商品マスタデータ)を元に回答してください。

# 基本動作
ユーザーから商品に関する質問を受けたら、必ず以下の手順で対応してください。

1. ユーザーの質問から、対象となる商品を特定するためのキーワード(商品名・型番・カテゴリ・特徴など)を抽出する。
2. 商品データ読み込みフロー を呼び出し、抽出したキーワードを入力として商品マスタデータを取得する。
3. フローが返した商品データの内容のみに基づいて回答を作成する。

# データの扱いに関する厳守ルール
- 回答は、必ず「商品データ読み込みフロー」が返したデータに基づいて行うこと。
あなた自身の一般知識や推測で商品情報(価格・仕様・在庫・型番など)を補ったり創作したりしてはならない。
- フローが返したデータに該当情報が含まれていない場合は、推測せず「その情報は商品データに登録されていません」と正直に伝えること。
- 複数の商品が該当した場合は、候補を一覧で提示し、ユーザーにどの商品か確認すること。
- フローの呼び出しに失敗した、またはデータが取得できなかった場合は、「現在、商品データを取得できませんでした。お手数ですが、商品名や型番を変えて再度お尋ねください」と案内すること。

# 在庫状況に応じた案内
フローが返した商品データの在庫数を必ず確認し、以下の条件に従って回答に案内を追加すること。

- 在庫数が0の場合:通常の商品説明は行わず、「〇〇は売切れとなります。申し訳ございません。」と回答する(〇〇には対象の商品名を入れる)。
- 在庫数が1個以上10個未満の場合:通常の回答に併せて、「残り在庫数が〇個です。早めにご購入下さい」と伝える(〇には実際の在庫数を入れる)。
- 在庫数が10個以上の場合:在庫に関する特別な案内は不要。通常どおり回答する。

# フローを呼び出す条件
- 商品名・型番・仕様・価格・在庫・カテゴリなど、商品マスタに登録された具体的情報を尋ねられた場合は、必ずフローを呼び出す。
- 挨拶や使い方の質問など、商品データを必要としない会話には、フローを呼び出さず通常どおり応答する。

# 回答スタイル
- 結論(ユーザーが求める情報)を最初に簡潔に示す。
- 商品の仕様・価格などを複数項目伝える場合は、表形式または箇条書きで整理する。
- 丁寧でわかりやすいビジネス日本語を使う。専門用語には必要に応じて補足を添える。
- データに基づかない断定や、販売・在庫に関する確約はしない。最終的な購入判断や正式な見積もりは担当部署へ確認するよう促す。

# 禁止事項
- 商品データに存在しない情報の創作・補完。
- 不確実な情報を確定情報のように伝えること。
- 商品マスタの範囲を超えた契約・価格交渉・法的助言。

3. 指示(instructions)を編集する

エージェントに「こういう質問が来たら、さっきのツールを使ってね」と教えてあげます。

  1. エージェントの指示(instructions)の編集画面を開きます
  2. 文章の中で 「/」を入力 すると、追加したツールを参照できます
    image.png

「/」でツールを直接指定できるのは便利でした。
追加したツールやトピックがあれば、活用できます。

4. 実際にAIに聞いてみる

ここまで来たら、いよいよ検証です。

  1. テスト画面で、データに関する質問を投げます
    (例:「バスケットボールの在庫状況を教えてほしいです」)
    image.png

  2. エージェントが裏でフローを呼び出し、Power BIのデータを元に回答してくれます
    image.png
    image.png

無事、Power BIレポートのデータを元にした答えが返ってきました!
もしうまく答えてくれないときは、テスト画面でツールが呼ばれているか(アクティビティ)を確認すると原因を切り分けやすいです。

つまずきポイントメモ

検証中に引っかかった点を、忘れないうちに残しておきます。

  • DAXクエリの結果が大きい:出力結果が多いと遅くなったり扱いづらかったりします。最初は集計済みの小さい結果から試すのがおすすめです
  • 指示があいまいだとツールを使ってくれない:指示(プロンプト)をより具体的に書くことで、制度の高い回答が期待できます

おわりに

最後まで読んでいただきありがとうございます^_^

今回はエージェントフローを使って、AIに複雑な処理を組み込めることができました。
Power BIレポートのデータを参照に回答する処理を作りましたが、エージェントフローには多くのアクションが存在するため、いろんなケースを作っていきたいと思います。

同じように Copilot Studio と Power BI をつなぎたい人の参考になればうれしいです。
引き続きPower Platformまわりで触ったことをまとめていく予定です。

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?