使用自适应卡片返回丰富的响应
当代理使用带有 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 返回多个项时,代理将使用自适应卡片来显示单个项。 用户通过将鼠标悬停在引文上来查看卡:
重要
为函数生成自适应卡片时,请记住,它们始终显示单个项。 最初,在实现返回多个项的函数时,为单个项生成卡可能违反直觉。 请记住,代理使用 LLM 构造对用户的响应,但仍希望提供显示每个项的更丰富的预览功能,这就是为什么你需要为它提供单个项的模板,而不是整个 API 响应。
当 API 返回单个项时,代理可能会在其响应中直接包含卡:
提示
生成用于函数的自适应卡片时,你会发现在单独的文件中生成每个卡模板最方便。 使用自适应卡片预览器 Microsoft 365 Agents Toolkit 扩展,可以创建数据文件并直接在 Visual Studio Code 中预览卡。 卡准备就绪后,将其内容复制到 API 插件定义文件。