MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

Copilot Studio のチャットに添付されたファイルをフローで扱う

目的

こんな感じで Copilot Studioで作成したエージェントに添付ファイルを渡した際、これをフローのなかで取り扱いたいなと考えました。

調べると色々過去の情報が出てくるのですが、結論からいうと直接的に受け渡しはできません。

前提

Copilot Studioとエージェントフロー、そのうえで動作するPower Fxの仕様により、以下のルールの上で実装を検討しなければなりません。

  1. Copilot Studio にエージェントフローを追加した際、受け渡しできるデータは配列、バイナリをサポートしていません
  2. Power Fx の JSON関数ですが、バイナリ(ファイル) を base64文字列にするような操作は動作プロパティでのみ動作するので今回はつかえません

過去の情報

『ファイルの情報を含んでいる』と記載されているシステム変数は以下の2通りです

  1. System.Activity.ChannelData
  2. System.Activity.Attachments

このうち、1. System.Activity.ChannelData.OriginalAttachments については、過去のブログによると添付ファイルの情報が .OriginalAttachments に含まれていると記載されています。 しかし確認するとそもそもChannelDataの下にはそのようなプロパティは含まれていませんでした。

※念のためエージェントを発行してTeamsなどでファイルを添付しましたが特に変わらずでした。

次に 2. System.Activity.Attachments ですが、ここには正しくファイルに関する情報が含まれているようです。

しかしながらValue プロパティに入っているのがモロにバイナリデータなので、前提1. にあるとおりエージェントフローに直接ファイルを渡すことはできません。

また、前提2. に記載の Power Fx - JSON関数 の制限により、 base64文字列にしてフローに渡す という操作もできません。

ということでここまでの結論:ファイルを直接フローに渡すような変数・関数の組み合わせはどうやらない。

回避方法

回避方法がないわけではありません。Copilot Studio エージェントのもう一つの道具、Power Platformのコネクターを使えばエージェントから直接呼出しでファイルを何らかのサービスに登録することができます。 例えばOneDrive for Businessにファイル登録するケースを考えます。

この場合には素直にOneDrive for Business のファイル作成アクションを追加し

ツールの設定で、ファイルコンテンツとして System.Activity.Attachments を使えばよいです。 (正確には複数ファイルの添付ができるので、その1個目のファイル First(System.Activity.Attachments).Value)

※ツールの使い方については以前の投稿を参照してください。

【Copilot Studio】躓きポイント!ツールでの入力パラメータについて - MoreBeerMorePower

あとはエージェントのインストラクションで、OneDriveに保存したあとにフローを実行するように書いてあげればOKです。

フローの中で保存したファイルコンテンツを取得し、その後続処理を実行してください。

※もしファイル名をユニークにしておきたいのであれば何か一意な文字列をくっつけてOneDrive for businessでのファイル保存に利用するとよいでしょう。

以上、ちょっと面倒で直接的ではありませんが、Copilot Studio のエージェントに添付されたファイルの取り回しについてでした。

今後アップデートでもう少し簡単に操作できるようになるかもしれませんので、その際は別途書きます。