Alexa Python 开发:构建和部署 Alexa Skill2025年1月8日 | 阅读 17 分钟 亚马逊 Alexa 是亚马逊开发的虚拟助手。它可以进行语音交互、播放音乐、创建待办事项列表、设置闹钟、播放播客、播放有声读物,并提供实时天气、新闻和交通信息。Alexa 还能够控制各种智能设备,包括灯光、开关、恒温器等。 Python 是一种流行的编程语言,用于构建各种应用程序,包括适用于 Alexa 等虚拟助手的基于语音的应用程序。开发人员可以使用适用于 Python 的 Alexa 技能工具包 (ASK) SDK 为 Alexa 创建可处理语音命令和生成语音响应的自定义技能。 Alexa Python 开发是使用 Python 构建和部署 Alexa 技能的过程。它涉及使用适用于 Python 的 Alexa 技能工具包 SDK、AWS Lambda 和 Alexa 开发人员控制台来创建和发布适用于 Alexa 的自定义技能。 在此过程中,您将在 Alexa 开发人员控制台中创建新技能,编写技能逻辑和响应处理的 Python 代码,将代码部署到 AWS Lambda,并使用 Alexa 开发人员控制台或支持 Alexa 的设备测试技能。 要开始 Alexa Python 开发,您必须对 Python 编程、AWS Lambda 和适用于 Python 的 Alexa 技能工具包 SDK 有基本了解。您还需要一个 AWS 账户和一个支持 Alexa 的设备来测试您的技能。 在开发过程结束时,您将使用 Python 创建一个自定义 Alexa 技能,该技能可以处理语音命令并生成语音响应,从而使您能够以新颖有趣的方式与 Alexa 互动。 必须创建免费的 Alexa 开发人员资料。以下是创建免费 Alexa 开发人员账户 (https://developer.amazon.com/alexa/alexa-skills-kit) 的一般步骤
所需的 Alexa 技能Alexa 技能的两个最重要的组成部分是技能界面和技能服务。 技能界面定义了用户和技能之间的语音交互,而技能服务处理技能响应的生成和处理。这两个组件对于成功开发 Alexa 技能都至关重要。
技能界面定义了用户如何与技能交互。它包括调用名称、意图和话语。调用名称是用户激活技能时所说的话,例如“Alexa,打开 [技能名称]”。意图定义了用户可以在技能中执行的操作,例如“播放歌曲”或“告诉我天气”。话语将用户的口语短语映射到特定的意图。 设计良好的技能界面对于 Alexa 技能的成功至关重要。它应该易于使用和理解,并为用户提供自然直观的交互体验。
技能服务应设计为能够处理各种场景并提供强大的错误处理。它应该针对性能进行优化,以确保用户收到快速可靠的响应。技能服务可能还需要与其他系统和服务(例如数据库或第三方 API)集成,以提供必要的功能。 技能服务可以托管在 AWS Lambda 函数或 Web 服务上。当用户与 Alexa 技能交互时,请求将发送到技能服务,技能服务处理请求并将响应发送回 Alexa 以供播放。 使用 Python 进行 Alexa 开发的一些优点包括其易用性、简单性和灵活性。Python 是一种高级编程语言,提供了各种库和工具,可以简化开发过程并使其更容易构建自定义技能。 设置环境在开始使用 Python 构建和部署 Alexa 技能之前,您需要设置您的环境。以下是设置环境的步骤
设置好环境后,您就可以开始使用 Python 开发和分发 Alexa 技能了。 注册账户您需要一个亚马逊开发者账户才能注册 Alexa 开发者控制台。如果您已经拥有亚马逊开发者账户,您可以按照以下步骤登录
理解 Alexa 技能模型Alexa 技能模型是 Alexa 开发人员控制台中 Alexa 技能的语音用户界面 (VUI) 的可视化表示。它由三个主要组件组成:调用名称、意图和槽位。
![]() 要在 Alexa 开发人员控制台中创建新的技能模型,您需要遵循以下步骤
定义 Alexa 技能的技能模型后,您可以使用 Alexa 开发人员控制台的测试工具测试交互模型。测试工具允许您模拟与技能的语音交互并验证响应。 登录 Alexa 开发者控制台,点击“创建技能”按钮。
选择技能模型(自定义或预构建)并选择语言
定义技能的调用名称。
定义技能的意图。
![]() 在此过程中,我们使用这些来处理用户输入。
当用户输入语音或文本时,JSON 输入对象由输入数据构建。JSON 输入对象包括请求类型、用户的输入意图以及任何相关的槽位值等信息。 ![]()
定义技能的槽位。
构建您的技能
构建技能后端构建技能后端涉及开发驱动技能功能的代码。这通常涉及编写能够处理用户输入、处理输入并提供适当输出响应的代码。 您可以使用适用于 Python 的 Alexa 技能工具包 SDK 等工具来构建技能后端。此 SDK 提供了一组 Python 库和工具,可以帮助您编写与 Alexa 服务交互的代码。在为技能构建后端时,您通常会首先在 Alexa 开发人员控制台中定义技能的意图和槽位。这些意图和槽位为您的后端代码提供了工作框架,允许您以结构化的方式处理用户输入。 代码片段 这从适用于 Python 的 Alexa 技能工具包 SDK 导入必要的类和函数。SkillBuilder 类用于构建技能的请求和响应处理程序。Response 类定义要发送回用户的响应。AbstractRequestHandler 和 AbstractExceptionHandler 类分别用作意图处理程序和异常处理程序的基类。 代码片段 这定义了一个名为 sb 的 SkillBuilder 对象和一个名为 HelloWorldIntentHandler 的类。HelloWorldIntentHandler 的 can_handle 方法在传入请求是针对 HelloWorldIntent 意图时返回 True;否则,返回 False。 ask_utils 模块的 is_intent_name 方法用于检查意图的名称。ask_utils 是一个为 Alexa Skill Kit SDK for Python 提供实用函数的模块。它的导入方式如下: 代码片段 handler_input 是传递给 can_handle 方法的参数,表示传入请求。 代码片段 这定义了异常处理程序类的 handle 方法。当处理请求时发生异常时,将调用此方法。handle 方法使用 speak_output 变量将要回传给用户的输出消息定义为“抱歉,发生错误。请稍后重试。”。handler_input 对象的 response_builder 属性用于构建将发送回用户的响应。response_builder 的 speak 方法用于设置 Alexa 将回传给用户的消息。 代码片段 我们还定义了一个名为“CatchAllExceptionHandler”的异常处理程序,它捕获在技能执行期间可能发生的任何错误。此异常处理程序会响应一条消息,指示发生错误并建议用户稍后重试。 最后,我们将意图处理程序和异常处理程序添加到 SkillBuilder 对象中,并定义一个 Lambda 函数处理程序,该处理程序使用此 SkillBuilder 对象来处理传入请求。 代码片段 这会创建 SkillBuilder 类的一个实例并将其分配给 sb 变量。接下来,它使用 SkillBuilder 实例的 add_request_handler 方法将 HelloWorldIntentHandler 类的一个实例注册为技能的请求处理程序。当技能收到带有 HelloWorldIntent 的传入请求时,HelloWorldIntentHandler 实例将处理该请求。然后,它使用 SkillBuilder 实例的 add_exception_handler 方法注册一个异常处理程序类 CatchAllExceptionHandler 的实例。当技能的意图处理程序中抛出异常时,将调用此异常处理程序。 提交您的技能以进行认证。构建并测试您的技能后,您可以将其提交给亚马逊进行认证。认证确保您的技能符合亚马逊的质量标准并与 Alexa 正常工作。您的技能获得认证后,用户将可以通过 Alexa 技能商店使用它。 创建笑话意图处理程序要创建 JokeIntent 处理程序,您可以遵循与我们之前讨论的 HelloWorldIntent 处理程序类似的过程。 这是一个代码块示例,演示了如何创建 JokeIntentHandler 代码片段 在此,我们创建了一个 JokeIntentHandler 类,它扩展了 AbstractRequestHandler 类。与 HelloWorldIntentHandler 类似,我们定义了一个 can_handle 方法,如果传入请求的意图名称为 JokeIntent,则返回 True。如果意图匹配,将调用 handle 方法来处理请求。 我们调用一个自定义函数 get_random_joke() 来检索一个随机笑话,然后构建一个字符串 speak_output,其中包含笑话,并使用 response_builder 对象构建一个以笑话作为语音输出的响应。 最后,我们通过调用 response_builder 对象的 response 方法返回响应对象。要在您的技能中使用此处理程序,您将以与 HelloWorldIntentHandler 相同的方式将其注册到 SkillBuilder 实例。 代码在编辑器中如下所示 ![]() 创建意图处理程序类后,您必须将其作为参数发送到 SkillBuilder.add_request_handler。通过滚动到底部将下一行添加到 lambda_function.py 代码片段 鉴于代码是从上到下读取的,因此记住此行的位置至关重要。因此,请确保对 InstantReflectHandler() 类的调用在对自定义意图处理程序的调用之前。 它应该看起来像这样 代码片段 好的,是时候测试您的代码了!要构建后端服务并保存修改,请点击“部署”按钮。您将验证您的 Alexa 技能前端,以查看其是否按计划执行。 添加笑话向 Alexa 技能添加笑话是增强用户体验并为对话增添幽默感的有趣方式。可以通过定义新意图并创建自定义意图处理程序来处理意图请求,从而向技能添加笑话。 处理程序可以编程为从预定义列表中生成随机笑话,或从外部 API 或数据库获取笑话。然后,笑话可以作为对用户请求的响应返回,使对话更具吸引力和娱乐性。笑话还可以展示技能的功能和特性,同时提供独特的用户体验。 向 Alexa 技能添加笑话还可以创建更自然的对话流程,允许技能以更具对话性的语气响应用户的请求。它还有助于提高用户参与度和留存率,因为用户更有可能回到他们觉得有趣和愉快的技能。 以下是向笑话意图处理程序添加笑话的示例 代码片段 这是 JokeIntentHandler 类的定义。此类是一个请求处理程序,负责处理对“JokeIntent”意图的请求。
代码片段 在这段代码中,定义了一个笑话列表。列表的元素都是字符串,每个字符串都包含一个笑话。当触发 JokeIntent 时,这些笑话将被随机选择并作为技能输出返回。 此列表中包含的笑话是双关语和文字游戏,这是许多 Alexa 技能中常用的笑话。 代码片段 在这段代码中,我们正在创建一个变量 speak_output,它使用 random.choice() 方法从 jokes 列表中随机选择一个笑话。这将确保每次触发意图时都会讲述一个不同的笑话。我们调用它的 speak() 方法将语音输出设置为所选笑话,然后调用 response() 方法来构建并返回响应。然后,我们使用 handler_input.response_builder 对象返回一个响应。 编辑器中的代码如下所示 ![]() 请记住 您可以编写包含任何您喜欢的笑话的代码,但 JokeIntentHandler 类中的代码必须准确。 结论恭喜您开始您的 Alexa Python 开发人员生涯!您自己独有的 Alexa Python 技能现在已成功创建。您现在了解了如何开发新技能、生成意图、实现 Python 代码来管理这些意图,并向用户提供有用的数据。 下一主题AppConfig Python |
我们请求您订阅我们的新闻通讯以获取最新更新。