Copilot Studio には、メッセージではないアクティビティ ( イベント アクティビティ ノード、 呼び出しアクティビティ ノード、アクティビティ プロトコル がサポートするその他のアクティビティ関連ノード) に使用できる一連のノードが用意されています。
活動プロトコルとは
アクティビティ プロトコル は、 Copilot Studio の中核的なトランスポート概念です。 アクティビティ プロトコルを使用すると、ユーザーとエージェント間のシームレスな通信が可能になります。 すべてのインタラクションの標準化された構造を定義し、それらをさまざまなアクティビティ タイプに分類します。
イベント アクティビティと メッセージ アクティビティは、アクティビティ プロトコル内の 2 つの異なる種類であり、それぞれが通信ワークフローで固有の目的を果たします。
メッセージ アクティビティは、ユーザーとエージェントの間の基本的な通信単位を表し、主にテキスト、メディア、アダプティブ カードのコンテンツを含みます。 これらは、ユーザーがクエリまたはステートメントを作成し、それに応じてエージェントが応答する直接的な対話用に設計されています。
一方、イベント アクティビティは通常、非言語アクションまたはシステムによって生成された更新を示すために使用されます。 これにより、非同期通信が可能になり、直接ユーザー対話を必要とせずに特定の機能やワークフローをトリガーできます。 たとえば、イベントアクティビティは、ユーザーが会話に参加したり、周囲のコンテキストが変更されたりすることをエージェントに通知できます。
送信イベント
イベント アクティビティ ノードは、イベント アクティビティを送信するために設計されています。 イベント活動はエージェントから送信され、チャネルによってインターセプトされて使用される可能性があり、チャネルは活動を使用するかどうか、またどのように使用するかを決定します。 イベントを送信するときに名前を付け、イベントの値を設定できます。 この値は任意の形式にすることができます。
- プリミティブなリテラル文字列値
- 変数の参照
- Power Fx 式。
値は JSON リテラルとしてシリアル化され、送信アクティビティに追加されます。
このノードの用途は次のとおりです:
- エージェントから送信されたイベントを処理するようにカスタム Web チャット コントロールを構成します。 たとえば、エージェントから戻ってきたイベントを探して、そのページでアクションを実行できます。
04.api/c.incoming-activity-eventにある サンプルは、イベント処理がどのように動作するかを示しています。 - イベント アクティビティを使用して AudioCodes レコーディング サービスを制御します。たとえば、通話の記録を開始または停止します。 詳細については、通話の記録 を参照してください。
クライアント ツールの使用
オーケストレーション中に、言語モデルに一連のツールを提供します。 ほとんどの人は、ツールを外部システムへの呼び出しと考えています。
ただし、イベント アクティビティを使用してクライアントからツールを実行することもできます。
オーケストレーターがクライアント ツールの実行を決定すると、エージェントは、ツールで定義されている入力を含むイベント アクティビティをクライアントに送信します。
エージェントはアクティビティを送信し、クライアントがアクションを実行して結果を返すのを待ちます。 クライアントが完了すると、応答を含むイベント アクティビティがエージェントに送信されます。 エージェントはこの応答をツールの応答として受け取り、オーケストレーションを続行します。
クライアント ツールのサンプル ペイロード
PowerPointスライドのテキストを取得するクライアント ツールがあるとします。
入力はページ番号で、出力はスライド上のテキストです。
エージェントは、次のようなペイロードを送信できます。
{
"type": "event",
"timestamp": 1738709828,
"from": {
"id": "d9c0dcf9-4045-8062-535b-73fb4dfee954",
"role": 0
},
"name": "getSlideContent",
"replyToId": "f617c120-7b36-496a-a096-ac692efdad04",
"value": {
"page": 5
}
}
操作が終了すると、クライアントは次のようなペイロードをエージェントに送信します。
{
"type": "event",
"timestamp": 1738709828,
"name": "getSlideContent",
"replyToId": "f617c120-7b36-496a-a096-ac692efdad04",
"value": {
"content": "QA slide. Next steps"
}
}
クライアント ツールの設定
クライアント ツールを登録するには、2 つの方法があります。
エージェントのトピックコンテンツの一部として、コードエディタを使用して、エージェントに専用のクライアントタスクアクションを登録できます。
例えば次が挙げられます。
description: this tool retrieves the content of a powerpoint slide
schemaName: GetSlideContent
dialog:
kind: TaskDialog
action:
kind: InvokeClientTaskAction
clientActionInputSchema:
kind: Record
properties:
page:
displayName: Page Number
description: The number of the slide
isRequired: true
type: Number
clientActionResponseSchema:
kind: Record
properties:
content:
displayName: Slide Content
description: The content of the slide
type: String
場合によっては、使用可能なツールは、ホスティング クライアントのコンテキストに基づいて動的です。 作成者は柔軟性を高めるために、システム変数 を設定して、このセッションで使用できる他のクライアント ツールを動的に設定できます。
- kind: SetVariable
id: setVariable_76NZWK
variable: System.ClientPluginActions
value: |-
=[
{
Description: "this tool retrieves the content of a powerpoint slide",
Identifier: "GetSlideContent",
Name: "GetSlideContent",
Response: {mode: "Generated"},
Inputs: [
{
Description: "The name of the menu for the form to launch",
IsAutomatic: true,
IsRequired: true,
Name: "Page Number",
PropertyName: "page",
Type: {
'$kind': "Number"
}
}
],
Outputs: [
{
Description: "The content of the slide",
Name: "Slide Content",
PropertyName: "content",
Type: {
'$kind': "String"
}
}
]
}
]
他のアクティビティタイプの送信
イベント アクティビティに加えて、アクティビティの呼び出し ノードを使用して他の種類のアクティビティを送信できます。 送信できるアクティビティのタイプは、 Bot Framework スキーマ - ActivityTypes クラス で提供されるアクティビティのサブセットです。 このノードを使用する場合は、アクティビティのタイプを選択し、オプションで名前または値を設定します。
一般的なタイプは次のとおりです:
- タイピング – 入力アクティビティを送信します。チャネルはこれを選択でき、クライアントに入力インジケーターが表示されます。
- 呼び出し と 呼び出しの応答 は、Microsoft Teamsに使用されます。 Invoke トリガーを持つトピックを作成して Teams からの受信 Invoke を傍受し、Invoke 応答アクティビティ ノードを使用して適切な応答を Teams に送り返します。
- ハンドオフ 値を明示的に制御するハンドオフ アクティビティを送信します。 ハンドオフは、AudioCodesのような外部チャネルに対して使用されます。