目的
こんな感じで Copilot Studioで作成したエージェントに添付ファイルを渡した際、これをフローのなかで取り扱いたいなと考えました。
調べると色々過去の情報が出てくるのですが、結論からいうと直接的に受け渡しはできません。
前提
Copilot Studioとエージェントフロー、そのうえで動作するPower Fxの仕様により、以下のルールの上で実装を検討しなければなりません。
- Copilot Studio にエージェントフローを追加した際、受け渡しできるデータは配列、バイナリをサポートしていません。
- Power Fx の JSON関数ですが、バイナリ(ファイル) を base64文字列にするような操作は動作プロパティでのみ動作するので今回はつかえません
過去の情報
『ファイルの情報を含んでいる』と記載されているシステム変数は以下の2通りです
System.Activity.ChannelData
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 のエージェントに添付されたファイルの取り回しについてでした。
今後アップデートでもう少し簡単に操作できるようになるかもしれませんので、その際は別途書きます。