为机器人创建 AWS Lambda 函数 - Amazon Lex

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为机器人创建 AWS Lambda 函数

要为您的 Amazon Lex V2 机器人创建 Lambda 函数,请从您的 AWS Management Console 访问 AWS Lambda 并创建一个新函数。了解有关 AWS Lambda 的更多详细信息,请参阅 AWS Lambda 开发者指南

  1. 访问 https://console.aws.amazon.com/lambda/,登录 AWS Management Console 并打开 AWS Lambda 控制台。

  2. 在左侧边栏中选择函数

  3. 选择创建函数

  4. 您可以选择从头开始创作以最少的代码开始,选择使用蓝图以从列表中选择常见用例的示例代码,或者选择容器镜像为您的函数选择要部署的容器镜像。如果您选择从头开始创作,请继续执行以下步骤:

    1. 给您的函数起一个有意义的函数名称来描述它的作用。

    2. 运行时下拉菜单中选择一种语言来编写函数。

    3. 为您的函数选择一个指令集架构

    4. 默认情况下,Lambda 创建具有基本权限的新角色。要使用现有角色或通过 AWS 策略模板创建角色,请展开更改默认执行角色菜单并选择一个选项。

    5. 展开高级设置菜单以配置更多选项。

  5. 选择创建函数

从头开始创建新函数时所看到的内容如下图所示。

新的 Lambda 函数。

Lambda 处理程序函数因您使用的语言而异。它至少需要一个 event JSON 对象作为参数。您可以进入 用于 Lex V2 的 AWS Lambda 输入事件格式 查看 Amazon Lex V2 提供的 event 中包含的字段。修改处理程序函数,最终返回与 用于 Lex V2 的 AWS Lambda 响应格式 中所述格式相匹配的 response JSON 对象。

  • 编写完函数后,选择部署以允许使用该函数。

请记住,您最多可以将每个机器人别名与一个 Lambda 函数相关联。但是,您可以在 Lambda 代码中为机器人定义任意数量的函数,然后在 Lambda 处理程序函数中调用这些函数。例如,虽然同一个机器人别名中的所有意图都必须调用相同的 Lambda 函数,但您可以创建一个路由器函数来为每个意图激活单独的函数。可以为应用程序使用或修改的路由器函数示例如下所示:

import os import json import boto3 # reuse client connection as global client = boto3.client('lambda') def router(event): intent_name = event['sessionState']['intent']['name'] fn_name = os.environ.get(intent_name) print(f"Intent: {intent_name} -> Lambda: {fn_name}") if (fn_name): # invoke lambda and return result invoke_response = client.invoke(FunctionName=fn_name, Payload = json.dumps(event)) print(invoke_response) payload = json.load(invoke_response['Payload']) return payload raise Exception('No environment variable for intent: ' + intent_name) def lambda_handler(event, context): print(event) response = router(event) return response

何时在机器人对话中使用 AWS Lambda 函数

在与用户的对话中,您可以在以下时间使用 Lambda 函数:

  • 在识别意图后的初始响应中,例如,在用户说要订购披萨之后。

  • 从用户引发槽位值后,例如,在用户告诉机器人他们要订购的披萨大小之后。

  • 在每次重试之间引发一个槽位时,例如,客户没有使用公认的披萨尺寸时。

  • 确认意图时,例如,在确认披萨订单时。

  • 要履行意图时,例如,要订购披萨时。

  • 在履行意图之后以及机器人结束对话之前。例如,切换到点饮料的意图时。