Copilot Studioのトピック開発で学んだTips 3選
X-tech推進本部 加藤Microsoft Copilot Studioはローコードでエージェントを開発できる非常に便利なツールです。GUI中心で構築できるため、簡単なエージェントであれば短時間で動作するところまで到達できます。
一方で、トピック機能を使って少し複雑なエージェントを作ろうとすると「なんで動かないんだ...?」というハマりどころが現れます。この記事では、私が実際にCopilot Studioで開発していてハマったポイントを3つ紹介します。
1. コードエディターを使う
なぜ動かないのか分からない時は、Copilotなどの生成AIに質問することもあると思いますが、画面キャプチャやテキストで状況を説明するのには限界があります。そんな時に使えるのがコードエディターです。
コードエディターはトピック設計画面の「詳細」から「コードエディターを開く」を選択すると表示できます。

コードエディターでは、ノードの接続関係、条件分岐、変数、各ノードの設定がYAML形式で表現されており、原因が特定しやすくなります。
2. 変数は最初に初期化する
変数を初期化しないままプロンプトで使用すると、エラーにならずノードがスキップされることがあります。
例えば以下のようなトピックを作ったとします。
- 「生成応答を作成する」ノードで「今日の晩御飯は何がいい?」と聞く
- 生成された応答に対して質問ノードで「こちらでいかがでしょうか?」とユーザーに尋ね、ユーザーの応答を
user_request変数に格納する - ユーザーが「OK」と回答した場合は終了、それ以外の場合はステップ1に戻り生成応答を再度作成する

生成応答ノードには、追加のプロンプトを設定できるので、ここにuser_requestを渡します。

「こちらでいかがでしょうか?」という質問に対して、ユーザーから受け取ったフィードバックをもとに生成応答を作り直すフローです。
しかし、このままでは初回の生成応答時点でuser_requestが未定義のため、生成応答ノードがスキップされてしまいます。内部的にはエラーになっているのだと思いますが、テスト実行時にも分かりやすいエラーメッセージは表示されません。
Copilot Studioでは、未初期化の変数を参照した場合でも必ずしもエラーが表示されるわけではありません。「ノードが実行されない」「生成応答が返ってこない」といった現象が発生したら、まず変数が初期化されているか確認することをおすすめします。今回のような再帰的なトピックやループ処理を設計する場合は、あらかじめ「変数値を設定する」ノードを配置し、変数を初期化しておきましょう。

3. 質問ノードはスキップされることがある
Copilot Studioの質問ノードは、対象の変数に既に値が設定されていると質問自体がスキップされることがあります。
1つ前の例ではuser_request変数を空文字で初期化しましたが、実は空文字であっても値が設定済みとみなされるため、質問ノードが自動的にスキップされることがあります。これはCopilot Studioの質問ノードが、「値が定義されていない場合のみ質問する」という挙動を持っているためです。
この動作は質問ノードのプロパティから「毎回質問する」を有効にすることで防ぐことができます。

質問のスキップは、入力済みの情報を再度尋ねないための便利な機能です。一方で、会話をループさせたり、ユーザーから何度もフィードバックを受け取ったりするシナリオでは意図しない挙動につながることがあります。会話の流れを設計したうえで活用することが重要です。
参考: 質問する - Microsoft Copilot Studio | Microsoft Learn
まとめ
会話設計やトピック設計のベストプラクティスについては、Microsoft LearnのCopilot Studio ガイダンスにさまざまな情報がまとまっています。エージェント開発だけでなく、運用・改善も含めた考え方が整理されているため、あわせて参照することをおすすめします。
Copilot StudioはGUI中心で直感的に開発できる一方で、内部的には変数管理や会話状態の保持など、しっかりとした会話フレームワークの上で動いています。
今回ご紹介した点はどれも小さなポイントですが、知らないと数時間ハマってしまうこともあります。これからCopilot Studioでエージェントを作る方の参考になれば幸いです。