アダプティブ カードを使用してリッチ応答を返す
エージェントが API プラグインを使用してアクションを使用して応答を返すと、API から情報が取得され、言語モデルを使用して処理されます。 言語モデルは、エージェントの指示に一致する人間に優しい応答を返します。 定義済みの手順またはユーザーの指示に基づいて応答を動的に構築すると、エージェントの柔軟性が高くなります。 たとえば、箇条書きや表として情報を提供するように求めることができます。 ただし、この柔軟性は価格で提供されます。エージェントは、情報を提示する最善の方法を常に理解していない場合があります。
API は通常、構造化データを返すので、エージェントがユーザーに情報を表示する方法を制御できます。 エージェントが API からデータを表示する方法を制御するには、API プラグインでアダプティブ カード テンプレートを定義します。
エージェントが API からのデータを表示するために使用するアダプティブ カード テンプレートを定義するには、API プラグイン定義の応答セマンティクス部分で static_template プロパティを使用します。 次のスニペットは、アダプティブ カード テンプレートの例を示しています。
{
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.5",
"body": [
{
"type": "Container",
"items": [
{
"type": "Image",
"url": "${image_url}",
"size": "large"
},
{
"type": "TextBlock",
"text": "${name}",
"weight": "Bolder"
},
{
"type": "TextBlock",
"text": "${description}",
"wrap": true
},
{
"type": "TextBlock",
"text": "Allergens: ${if(count(allergens) > 0, join(allergens, ', '), 'none')}",
"weight": "Lighter"
},
{
"type": "TextBlock",
"text": "**Price:** €${formatNumber(price, 2)}",
"weight": "Lighter",
"spacing": "None"
}
]
}
]
}
API 応答のプロパティを参照し、アダプティブ カードテンプレートの一部である ${...} 式に注目してください。 実行時に、エージェントは関数が返すデータを受け取り、指定したテンプレートの上にオーバーレイして、データが格納されたアダプティブ カードを作成します。
API から複数の項目が返されると、エージェントはアダプティブ カードを使用して 1 つの項目を表示します。 引用文献の上にマウス ポインターを置くと、ユーザーにカードが表示されます。
重要
関数のアダプティブ カードを構築するときは、常に 1 つの項目を表示する点に注意してください。 複数の項目を返す関数を実装するときに、1 つの項目のカードを構築するのは最初は直感に反する可能性があります。 エージェントは LLM を使用してユーザーに対する応答を構築しますが、それでも各項目の豊富なプレビューを表示する機能を提供することを望んでいるので、API 応答全体ではなく、1 つの項目のテンプレートを提供する必要があります。
API が 1 つの項目を返すと、エージェントは応答にカードを直接含めることができます。
ヒント
関数で使用するアダプティブ カードを構築する場合、各カード テンプレートを個別のファイルに構築するのが最も便利です。 Adaptive Card Previewer Microsoft 365 Agents Toolkit 拡張機能を使用すると、データ ファイルを作成し、Visual Studio Code で直接カードをプレビューできます。 カードの準備ができたら、その内容を API プラグイン定義ファイルにコピーします。