変数の使用
重要
Power Virtual Agents 機能は、生成 AI への多大な投資と Microsoft Copilot 全体の統合の強化により、現在 Microsoft Copilot Studio の一部となっています。
ドキュメントやトレーニング コンテンツが更新される間、一部の記事やスクリーンショットで Power Virtual Agents が参照される場合があります。
変数を使用して顧客の応答を保存し、会話の後半でコンテンツを再利用することができます。
変数を使用して、顧客を動的に別の会話パスにルーティングする論理式を作成することもできます。 たとえば、顧客の名前を UserName
という変数に保存し、コパイロットは会話が継続しているときに名前で顧客に対応できます。
また、変数は他のトピックやPower Automateフローに渡したり、返したりすることができます。
変数は、次の 3 つのレベルまたはスコープ内に存在できます。
- トピック変数は、作成されたトピック内でのみ使用することができます。 このスコープが、作成された変数の既定値です。
- グローバル変数はすべてのトピックで使用することができます。 トピック変数のスコープを変更し、グローバル変数にすることができます。
- システム 変数 は、コパイロットで自動的に作成されます。 それらは、会話またはユーザーについてより多くのコンテキスト情報を提供します。 すべてのトピックで使用可能です。
変数の型
変数は基本タイプと関連付けられます。 型は、変数が含むことのできる値や、論理式を構成する際に使用できる演算子を決定します。
タイプ | Description |
---|---|
String | テキストを表すために使用される一連の文字 |
ブール型 | true または false の論理値 |
回数 | 任意の実数 |
テーブル | 値のリスト。ただし、すべての値は同じ型である必要があります |
Record | 名前と値のペアのコレクション。値は任意の型 |
DateTime | ある時点に関する日付、時刻、曜日、または月 |
選択肢 | 関連する同義語を持つ文字列値のリスト |
空白 | 「値がない」または「不明な値」のプレースホルダー。詳細については、Power Fx の空白を参照してください |
変数の型は、値が最初に割り当てられるときに設定されます。 その後、変数の型は固定され、他の型の値を割り当てることはできなくなります。 たとえば、開始値 1
の変数には 数値 型が割り当てられます。 これを 文字列 値の "apples"
に代入しようとするとエラーになります。
コパイロットをテストする際、変数が一時的に 不明 の型として表示される場合があります。 不明の変数はまだ値が割り当てられていない場合を指します。
変数の順序は、作成キャンバスの上から下に決定されます。 つまり、作成キャンバスの上部にあるノードは、下部にあるノードの前に考慮されます。 条件ノードで分岐を作成するとき、ブランチは左から右に並べられます。 つまり、一番左の分岐のノードは、一番右の分岐のノードの前に考慮されます。
エンティティ
Microsoft Copilot Studio は、エンティティ を使用して、ユーザーの応答から特定の種類の情報を識別します。 識別された情報は、情報に適した型の変数に保存されます。 次の表に、事前に構築されたエンティティに関連付けられている変数の基本型を一覧表示します。
Entity | 変数の基本型 |
---|---|
複数選択オプション | 選択肢 |
ユーザーの応答全体 | String |
年齢 | 回数 |
ブール型 | ブール型 |
都市 | String |
Color | String |
大陸 | String |
国または地域 | String |
日時 | DateTime |
メール | String |
イベント | String |
整数 | 整数 |
Language | String |
Money | 回数 |
回数 | 回数 |
Ordinal | 回数 |
Organization | String |
Percentage | 回数 |
個人名 | String |
電話番号 | String |
注目ポイント | String |
速度 | Number |
状態 | String |
番地 | String |
温度 | 回数 |
[URL] | String |
重さ | 回数 |
郵便番号 | String |
ユーザー定義エンティティ | 選択肢 |
変数を作成する
質問 ノードなど、出力として変数を選択するよう求めるノードは、適切な型の出力変数を自動で作成します。
使用するエンティティを選択する
既定では、質問ノードは複数選択式オプションで作成されます。 異なる事前構築済みエンティティまたはカスタム エンティティを使用するには、特定 ボックスを選択して、コパイロットがリッスンする情報の種類を選択します。
変数名を変更する
変数には、作成する時に自動的に名前が付けられます。 ベスト プラクティスは、変数にわかりやすい名前を付けて、コパイロットを管理する必要がある他のユーザーに目的を明確にすることです。
変数を選択し、変数プロパティ ウィンドウで開きます。
変数名に、変数の新しい名前を入力します。
変数を設定する
通常、質問 ノードを使用して、ユーザーによる入力を変数に保存します。 ただし、値を自分で設定したい状況もあります。 このような場合、変数値の設定ノードを使用します。
ノードの追加 (+) を選択してノードを追加し、変数値を設定するを選択します。
変数の設定の下にあるボックスを選択し、新しい変数を作成するを選択します。
新しい変数が作成されました。 値を割り当てるまでその型は不明です。
対象値には、次のいずれかの方法で値を指定します:
- リテラル値を入力します。
- 同じ型の既存の変数を選択します。 このアクションにより、選択した変数と同じ値が設定されます。
- Power Fx 式を使用します。 Power Fx 式は、Table 型や Record 型などのリテラル値を使用できない、より複雑な型に有効です。
リテラル値の使用
変数値を選択する代わりに、任意の変数にリテラル値を入力することができます。
ノードは、文字列、数値、またはブール型のリテラル値を解釈しようとします。 たとえば、123
は数値として解釈されます。 文字列の値として解釈する場合は、"123"
のように値を二重引用符で囲んでください。
いくつかのシナリオや、より複雑な型を使用する場合は、特定の型を設定するために Power Fx 式を使用します。
変数ペイン
変数ウィンドウでは、定義または使用されているノードに関係なく、トピックで使用可能なすべての変数を表示することができます。 変数ごとに、他のトピックから値を受け取るか、その値を他のトピックに返すか、またはその両方を行うかを選択できます。 変数を選択して、変数のプロパティ ウィンドウでプロパティを編集することもできます。
変数ウィンドウを開くには、トピックのメニュー バーで、変数を選択します。
変数プロパティ ペイン
変数のプロパティ ウィンドウで、変数の名前を変更したり、変数が使用されている場所を確認したり、変数をグローバル変数に変換したりすることができます。 ただし、グローバル変数からトピック変数に戻すことはできません。 また、他のトピックから値を受け取るか、その値を他のトピックに渡すかを選択することもできます。
変数プロパティ ウィンドウを開くには、変数ウィンドウで変数を選択します。 任意のノードで変数を選択して、変数のプロパティ ウィンドウを開くこともできます。
システム変数
すべてのコパイロットには、会話に関する追加情報を提供する組み込みシステム変数が用意されています。
すべてのシステム変数が一覧に表示されるわけではありません。 これら非表示のシステム変数にアクセスするには、Power Fx 式を使用する必要があります。
Power Fx 式でシステム変数を使用するには、変数名の前に System.
を付ける必要があります。 たとえば、式にシステム変数 User.DisplayName
を含めるには、System.User.DisplayName
として参照する必要があります。
件名 | タイプ | 非表示 | Definition |
---|---|---|---|
Activity.Channel | 選択肢 | 表示可 | 現在の会話のチャンネル ID |
Activity.ChannelData | 指定なし | hidden | チャンネル固有のコンテンツを含むオブジェクト |
Activity.ChannelId | string | hidden | 現在の会話のチャンネル ID (文字列) |
Activity.From.Id | string | hidden | 送信者のチャンネル固有の一意の ID |
Activity.From.Name | string | hidden | チャンネル固有のユーザー フレンドリーな送信者名 |
Activity.Name | string | 表示可 | イベントの名前 |
Activity.Text | string | 表示可 | ユーザが最後に送信したメッセージ |
Activity.Type | 選択肢 | 表示可 | 活動の種類 |
Activity.TypeId | string | hidden | アクティビティの種類 (文字列) |
Activity.Value | 指定なし | hidden | オープン エンドの値 |
Bot.Name | string | 表示可 | コパイロットの名前 |
Channel.DisplayName | string | hidden | チャンネルの表示名 |
Conversation.Id | string | 表示可 | 現在の会話の一意の ID |
LastActivity.Id | string | 表示可 | 前回送信した活動 の ID |
LastMessage.Id | string | 表示可 | ユーザが前に送信したメッセージの ID |
LastMessage.Text | string | 表示可 | ユーザーが前に送信したメッセージです |
Recognizer.TriggerMessage.Id | string | 表示可 | 現在のトピックをトリガーしたユーザー メッセージの ID |
Recognizer.TriggerMessage.Text | string | 表示可 | 現在のトピックをトリガーしたユーザー メッセージ |
User.DisplayName | string | 表示可 | サインイン ユーザーの表示名 |
トピック間で変数を渡す
あるトピックを別のトピックにリダイレクトすると、元のトピックと宛先トピックの間で変数の値を渡すことができます。 トピック間で変数を渡すことは、後のトピックが必要とする情報がすでに収集されている場合に特に役立ちます。 ユーザーは、同じ質問に再度答える必要がないことを評価するでしょう。
他のトピックから値を受け取る
トピックが変数を (例えば、質問ノードで) 定義すると、コパイロットは変数の値を入力するようにユーザーに質問を行います。 前のトピックですでにコパイロットが値を取得している場合は、再度質問をする理由はありません。 このような場合、変数を他のトピックから値を受け取るに設定することができます。 別のトピックがこのトピックにリダイレクトされるとき、この変数に変数の値 (またはリテラル値) を渡して、質問をスキップすることができます。 ユーザーからコパイロットへの会話のエクスペリエンスはシームレスです。
この例では、「グリーティング」と「顧客と交渉する」の 2 つのトピックを使用します。 両方のトピックが顧客の名前を尋ねます。 ただし、「グリーティング」トピックが最初に実行される場合、「顧客と交渉する」トピックはその質問をスキップします。 代わりに、「グリーティング」トピックから渡された変数の値を使用します。
「顧客と交渉する」トピックのフローは次のとおりです。
コパイロットのテスト ペインに示されているように、このトピックが最初にトリガーされると、ユーザーに「何とお呼びしたらよいですか?」と尋ねます。値を userName
という文字列変数に格納します。 userName
変数は、他のトピックから値を取得するようにも設定されています。 トピックは「素晴らしい一日になることを願っています、{userName}!」というメッセージで締めくくります。
「グリーティング」トピックのフローは次のとおりです。
コパイロットのテスト ペインに示されているように、このトピックが最初にトリガーされると、ユーザーに「お名前は?」と尋ねます。値を UserName
という文字列変数に格納します。 トピックは、「はじめまして、{UserName}!」というメッセージを送信します。次に、「顧客と交渉する」トピックにリダイレクトされ、「素晴らしい一日になることを願っています、{userName}!」というメッセージが送信されます。ただし、「顧客と交渉する」トピックでは、ユーザーの名前を再度尋ねることがスキップされたことに注目してください。 代わりに、「グリーティング」トピックから渡された UserName
変数の値が使用されました。
最後に、2 つ目の会話を再度示します。今回は「顧客と交渉する」トピックの視点からです。
他のトピックから値を受け取るようにトピックを設定する手順を見ていきましょう。 現在の例を使用しますが、トピックが以前のトピックから値を取得する必要がある場合はいつでも同じ手順が機能します。
宛先のトピックを設定する
宛先トピックは、リダイレクト先のトピックであり、他のトピックから値を受け取ります。 この例では、「顧客と交渉する」です。
宛先トピックを作成するか、そこに移動します。
質問ノードを追加し、メッセージに
What should I call you?
を入力します。特定の下で、構築済みエンティティ 個人名 を選択します。
変数を選択し、変数プロパティ ウィンドウが開きます。
userName
という名前を付けて、他のトピックから値を受け取るを選択します。メッセージ ボックスに、
I hope you're having a wonderful day,
を入力します。変数の挿入アイコン ({x}) を選択し、userName を選択します。
変数の後のスペースを選択し、
!
と入力します。トピックを保存します。
ソース トピックを設定する
ソース トピックはリダイレクトを行うトピックのことで、宛先トピックに渡される値を提供します。 この例では、「グリーティング」です。
ソース トピックに移動します。
リダイレクト ノードの追加を選択し、宛先トピックを選択します。
+ 入力の追加を選択し、値を渡す先の宛先トピックからの変数を選択します。
> アイコンを選択し、値を渡す変数を選択します。
リダイレクト ノードは次のようになります。
トピックを保存します。
値を元のトピックに戻す
トピックがリダイレクトされる場合や、質問をすることや他の方法で変数を取得する場合、変数は元のトピックに返すことができます。 変数も元のトピックの一部となり、他の変数と同様に使用することができます。 コパイロットが取得する情報がトピック全体で利用できるようにし、グローバル変数 の必要性を減らすことができます。
前のセクションからの例を継続しましょう。 「顧客と交渉する」トピックで新しい質問をしてから、「グリーティング」トピックに回答を返します。
返される変数のソース トピックを設定する
トピックに変数を返す場合、ソース トピックはリダイレクトされたトピックであり、元のトピックに戻される値を提供します。 この例では、「顧客と交渉する」です。
ソース トピックに移動します。
質問ノードを追加し、メッセージに
What city do you live in?
を入力します。特定 配下で、構築済みエンティティ 都市 を選択します。
変数を選択し、変数プロパティ ウィンドウが開きます。
userCity
という名前を付けて、元のトピックへ値を返すを選択します。トピックを保存します。
返される変数の宛先トピックを設定する
変数をトピックに返す場合、宛先トピックはリダイレクトを行っているトピックのことで、他のトピックから値を受け取るトピックです。 この例では、「グリーティング」です。
宛先のトピックに移動します。
ソース トピックで選択した変数は、リダイレクト ノードに出力変数として表示されます。
トピックを保存します。
関連トピック
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示