Microsoft Teams は、永続的な会話環境を備えているため、Copilot Studio エージェントの展開において特有の課題をもたらします。 セッションが自動的にリセットされる Web ベースの展開とは異なり、Teamsでは会話のスレッドが無期限に保持されるため、文脈が古くなったり、トークンが期限切れになったり、キャッシュされたコンテンツが最新でなくなったりする可能性があります。
この記事では、Copilot Studio エージェントを Teams に効果的に展開するためのガイダンスを提供します。 永続的なセッションの管理方法、デバッグ戦略の実装方法、そして長期にわたる会話のライフサイクル全体を通じて信頼性の高いパフォーマンスを確保する方法を説明します。
主な考慮事項:
- セッション ライフサイクル管理とアイドル状態の管理
- 永続的な会話向けデバッグ手法
- バージョン管理とアップデート展開戦略
- Teams 特有の実装パターン
以下のベストプラクティスに従うことで、Teams 環境で一貫したパフォーマンスを発揮し、状態の変化やシステムの動作についてユーザーに明確なフィードバックを提供する、堅牢なエージェントを作成できます。
Teams の展開が他と異なる理由
Teams の会話は何日も自動リセットされずに継続します。 Web チャットセッションとは異なり、ConversationStart イベントはエージェントが追加された最初の 1 回のみ発生します。 アプリを再インストールしてもこのイベントは再発しません。
Teams の永続性はさまざまなリスクをもたらします:
- 古いコンテキスト: クリアされない限り会話履歴が保持されます。
- トークンの期限切れ: コネクターは長時間のセッション中に期限切れになることがあります。
- コンテキストの上限: 蓄積されたメッセージがモデルの上限を超過する可能性があります。
- 更新キャッシュ: ユーザーは古いロジックとのやり取りを続ける可能性があります。
積極的な状態管理とユーザーへの明確な案内が不可欠です。
セッションのライフサイクルを管理する
非アクティブ状態の管理を含めてセッションのライフサイクルを管理します。
非アクティブ時のリセットを実装する
新しいトピックを作成し、ユーザーが一定時間非アクティブになった場合、リセットフローを開始するトリガーを選択します。 非アクティブ トリガーで、ガード変数や永続的な会話モデルなど、Teams 特有のパターンについて説明します。
- アイドル状態トリガーを追加し、タイムアウト (15 分など) を設定してください。
- コンテキスト オーバーフローを防ぐため、セッション変数や会話履歴を削除する変数値のクリア ノードを 1 つ以上追加してください。
- 会話を終了し、セッションを解決済みとマークしてください。
この方法はコンテキストオーバーフローを防ぎ、ユーザーが戻ってきた際に予測可能な動作を保証します。
リセット後に指針を提供
状態をクリアした後、何が起きたのかを説明するメッセージを送ってください。 例: 会話が途絶えたようなので、安全のため以前のコンテキストをクリアします。 「hello」と入力して再起動してください。」
ConversationStart はエージェントが追加された最初の 1 回のみ実行されるため、あいさつ トピックが実質的な初期化ポイントとなります。 ユーザーに「こんにちは」と言うよう促すことで、起動ロジックが正しく動作します。
セルフサービス リセット コマンドを提供します
ユーザーが特定のコマンドを入力できることを案内するメッセージを追加します: 「何か問題がある場合は、/debug clearstate と入力して私の状態をリフレッシュしてください。」
このコマンドを実行すると、会話の状態が完全にリセットされます:
- 会話の状態をクリアする
- キャッシュされたコネクタ情報を削除します
- コネクタの再認証
- エージェントの最新バージョンを読み込みます
次の場合にこのコマンドを使用してください:
- ボットは、古い情報に「固まって」しまっているように見える
- コネクター認証が期限切れになっている
- ボットロジックの更新後
- 動作が一貫していない場合
透明性の向上とデバッグの改善
Teams に展開されたエージェントの透明性を高め、デバッグを容易にするには、OnKnowledgeRequested トリガーを使用してください。
《OnKnowledgeRequested》トリガーを使用して、書き換えられたクエリを表示する
Copilot Studio は検索を行う前にユーザーの質問を書き換えます。
OnKnowledgeRequested トリガーを有効にすると、以下のことができます:
- 意図の不一致を診断する
- クエリがどのように書き換えられるかを理解する
- デバッグ中のユーザー信頼を高める
注意
OnKnowledgeRequested トリガーの構成は、コード ビューでのみ、YAML を使用して行うことができます。 ビジュアル デザイナーで設定することはできません。
キーワード クエリとセマンティック クエリの両方を表示するメッセージを追加してください。 以下にその例を示します。
kind: AdaptiveDialog
beginDialog:
kind: OnKnowledgeRequested
id: main
actions:
- kind: SendActivity
id: sendActivity_debug
activity: |-
**Debug**: sending this lexical query "{System.KnowledgeSearchQuery}"
**Debug**: sending this semantic query "{System.SearchQuery}"
inputType: {}
outputType: {}
このクエリは、オーケストレーターがユーザーの質問から生成した絞り込み検索クエリ (クエリのリライト) への読み取り専用アクセスを提供します。
メリット:
- 意図の不一致のデバッグ時に役立ちます
- エージェントが調べた内容をユーザーに表示します。
- エージェントの行動に対する信頼を築きます。
- テスト中に作成者を支援します。
バージョン管理と更新の信頼性
エージェントのバージョン管理とユーザーが最新のロジックとやり取りできることを確保することは、Teams のような持続的な環境では特に重要です。
挨拶または専用トピックにおける Surface ボットのバージョン
「Greeting」トピックまたは専用の「バージョン」トピックを使用して、バージョン識別子を使用します。
Contoso Helpdesk Bot – Version 1.3 (Nov 2025)
公開のたびにこの値を更新し、ユーザーやサポートチームがどのビルドが稼働中かを確認できるようにしてください。 バージョン メタ データを更新すると、キャッシュされたコンテンツもリフレッシュされます。 エージェントの名前や説明を変更すると、Teams はそれを新しいアップデートとして読み込みます。
公開時に「最新バージョンを強制」を有効にする
最新バージョンを強制設定を有効にすると、ユーザーが次にメッセージを送信した際に、Teams が最新のエージェントロジックを確実に読み込むようになります。 この設定は、キャッシュされたバージョンを無効にするのにも役立ちます。 アップデートを強制すると進行中の会話が中断されます。
Teams の実装上の注意点
Teams には特有の挙動があり、特別な配慮が必要です。
Greeting トピックを初期化ロジックとして設定しましょう
ConversationStart は、エージェントが初めて追加されたときに一度だけトリガーされます。
- 初期化ロジックは Greeting トピックに設定します。
- Teams アプリの説明に明確な指示を追加してください。
- タイムアウト後は「hello」と入力して新しい会話を始めてください。
トリガーとフォールバックを最適化する
Teams ユーザーは自然かつ予測できない方法でやり取りします。 ボットが以下のことに対応していることを確認してください。
- 複数の挨拶バリエーションに対応すること。
- お別れへの対応を含めること。
- 複数の例句を提示します。
- 親しみやすく役立つバックアップの回答を提供します。
- キーワードを使ってユーザーを関連トピックへ誘導すること。
-
OnKnowledgeRequestedを使って、意図の見落としを診断します。 - キーワードに基づいて関連トピックへリダイレクトします。
- ボットが本当に詰まっている場合は、ユーザーに言い換えを促します。
コネクタ認証動作の検証
コネクタ (ServiceNow、Outlook など) を使用する場合は、テストしてください:
- 最初のサインイン カードの挙動を確認する
- トークンの有効期限が切れた際に何が起こり、どのように自動的に再取得されるか。
- 強制無効化と再同意フローがどのように機能するか。
ヒント
コネクタは延長セッション中にトークンを更新しないことがあります。 必要に応じて非アクティブ時のリセットや /debug clearstate を使って OAuth を再トリガーしてください。 このコマンドをサポートチームやユーザーに周知し、迅速なトラブルシューティングができるようにしましょう。
実環境でテストしてください
Teams はセッション間で状態を保持するため、テストは実際のユーザー体験を忠実に再現してください。
- 自分だけに表示を使用して展開します。
- 長時間放置した後に再度アクセスするようなシナリオをテストしてください。
- アップデートを公開し、エージェントがバージョンを切り替えているか確認してください。
- デスクトップとモバイルでのアダプティブ カードレンダリングの検証
- さまざまな会話の文脈で行動をテストしましょう。
デプロイにおけるチェックリスト
| サインアップできましたか? | タスク |
|---|---|
| ✓ | 会話履歴を消去するように構成された非アクティブ状態トリガー |
| ✓ | ユーザー メッセージでリセットや再起動のガイドを説明 |
| ✓ |
/debug clearstate ユーザー向けに文書化 |
| ✓ |
OnKnowledgeRequested 開発中の透明性のために有効化済み |
| ✓ | 応答にバージョン識別子が含まれている |
| ✓ | 最新バージョンを強制を適宜有効にします |
| ✓ | Greeting トピックには初期化ロジックが含まれます |
| ✓ | フォールバック動作はユーザーフレンドリーです |
| ✓ | 有効期限と更新の認証がテストされました |
| ✓ | Teams 上で実環境でのテストが完了しました |
要点
- アイドル状態トリガーを設定し、必要に応じて状態クリアオプションを使用してセッションのライフサイクルを管理してください。
- クエリ リライトや状態関連メッセージを通じてシステム活動を可視化し、透明性を向上させましょう。
- 手動による挨拶の処理や永続メモリの管理など、Teams 特有の挙動を考慮してください。
- バージョン管理の慣行を導入し、必要に応じて更新を適用することで、エージェントの信頼性を維持します。
- セルフサービス型のトラブルシューティング コマンドや、手順に沿った復旧オプションを提供することで、ユーザーの自律性を支援します。