使用自适应卡片返回丰富的响应

已完成

当代理使用带有 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 插件定义文件。