そんな時の小ネタです。
最近色々なエージェントを作ってるんですが、たまによくエラーを不定期で出すときがあります。
テストモードでそれが出てるぶんには目で確認できるんですが、自動トリガーとか使っていると気が付きにくいんですよね。そんな時にエラーを記録しておく方法を紹介します。
MicrosoftのおすすめはApplication Insights を使って詳細なテレメトリーをとるという方法(以下のリンク)なんですが、もう少し気軽に(Azureサブスクリプション使わず)記録したり通知したい場合の方法になります。
Application Insights を使用してテレメトリを取り込む - Microsoft Copilot Studio | Microsoft Learn
エラーが出たら必ず実行されるトピック
Copilot Studioで作成されるエージェントには事前にシステムが用意するトピックがいくつかあります。
エラーが発生した場合にもこの中の一つである「エラー発生時」のトピックが実行され、ユーザーに対してエラーが発生したこと、その詳細を表示してくれます。
また、このトピックでのみ、事前定義済みのシステム変数としてエラーにまつわる情報を取得することができます。
ですので、このトピックにちょっと手を加えてやれば、目的の「エラーが出たらとりあえず記録」は達成できそうですね。
エラー時の記録
幸いなことに、トピックの中ではこれまで紹介してきたエージェントの「ツール」(コネクターアクションやフロー)を実行することができます。
ツールにはDataverseのトリガーも含まれています。どうせ Copilot Studioを使っているのですから、SharePointやExcelなどと言わず Dataverseテーブルを使いましょう。
今回はエラーと直前の会話を記録したかったので、以下のような構成でテーブルを作成しました。
- BotId : エージェントのID
- BotSchemaName ; エージェントの内部名
- BotName : エージェントの表示名
- ConversationId : 会話に一意に振られるID
- LastMessage : 直前の会話テキスト(トリガーしてすぐエラーが出る場合にはトリガーメッセージ)
- ErrorCode : エラーコード
- ErrorMessage : エラーメッセージ
もう少し詳細な情報残してもいいと思いますが、あとは他のテーブルから確認できたりするので、今回は必要最低限にしました。
テーブルを作成したら「エラー発生時」のトピックを編集していきます。
テストモードかによって分岐がありますが、いずれの場合も記録はしておきたいので分岐の合流ポイントにある+マークをクリックし、ツールの追加からコネクターにあるDataverseの「選択した環境で新しい行を追加」を選びます。
あとはテーブルの各項目に何を入れるか設定するだけです。
事前に定義されているシステム変数を使いますが、以下のように対応させます。(列名を変数名とほぼ同じにしたので選択が楽
- BotId :
Bot.Id
- BotSchemaName ;
Bot.SchemaName
- BotName :
Bot.Name
- ConversationId :
Conversation.Id
- LastMessage :
LastMessage.Text
- ErrorCode :
Error.Code
- ErrorMessage :
Error.Message
これで設定は終わりです。右上にあるトピックの保存を実行しましょう。忘れてはいけないのは接続の管理。新たにDataverseへの接続を追加したので、ここも確認しておきます。
ためしにエラーがでるようにしてみると確かに直前のメッセージとエラーの詳細が保存されていることがわかります。
もしここから通知もしたいということであれば、今回作成したテーブルに新しい行が追加されたら~のトリガーで通知を行うフローを作るとよいでしょう。
(必ずしもトピックの中で全部やる必要はない)
おわり
今回は Copilot Studioでエラーが発生したときに、エラーを記録しておくための方法 (Azure Application Insightsを使わないパターン)をご紹介しました。
エージェント、公開したあとにうまく会話を続けてくれないと問題になることも多いので、そんなとき用に仕込んでおくのもいいかもしれません。