生成式人工智能驱动的开发辅助指南-全-

生成式人工智能驱动的开发辅助指南(全)

原文:zh.annas-archive.org/md5/9d192ba7d1094ca4ead3882db81b97db

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

在这个技术发展迅速的世界中,开发者面临着管理重复性任务并保持生产力的挑战。本书通过 Amazon Q 开发者提供了一个解决方案,这是一个由生成式 AI 驱动的助手,旨在优化编码、简化工作流程并加速软件开发。

这本书的旅程将带您了解 Amazon Q 开发者的设置和定制,展示如何利用其功能在多个 IDE 和编程语言中进行自动代码生成、解释和转换。您将学习如何使用 Amazon Q 开发者来提升编码体验,生成准确的代码参考,并通过扫描漏洞来确保安全性。此外,本书还涵盖了使用 Amazon Q 开发者进行与 Amazon Web Services (AWS) 相关的任务,包括构建解决方案、应用架构最佳实践和错误排除。每一章都提供了实用的见解和逐步指南,帮助您将这个强大的工具完全集成到您的开发过程中。

在本书结束时,您将掌握 Amazon Q 开发者,这将使您能够加速您的软件开发生命周期,提高代码质量,并更快、更高效地构建应用程序。

本书面向对象

这本书面向使用 AWS 服务的编码者、软件开发者、应用程序构建者、数据工程师和技术资源。您将学习如何利用 Amazon Q 开发者的功能来提高生产力和加速业务成果。需要基本的编码技能。本书涵盖了轻松的代码实现、解释、转换和文档化,帮助您更快地创建应用程序并改善您的开发体验。

本书涵盖内容

第一章生成式 AI 助手简介,将向您介绍生成式 AI 助手是什么以及它们是如何工作的。我们将探讨一些面向软件开发者和应用程序构建者的助手类型,以及它们如何提高生产力和改善用户体验。

第二章介绍和设置 Amazon Q 开发者,阐述了 Amazon Q 开发者的基础和功能。我们将探讨如何启用该服务,使其能够与多个 IDE、命令行以及各种 AWS 服务协同工作。

第三章理解自动代码生成技术,提供了 Amazon Q 开发者可以协助的不同自动代码生成技术的见解。

第四章, 使用自动代码生成提高 Python 和 Java 的编码效率,探讨了如何使用亚马逊 Q 开发者为开发者使用的两种最突出的编程语言(Python 和 Java)提供代码建议。我们将通过构建一个使用这两种编程语言的示例应用程序,向您介绍不同的自动代码生成技术。

第五章, 使用自动代码生成提高 C 和 C++的编码效率,探讨了如何使用亚马逊 Q 开发者为 C 和 C++提供代码建议。

第六章, 使用自动代码生成提高 JavaScript 和 PHP 的编码效率,探讨了如何使用亚马逊 Q 开发者为网络开发者使用的两种重要编程语言(JavaScript 和 PHP)提供代码建议。

第七章, 使用自动代码生成提高 SQL 的编码效率,探讨了如何使用亚马逊 Q 开发者为最广泛使用的数据库管理和数据操作语言(SQL)提供代码建议。

第八章, 使用自动代码生成提高命令-行和 Shell 脚本的编码效率,探讨了如何使用亚马逊 Q 开发者为命令行和 Shell 脚本提供代码建议。

第九章, 使用自动代码生成提高 JSON、YAML 和 HCL 的编码效率,探讨了如何使用亚马逊 Q 开发者为在 AWS CloudFormation 和 Terraform 等突出的基础设施即代码服务中使用的 JSON、YAML 和 HCL 格式提供代码建议。

第十章, 自定义代码建议,探讨了如何使用亚马逊 Q 开发者的自定义功能,以允许与组织的内部库、专有算法技术和企业代码风格一致的代码建议。

第十一章, 理解代码引用,探讨了如何使用亚马逊 Q 开发者指示生成的代码的引用。我们还将探讨如何开启/关闭引用以及如何选择退出引用。

第十二章, 简化代码解释、优化、转换和功能开发,探讨了亚马逊 Q 开发者如何帮助解释、重构、修复和优化代码。我们还将探讨它如何通过将代码转换为编程语言的新版本来升级项目。通过示例,还将讨论功能开发的概念。

第十三章, 简化代码扫描和修复安全漏洞,深入探讨了亚马逊 Q 开发者如何扫描代码漏洞,并建议如何修复代码中的安全问题。

第十四章, 在 AWS 上加速数据工程,涵盖了 Amazon Q Developer 如何帮助数据工程师和开发人员在 AWS 提供的许多服务和工具中进行编码。

第十五章, 在 AWS 上加速构建解决方案,探讨了如何使用 Amazon Q Developer 获取关于各种主题的 AWS 特定指导和建议,例如解决方案架构、最佳实践、优化资源以及成本。它还有助于解决错误和支持问题。

第十六章, 在 AWS 上加速 DevOps 流程,探讨了如何使用 Amazon Q Developer 在 Amazon CodeCatalyst 中加速应用程序代码构建过程。

要充分利用本书

对 Python、Java、C、C++、JavaScript 和 PHP 等编程语言的基本理解将帮助您在 Amazon Q Developer 的帮助下更快地构建本书中的示例应用程序。

要开始使用 Amazon Q Developer,您需要有一个AWS Builder ID,这是一个免费的 ID,只需提供您的电子邮件 ID 即可轻松设置,或者一个AWS 身份中心登录。对于利用 Amazon Q Developer 与其他 AWS 服务(包括 Amazon SageMaker Studio、Amazon EMR Studio、Amazon Glue Studio、Amazon Redshift 和 AWS Lambda)的章节,您需要一个AWS 账户。Amazon Q Developer 的许多功能在免费级别即可使用,而某些功能仅在专业级别可用。尽管在这本书中我们强调了仅在专业级别可用的功能,但建议您始终参考 Amazon Q Developer 定价文档以获取最新更新,相关链接在第二章的末尾提供。该章节还涵盖了为多个 IDE、命令行以及各种 AWS 服务所需的设置。

软件/硬件要求 操作系统
VS Code、Visual Studio 或 JetBrains IDE Windows、macOS X 和 Linux(任何)

注意

本书没有 GitHub 仓库,因为本书中的大部分代码都是由 Amazon Q 生成的,并将根据读者的提示而变化。虽然代码示例包括在内,以帮助说明书中讨论的概念并确保解决方案的连续性,但它们仅用于参考。鼓励您根据自己的提示进行实验,并将解决方案适应您的特定需求。对于寻求额外资源的人,请参考官方文档和社区论坛以获取进一步指导和支持。

注意,第四章至第九章展示了 Amazon Q Developer 如何通过在众多支持的编程语言中自动生成代码来提高开发者的生产力。请根据您的专业或偏好直接跳转到您最感兴趣的章节。

你可能会在几个提示和屏幕截图中发现一些错别字。我们故意没有纠正它们,以突出亚马逊 Q 开发者即使在不正确的语法提示下也能理解所请求的底层含义。

使用的约定

本书使用了多种文本约定。

文本中的代码:表示文本中的代码单词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 昵称。以下是一个示例:“因此,代码compression:glue.Compression.SNAPPY在构建阶段将无法编译。”

代码块设置如下:

code to improve
def display_weather_table(temperature_data):
    df = pd.DataFrame(temperature_data, columns=['Date',
        'Temperature (°F)'])
    print(df)

粗体:表示新术语、重要单词或你在屏幕上看到的单词。例如,菜单或对话框中的单词以粗体显示。以下是一个示例:“推荐任务按钮也出现在此屏幕上,Q 可以分析问题并为用户分配更多可管理的任务以加快操作。”

用例或重要注意事项

看起来是这样的。

联系我们

我们始终欢迎读者的反馈。

一般反馈:如果你对本书的任何方面有疑问,请通过 mailto:customercare@packtpub.com 给我们发邮件,并在邮件主题中提及书名。

勘误:尽管我们已经尽一切努力确保内容的准确性,但错误仍然可能发生。如果你在这本书中发现了错误,我们将不胜感激,如果你能向我们报告这一点。请访问www.packtpub.com/support/errata并填写表格。

盗版:如果你在互联网上以任何形式遇到我们作品的非法副本,如果你能提供位置地址或网站名称,我们将不胜感激。请通过 mailto:copyright@packtpub.com 与我们联系,并提供材料的链接。

如果你有兴趣成为一名作者:如果你在某个领域有专业知识,并且你感兴趣的是撰写或为书籍做出贡献,请访问 authors.packtpub.com

分享你的想法

一旦你阅读了《Generative AI-Powered Assistant for Developers》,我们很乐意听听你的想法!请点击此处直接进入此书的亚马逊评论页面并分享你的反馈。

你的评论对我们和科技社区都很重要,并将帮助我们确保我们提供高质量的内容。

下载本书的免费 PDF 副本

感谢您购买本书!

你喜欢在旅途中阅读,但无法随身携带你的印刷书籍吗?

你的电子书购买是否与你的选择设备不兼容?

不要担心,现在,随着每本 Packt 书籍,你都可以免费获得该书的 DRM 免费 PDF 版本。

在任何地方、任何地点、任何设备上阅读。直接从你最喜欢的技术书籍中搜索、复制和粘贴代码到你的应用程序中。

优惠远不止于此,您还可以获得独家折扣、新闻通讯以及每天收件箱中的优质免费内容。

按照以下简单步骤获取这些好处:

  1. 扫描二维码或访问以下链接

packt.link/free-ebook/978-1-83508-914-9

  1. 提交您的购买证明

  2. 就这样!我们将直接将您的免费 PDF 和其他福利发送到您的电子邮件中。

第一部分:生成式 AI 助手

在本部分,我们将探讨生成式 AI 助手是什么以及它们是如何工作的。然后,我们将介绍 Amazon Q 开发者。我们还将探讨如何设置它,以便开发者和构建者可以在 IDEs、命令行和 AWS 控制台及工具中使用它。

本部分包含以下章节:

  • 第一章生成式 AI 助手简介

  • 第二章介绍和设置 Amazon Q 开发者

第一章:生成式 AI 助手简介

在本章中,我们将探讨以下关键主题:

  • 什么是生成式 AI?

  • 开发者面临的常见挑战

  • 生成式 AI 为开发者提供的助手

  • 开发者从助手中受益

  • 开发者助手的类型

当 ChatGPT 问世时,它彻底改变了我们与基于 AI 的系统互动以寻求所需答案的方式。ChatGPT 为生成式 AIGenAI),一类利用机器学习模型根据从现有数据集中学习到的模式和信息的人工智能AI),自主创建新内容(如文本、图像或其他形式的数据)打开了大门。

GenAI 通过改变解决用例的方式,颠覆了多个行业。GenAI 彻底改变的一个领域是软件开发过程。不是手动编写所有代码,GenAI 可以自动生成大量代码,极大地提高了构建应用程序的软件工程师和开发者的生产力。

GenAI 不仅能够自动生成新代码,还协助软件开发生命周期的许多其他任务,包括规划、分析、设计、测试、调试、部署、维护和审查。我们将逐步在本书中展开所有这些方面。

本章将深入探讨不同基于 GenAI 的助手如何出现,以帮助开发者更快地创建软件应用程序。但在我们深入细节之前,我们将探索生成式 AI 的旅程、开发者每天面临的挑战以及基于 GenAI 的助手如何帮助他们。让我们先简要了解生成式 AI 的力量。

什么是生成式 AI?

生成式 AI 是一种可以通过学习现有示例来创建新内容(如文本、图像甚至音乐)的 AI。它就像教计算机从大量数据中理解模式和风格,然后利用这些知识来产生新颖和原创的内容,就像人类可能会根据他们的经验和想象力创作故事或绘画一样。例如,它可以撰写文章、生成逼真的图片,甚至通过根据其学习到的内容预测接下来会发生什么来帮助开发软件代码。

关于生成式 AI,以下是一些关键信息:

  • 生成与分析:生成式 AI 可以创建全新的艺术品,如文本、代码、图像、视频等,而不仅仅是分类或从现有艺术品中提取见解。例如,合成数据生成是新一代的新艺术品。

  • 自学习:许多生成式 AI 系统在大数据集上自我训练,以学习模式和关系。这使得它们能够推广到新的上下文中。

  • 概率模型:生成式 AI 构建概率模型以生成符合训练数据中模式的新输出。输出是从学习到的概率分布中采样的。

  • 多样化的应用:用例包括生成文本(例如,文章、代码、对话)、图像、音频、视频游戏内容、分子设计等等。

  • 输出多样性:通过捕捉高级模式而不是逐字复制,生成式模型可以产生广泛多样的原创输出。

  • 前沿领域 - 生成式人工智能是机器学习研究中的一个极其活跃的领域,DALL-E、AlphaCode 和 MuseNet 等模型在创新方面的进展展示了其快速的发展。

为了更好地理解生成式人工智能在人工智能堆栈中的位置,以下图表有助于我们更好地理解这一概念。

图 1.1 – 人工智能堆栈

图 1.1 – 人工智能堆栈

我们希望将生成式人工智能的讨论保持简短,因为关于这个领域有大量的资料可以深入研究。本书的重点是帮助开发者使用生成式人工智能来加速软件开发并提高他们的生产力。但在那之前,我们还需要了解开发者面临的一些挑战。

开发者/构建者面临的常见挑战

如果你看看一个典型的软件开发者的日常,你会意识到大部分时间都花在分析、创建、测试和调试特定于应用程序所需功能的代码上。许多开发者面临的常见挑战都与这些主题相关:

  • 重复编码:在没有自动完成或生成工具的情况下手动实现重复代码或模板代码,这不仅耗时,而且容易出错。

  • 理解不熟悉的代码:在没有人工智能解释或总结的情况下,难以快速提升并理解复杂的遗留代码库。

  • 寻找代码示例:在没有人工智能代码搜索的情况下手动搜索和识别合适的代码示例来学习或重用是繁琐的。

  • 诊断问题:没有人工智能协助定位潜在原因和解决方案,调试问题会花费更长的时间。

  • 缺乏标准化:没有人工智能的建议来标准化代码模式和风格,代码质量和一致性会受到影响。

  • 文档编写:在没有人工智能自动文档生成的情况下手动编写代码文档非常耗时。

  • 重新实现解决方案:未能发现和利用代码库中现有的解决方案会导致重复工作。

  • 效率低下:没有人工智能优化,在改进代码结构、性能和效率方面缺乏指导。

  • 任务切换:没有人工智能处理琐碎的任务和查找,频繁的任务切换会打断开发者的工作流程。

  • 知识差距:初学者需要指导,而中级开发者在没有人工智能编码洞察的情况下存在知识空白。

  • 创意限制:没有生成式代码建议,缺乏灵感刺激和解决方案搜索空间的扩展。

  • 技术变革的速度:新的开源工具、库和功能不断添加,因此很难跟上所有新创新并在应用程序开发中使用它们。

总体来说,生成式编码人工智能缓解了许多痛点,并在所有技能水平上增强了人类的能力。开发者从采用这些快速发展的技术中可以受益匪浅。

并非每个人都负责编写应用程序的代码。在组织中还有许多其他技术角色,他们通过利用基于云的服务和工具来协助构建应用程序。通常,我们称他们为构建者。使用 AWS 服务解决用例的构建者被称为 AWS 构建者。这些构建者面临的具体挑战也因他们的角色和使用的工具而异。构建者面临的最耗时挑战之一是在他们使用的特定服务或工具中调试错误。控制台错误和网络错误是 AWS 构建者遇到的最突出的错误,他们必须检查日志文件以识别和修复问题。AWS 构建者还需要在解决方案架构、最佳实践、文档和支持方面获得帮助。

我们将在本书中深入探讨解决这些挑战的每个方面,但首先,让我们看看生成式人工智能助手在软件开发过程中帮助开发者和构建者的某些领域。

开发者/构建者使用的生成式人工智能助手

生成式人工智能助手通过利用先进的机器学习模型工作,这些模型主要在大量的代码和自然语言数据上训练。在底层,这些模型分析现有代码中的模式和结构,以预测和生成新的代码片段。当开发者输入一个提示或部分编写的代码时,人工智能使用深度学习技术处理这个输入,理解上下文、语法和语义。然后,它生成相关的代码补全、建议,甚至整个函数,模仿现有代码库的风格和约定。

此外,这些助手通过用户交互不断学习和改进,适应特定的编码风格和偏好,从而随着时间的推移提供越来越准确和上下文感知的辅助。这种复杂的模式识别、上下文理解和持续学习的过程,使得生成式人工智能编码助手能够显著提高开发者的生产力和效率。

这里有一些它们能做什么的例子:

  • 代码补全:根据上下文预测并自动完成代码,随着开发者的输入。类似于自动完成,但更强大且更具上下文性。

  • 代码合成:根据代码应执行的操作的描述生成整个代码片段或函数。节省开发者编写样板或重复代码的时间。

  • 代码解释:提供对代码部分所做工作的简单语言解释,以帮助开发者理解代码库。

  • 代码摘要:在较高层次上总结代码模块的整体目的和流程。对于理解遗留代码很有用。

  • 代码错误诊断:分析错误信息和堆栈跟踪,提供有关潜在原因和修复错误的指导。

  • 代码优化:建议改进代码的结构、整合或简化方法,使其更快、更高效等。

  • 文档生成:从代码上下文自动生成代码文档和注释。

  • 故障排除和问题解决:理解问题的原因,并为构建者提供可能的解决方案。

  • 架构和最佳实践:为构建者提供如何最佳架构一个用例的建议,并推荐用于解决该问题的基础设施类型。

这些 AI 助手的主要价值是减轻编码中的重复或例行方面,使开发者能够专注于软件开发中更有价值、更具创造性的部分。他们的目标是提高开发者的生产力和软件质量。

开发者/构建者从助手中获益

开发者用的生成式 AI 助手有以下几个关键原因:

  • 提高生产力:它们自动化重复的编码任务和工作流程,使开发者能够在更短的时间内完成更多的工作。自动完成、代码生成和调试辅助等直接节省了开发者的时间和精力。

  • 减少认知负荷:通过处理例行任务和提供上下文感知的建议,AI 助手减轻了开发者工作记忆的负担。这为更复杂的问题解决腾出更多的脑力。

  • 代码可发现性:自然语言代码搜索和摘要等特性提高了代码库的可发现性。开发者可以更容易地找到和理解相关的代码示例。

  • 知识共享:AI 模型可以编码编程最佳实践和模式。这使得在开发团队之间共享知识变得更加容易。

  • 一致性:由 AI 工具生成或优化的代码遵循一致的风格和模式。这提高了代码的可维护性。

  • 初学者技能提升:经验较少的开发者可以利用 AI 驱动的补全、解释和建议来更快地提高他们的技能。

  • 专注于创造力:通过自动化例行编码工作,开发者可以花更多的时间在创造性问题解决和优化算法上。

  • 减少错误:错误和反模式可以在开发者编码时实时自动检测和修复。这提高了软件质量和可靠性。

  • 最新技术集成:使用新库、开源工具和功能的便捷性,以改善端到端代码。

总体而言,通过增强人类能力,生成式人工智能使开发者能够更高效地工作,编写更高质量的代码,发现新的解决方案,并将精力集中在人类最能发挥价值的地方。这些工具在改变软件开发方面的潜力非常巨大。

开发者/构建者助手类型

尽管生成式人工智能驱动的助手列表不断增长,以下是一些为开发者提供的顶级生成式人工智能助手:

  • Amazon Q 开发者:一个由生成式人工智能驱动的助手,擅长在整个软件开发生命周期中帮助开发者。当集成到集成开发环境(IDE)中时,Amazon Q 提供全面的软件开发支持,包括代码生成、解释、优化和转换,以及其他许多自动化功能。当由 AWS 构建者使用时,它提供使用各种 AWS 服务构建更快解决方案的理解支持,并协助架构、最佳实践、文档、故障排除问题和支持。

  • GitHub Copilot:GitHub 和 OpenAI 提供的一个插件,在开发环境中提供上下文感知的代码补全。

  • DeepCode:一个代码审查助手,可以识别错误、安全问题、性能问题等,并提出修复建议。

  • Kite:带有文档和代码解释器的自动补全,以增强代码理解。

  • Codex:OpenAI 的一个 API,可以从自然语言描述中生成代码片段。

  • TabNine:一个使用深度学习在开发者键入时实时建议相关代码片段的代码补全工具。

  • Pythia:Facebook 的 IDE 插件,建议代码编辑和转换以修复问题。

  • Sourcery:一个自动重构 Python 代码的人工智能工具,建议改进和优化以实现更干净和更高效的代码。

随着更多初创公司、大型科技公司和开源项目将生成式人工智能集成到软件开发过程中,该列表不断扩展。目标是增强生产力和软件质量。每个 GenAI 助手都不同,并以各种方式协助开发者;然而,在这本书中,我们将详细介绍开发者如何使用 Amazon Q 开发者来加速软件开发并提高他们日常的生产力。

在我们结束本章之前,这里有一个关于开发者使用的生成式人工智能助手的非常重要笔记。

总是记住这一点

用于代码生成的生成式 AI 辅助工具表现出非确定性,因为在不同的条件下,对于相同的输入会产生不同的输出。这种可变性源于潜在的随机模型,这些模型考虑了一系列可能的解决方案,并根据诸如上下文、学习到的模式和随机性等因素选择一个。虽然这可以在代码建议中引入创造性和适应性,但它也可能导致结果不一致,因此对于开发者来说,审查和验证生成的代码以确保其满足特定项目需求和标准非常重要。

摘要

在本章中,我们简要介绍了生成式 AI 及其如何革命性地改变了许多行业。特别是在软件开发行业中,我们考察了开发者面临的一些常见挑战。然后,我们介绍了开发过程中的各个领域,其中生成式 AI 辅助工具可以帮助开发者,以及他们如何从这些辅助工具中受益。

最后,我们探讨了市场上一些可用的辅助工具以及它们如何帮助解决日常挑战。我们特别强调了 Amazon Q Developer,这是由 AWS 提供的一项服务,可以帮助开发者和构建者。本书的其余部分将围绕 Amazon Q Developer 作为软件开发的首选辅助工具展开。

在我们接下来的章节中,我们将探讨 Amazon Q Developer 是什么以及它如何帮助开发者。我们还将探讨如何在各种集成开发环境IDEs)和其他通常使用的开发工具中设置它。

参考文献

生成式 AI: zh.wikipedia.org/wiki/生成式人工智能

第二章:介绍和设置亚马逊 Q 开发者

在本章中,我们将探讨以下关键主题:

  • 亚马逊 Q 命名法

  • 亚马逊 Q 开发者基础

  • 亚马逊 Q 开发者功能

  • 亚马逊 Q 开发者层级

  • 亚马逊 Q 为第三方 IDE 的开发者设置

  • 亚马逊 Q 开发者为命令行设置

  • 亚马逊 Q 开发者为 AWS 编码环境设置

  • 在 AWS 的支持下构建亚马逊 Q 开发者

在我们上一章中,我们介绍了生成式 AI 驱动的助手如何帮助开发者提高生产力,我们还探讨了市场上的一些助手。在本章中,我们将重点关注亚马逊 Q 开发者——这是一个开发者工具,帮助我们理解和构建使用生成式 AI 的应用程序。它支持开发者在整个软件开发生命周期中。通过亚马逊 Q 开发者,员工能够及时获得相关信息和指导,促进流程简化、快速决策、有效问题解决,并在工作场所培养创造力和创新。

让我们从关于服务命名法的注意事项开始。

亚马逊 Q 命名法

在我们继续之前,我们想要澄清命名法,以防止本书剩余部分出现任何误解。

亚马逊 Q是用于指代 AWS 的生成式 AI 助手的旗舰术语。在这个术语下,有多个产品或现有 AWS 服务的功能,专门协助特定类型的科技领域及其在该领域工作的典型人物。让我们快速了解一下这些:

  • 亚马逊 Q 商业版:这是一个由生成式 AI 驱动的助手,能够回答问题、提供摘要、生成内容,并基于企业系统中的数据安全地完成任务。它使员工能够更具创造力、数据驱动、高效、准备充分并提高生产力。

  • 亚马逊 Q 在 QuickSight:亚马逊 QuickSight 是 AWS 提供的商业智能BI)服务。通过亚马逊 Q 在 QuickSight,客户可以获得一个生成式 BI 助手,使业务分析师能够在几分钟内使用自然语言构建 BI 仪表板,并轻松创建可视化和复杂计算。

  • 亚马逊 Q 在 Connect:亚马逊 Connect 是 AWS 提供的一项服务,它使企业能够轻松地建立和管理客户联系中心,提供各种功能以增强客户服务和支持。亚马逊 Q 在 Connect 利用与客户的实时对话和相关的公司内容,自动为代理建议响应和操作,从而增强客户支持。

  • AWS 供应链中的 Amazon Q:AWS 供应链是 AWS 提供的一项服务,它统一了数据,并提供了基于机器学习的可操作见解、内置的上下文协作和需求规划。它无缝地集成到您现有的企业资源计划(ERP)和供应链管理系统。通过 AWS 供应链中的 Amazon Q,库存经理、供需规划师和其他利益相关者可以就其供应链的状态、潜在原因和推荐行动提出问题并获得智能答案。他们还可以探索“如果...会怎样”的情景,以评估各种供应链决策的权衡。

  • Amazon Q 开发者:本书重点关注这项服务。它帮助开发者和 IT 专业人员完成各种任务,包括编码、测试、升级应用程序、诊断错误、执行安全扫描和修复以及优化 AWS 资源。

本书使用的旧名称和术语

代码助手之前被称为 Amazon CodeWhisperer,现在已被重新命名为 Amazon Q 开发者的一部分。您在使用多个 AWS 服务时可能会看到旧名称 CodeWhisperer,但现在它都是 Amazon Q 开发者的一部分。

此外,在本书中,为了简洁起见,我们有时会使用 Amazon Q、Q 开发者或仅 Q 来指代 Amazon Q 开发者

在我们深入探讨如何在不同的环境中设置 Amazon Q 开发者之前,让我们首先探索一些基础知识。

Amazon Q 开发者基础知识

在了解开发者面临的挑战后,AWS 创建了一个由生成式人工智能驱动的助手——Amazon Q 开发者。

开发者通常遵循软件开发生命周期(SDLC):计划、创建、测试、运营和维护。这个过程中的每个阶段通常都是重复的且容易出错。因此,这个过程需要大量的时间和精力,阻碍了开发者的生产力。以下图显示了开发者花费时间和精力的典型 SDLC 任务。

图 2.1 – 开发者花费最多时间的 SDLC 任务

图 2.1 – 开发者花费最多时间的 SDLC 任务

Amazon Q 开发者协助开发者在整个软件开发生命周期(SDLC)中。在深入探讨本书中每个组件之前,让我们先从高层次上了解一下这一点:

  • 计划:Amazon Q 通过提供代码解释并帮助遵循 AWS 最佳实践和推荐,在规划阶段提供协助。

  • 创建:Amazon Q 通过提供内联编码建议、使用自然语言生成新功能以及允许您在集成开发环境(IDE)中直接提问,来提高开发效率。

  • 测试:Amazon Q 帮助开发者验证其代码的功能和安全。它协助进行单元测试,并在开发周期的早期阶段识别和解决安全漏洞。

  • 操作:Amazon Q 能够排查错误、分析 VPC 可达性,并提供增强的调试和优化建议。

  • 维护:Amazon Q 的代码转换功能通过将项目升级到较新语言版本来帮助维护和现代化代码。

现在,让我们看看 Amazon Q 开发者的功能。

Amazon Q 开发者功能

我们有专门的章节深入探讨每个功能。本章将介绍其功能并帮助您完成与不同工具协同工作所需的初始设置。让我们从最重要的功能,自动代码生成,开始。

自动代码生成

Amazon Q 开发者生成大量代码的能力加速了应用开发,使开发者能够解决以前未关注的企业关键问题。这为构思和创造下一代创新体验创造了额外的时间。此外,通过在 集成开发环境IDE)中进行安全扫描,它可以在应用生命周期早期识别和纠正潜在漏洞,从而降低与开发相关的成本、时间和风险。

Amazon Q 开发者无缝集成到开发者的 IDE 中。通过安装 Amazon Q IDE 扩展,开发者可以立即开始编码。随着代码的编写,Amazon Q 开发者自动评估代码及其伴随的注释。识别自然语言注释(英文),Q 提供多个实时代码建议,甚至提供在编写注释时的完成建议。

Amazon Q 超越了单个代码片段,在 IDE 的代码编辑器中直接建议整个函数和逻辑代码块,通常跨越 10-15 行。生成的代码反映了开发者的写作风格,并遵循他们的命名约定。开发者可以迅速接受顶级建议(使用 tab 键),探索其他建议(使用箭头键),或无缝继续自己的代码创作过程。本章 参考文献 部分提供了一个链接,列出了不同 IDE 中 Amazon Q 开发者的用户操作完整列表。

Amazon Q 开发者支持多种编程语言,如 Python、Java、JavaScript、TypeScript、C#、Go、Rust、PHP、Ruby、Kotlin、C、C++、shell 脚本、SQL 和 Scala。此外,Q 开发者作为扩展可在许多 IDE 中使用,如 Visual Studio、VS Code 和 JetBrains IDE,并在 AWS Lambda、Amazon SageMaker Studio、Amazon EMR Studio、Amazon Redshift、Amazon CodeCatalyst 和 AWS Glue Studio 中原生可用。

我们在本书的 第 2、3 和 4 部分 中有多章与自动代码生成相关。

代码定制

亚马逊 Q 开发者通过考虑内部代码库的细微差别来增强其建议,这对于拥有大量存储库、内部 API 和独特编码实践的组织至关重要。开发者经常在与缺乏全面文档的大型内部代码库导航时遇到困难。为了解决这个问题,亚马逊 Q 允许与组织的私有存储库安全集成。只需几步点击,开发者就可以定制亚马逊 Q,以提供与内部库、API、包、类和方法实时匹配的建议。

这种定制支持多个数据源,使组织能够验证推荐是否符合编码标准、安全协议和性能最佳实践。管理员可以细粒度控制,安全地选择用于定制的存储库并实施严格的访问控制。他们决定激活哪些定制并管理组织内开发者的访问权限。每个定制独立运行,保持基础模型的完整性并保护知识产权。这确保只有具有特定访问权限的授权成员才能查看、访问和使用这些定制推荐。

我们将在本书的第十章中深入探讨这个主题。

代码转换

目前,亚马逊 Q 允许你将 Java 8 和 Java 11 编写的代码升级到 Java 17。为了辅助这一功能,亚马逊 Q 代码转换开发者代理可用于生成用于升级你的代码的转换计划。在转换你的代码后,它提供转换摘要和文件差异,让你在接受更改之前可以审查这些更改。

我们将在本书的第十二章中深入探讨这个主题。

代码解释、优化和更新

亚马逊 Q 开发者可以解释、优化、重构、修复和更新你 IDE 中的特定代码行。要更新你的代码,只需让亚马逊 Q 修改特定的代码行或代码块。它将生成包含所需更改的新代码,然后你可以直接将其插入原始文件中。

我们将在本书的第十章中深入探讨这个主题。

代码功能开发

亚马逊 Q 开发者代理可以帮助你在 IDE 中开发代码功能或对项目进行更改。描述你想要创建的功能,亚马逊 Q 将使用你当前项目的上下文来生成实现计划和必要的代码,以实现该功能。

我们将在本书的第十二章中深入探讨这个主题。

参考跟踪

亚马逊 Q 开发者经过大量数据集的训练,这些数据集包括来自亚马逊和开源代码的数十亿行代码。它能够识别出代码建议与特定开源训练数据相似的情况。它可以对这些建议添加存储库和许可详情的注释。此外,它还记录了与训练数据相似性高的已接受建议,从而便于提供适当的归属。

我们将在本书的第十一章中深入探讨这个主题。

安全扫描

Amazon Q 开发者还帮助对生成的和开发者编写的代码进行扫描,以识别潜在的安全漏洞。它还提供了解决已识别漏洞的建议。扫描过程扩展到检测难以捉摸的安全问题,并且与 VS Code 和 JetBrains IDEs 中的 Python、Java 和 JavaScript 兼容。

安全扫描涵盖了多个方面,包括符合 Open Worldwide Application Security Project (OWASP) 标准、执行加密库实践、遵守 AWS 安全标准和其他最佳实践。

我们将在本书的第十三章中深入探讨这个主题。

与 AWS 服务的集成

Amazon Q 开发者通过集成许多服务,加速了 AWS 上的开发,允许使用 AWS 服务快速构建应用程序。

数据工程师可以通过利用 Q 与 AWS Glue Studio Notebook 和 Amazon EMR Notebook 的集成来加速数据管道的创建。通过使用简单的英语句子阐述业务成果,Q 在 Redshift 查询编辑器中自动生成 SQL 查询,使得在 Redshift 中创建 SQL 查询变得简单。数据科学家和机器学习工程师可以通过利用 Q 与 Amazon SageMaker Studio 的集成来加速机器学习开发过程。

AWS 构建者可以利用 Q 开发者与 AWS Lambda 的集成来快速构建事件驱动的逻辑。Q 还通过 Amazon CodeCatalyst 支持 DevOps 流程,协助其许多功能,如拉取请求和代码更改。

Amazon Q 开发者还了解您账户中的 AWS 资源,并通过其对话功能轻松列出您资源的具体方面。它还可以帮助您了解使用的 AWS 服务的成本。

Q 开发者不仅自动化了 AWS 内部的许多开发任务,还帮助构建者调试 lambda 代码和理解与网络相关的问题。

此外,您可以咨询 Q 以获取最佳实践和解决方案,用于各种用例。它还可以推荐针对特定用例的最佳 EC2 实例。Q 的聊天功能允许您轻松提问并接收回复,从而简化了与 AWS 支持的集成。

我们将在本章后面的“在 Amazon Q Developer 支持下构建 AWS”部分深入探讨 Q 对 AWS 服务的辅助。这些功能的更详细探索也在本书的“第四部分”的单独章节中提供,其中我们详细解释了现实世界的开发用例。

Amazon Q Developer 提供了许多功能,其中一些高级选项在 Pro 层中可用。在下一节中,我们将介绍免费层和 Pro 层,并解释您作为用户如何利用它们。

Amazon Q Developer 层级

Amazon Q Developer 提供两个层级:免费层和 Pro 层。让我们快速了解一下这两个层级是如何运作的,以及它们提供了哪些功能。

Amazon Q Developer 免费层

Amazon Q Developer 的免费层为登录为 AWS IAM 用户或 AWS Builder ID 用户的任何人提供每月限制。您可用的具体功能取决于您的界面和认证方法。

关于免费层的最好之处在于,任何人都可以使用他们用于软件开发支持的 IDE 中的 Amazon Q Developer,即使他们不使用 AWS 服务或没有 AWS 账户。

因此,如果您正在阅读这本书并且还没有设置 AWS 账户,您可以使用此链接快速设置 AWS Builder ID:profile.aws.amazon.com。您的 AWS Builder ID 代表您作为个人,并且与您现有的 AWS 账户关联的任何凭证和数据都分开。您只需要您的个人电子邮件 ID 即可快速设置。

以下截图突出显示了设置完成后我的 AWS Builder ID 页面。

图 2.2 – AWS Builder ID 创建

图 2.2 – AWS Builder ID 创建

一旦创建了 AWS Builder ID,您就可以登录到支持的 IDE 之一。我们将在本章后面的 IDE 设置部分介绍这一部分。

Amazon Q Developer Pro 层

要访问 Amazon Q Developer Pro,您必须是 IAM 身份中心用户,并且您的管理员必须订阅 Amazon Q Developer Pro。作为订阅者,您的使用限制在 Amazon Q 控制台、IDE 中的 Q 和 Amazon CodeCatalyst 中的 Q 以个人用户级别确定。

如果您是组织的一部分,那么 Pro 层的访问将由管理员团队设置。然而,如果您正在阅读这本书并想尝试一些仅在 Pro 层中可用的 Amazon Q Developer 功能,您也可以作为个人 AWS 用户这样做。

我们将快速指导您访问 Pro 层的一种方法。一旦您设置了 AWS 账户,您很可能会为自己分配管理员角色,以便您无需额外配置权限即可访问所有 AWS 服务。然而,如果您不是管理员,请确保您有 Amazon Q Developer 服务的管理员角色。

一旦您登录到 AWS 控制台,搜索并打开 Amazon Q 服务页面。以下截图显示了可订阅的 Q Developer Pro 套件。

图 2.3 – Amazon Q Developer Pro 套件

图 2.3 – Amazon Q Developer Pro 套件

一旦您点击 订阅,它将要求您从 IAM 身份中心选择一个用户或组以授予专业订阅。如果您是首次使用用户且您的 IAM 身份中心用户尚未设置,您必须在分配之前设置它,如下面的截图所示。

图 2.4 – Amazon Q Developer Pro – IAM 身份中心用户和组

图 2.4 – Amazon Q Developer Pro – IAM 身份中心用户和组

在 IAM 身份中心设置用户涉及几个任务,我们已在本章 参考文献 部分中包含了一个设置说明的链接。一旦用户准备就绪,他们将在下拉菜单中显示,供您通过名称搜索并分配到之前的步骤中。在此设置过程中,IAM 身份中心还将配置其应用程序设置中的 Amazon Q,其中可以找到身份源和身份验证设置。

一旦您在订阅屏幕中分配了用户,Pro 级别订阅将激活,如下面的截图所示。

图 2.5 – Amazon Q Developer Pro – 用户的活动订阅

图 2.5 – Amazon Q Developer Pro – 用户的活动订阅

订阅激活后,从 AWS 控制台转到 Amazon Q Developer 服务,在其设置页面,您将看到用户可使用的完整功能列表,以及起始 URL。起始 URL 是我们在外部 IDE 中进行身份验证时将使用的。

以下截图突出了为用户准备好的 Amazon Q Developer Pro 订阅详情。

图 2.6 – Amazon Q Developer Pro – 设置屏幕

图 2.6 – Amazon Q Developer Pro – 设置屏幕

要确定 Q Developer 的免费和 Pro 级别包含的具体功能,请参阅定价文档,其中链接已提供在本章末尾的 参考文献 部分中。

现在,让我们继续下一个主题:在您最喜欢的 IDE 中设置 Amazon Q Developer。

为第三方 IDE 设置 Amazon Q Developer

IDE 是一种为程序员提供全面软件开发设施的软件应用程序。通常,IDE 包括源代码编辑器、构建自动化工具和调试器。其目的是通过将软件开发的各种方面集成到单一环境中,简化编码和开发过程,使开发更加高效和方便。IDE 的流行例子包括 Visual Studio、Eclipse 和 IntelliJ IDEA。

为了提高开发者生产力,Amazon Q 开发者无缝集成到 Visual Studio、Visual Studio Code 和 JetBrains IDE 中。每个 IDE 都有其自身的优势,开发者通常有一个首选的 IDE 或根据特定编程语言的需求进行切换。我们旨在演示如何在所有三个 IDE 中启用 Q,并将选择权留给我们的最终用户。

VS Code

Visual Studio Code (VS Code) 是一个兼容 Windows、macOS 和 Linux 的独立源代码编辑器。它是 Java 和网页开发者的理想选择,并提供许多扩展来支持几乎任何编程语言。

安装 VS Code 后,要开始使用 Q,你需要安装 Amazon Q 扩展。你可以通过搜索 VS Code 的扩展部分或通过 VS Code 市场安装它。有关安装和设置 VS Code 的 Q 扩展的进一步帮助,请参阅本章末尾 参考文献 部分提供的链接。

扩展安装完成后,你需要进行身份验证。如果你正在使用作为你组织一部分的 Amazon Q Pro 级别,你的 AWS 账户管理员将为你设置并启用 IAM Identity Center 以进行身份验证。基本上,你的管理员将把你添加为用户,并提供一个登录 URL,让你使用 IAM Identity Center 登录,以便你可以在组织策略中利用 Q。

如果你使用 VS Code 并且想作为免费级别用户使用 Amazon Q,那么你需要使用你的 AWS Builder ID 登录。一旦安装并验证,你将看到以下截图,其中为 VS Code 安装了 Amazon Q 扩展,并且你可以看到它使用截图底部的 Builder ID 进行验证。

图 2.7 – 在 VS Code 中启用了并验证的 Amazon Q 开发者扩展

图 2.7 – 在 VS Code 中启用了并验证的 Amazon Q 开发者扩展

快速查看在 VS Code 中免费和 Pro 级别的身份验证方式。在前面的章节中,我们为免费级别建立了 AWS Builder ID,并且为 IAM Identity Center 设置了一个用户,该用户获得了 Pro 级别的订阅。

安装 Amazon Q 扩展后,当你第一次尝试从 VS Code 编辑器验证到 Q 时,你将看到以下截图中的两种选择,免费和 Pro 级别。

图 2.8 – VS Code 中访问 Amazon Q 开发者的身份验证选项

图 2.8 – VS Code 中访问 Amazon Q 开发者的身份验证选项

当你使用免费级别进行操作时,它将打开一个浏览器窗口,要求你输入你的 AWS Builder ID 凭据。它还会要求你确认是否批准通过 Amazon Q 给 IDE 访问你的数据,如以下截图所示。

图 2.9 – 授权 Amazon Q 访问 VS Code

图 2.9 – 授权 Amazon Q 访问 VS Code

您将在 VS Code IDE 中看到通知,如以下屏幕截图所示,表明您已成功使用 AWS Builder ID 进行认证,并且 IDE 已准备好利用 Amazon Q 的免费级别功能。

图 2.10 – 使用 AWS Builder ID 在 VS Code 中认证

图 2.10 – 使用 AWS Builder ID 在 VS Code 中认证

如果您想认证到 Amazon Q Pro 级别,系统将提示您输入起始 URL。此 URL 在上一节中 Pro 级别的设置过程中获取。只需复制 URL 并粘贴到此处,如以下屏幕截图所示。

图 2.11 – 在 VS Code IDE 中认证到 Amazon Q Pro 级别

图 2.11 – 在 VS Code IDE 中认证到 Amazon Q Pro 级别

继续操作后,系统将提示您通过网页浏览器使用 IAM 身份凭证进行再次认证。在成功进行多因素认证后,VS Code 将如您在以下屏幕截图中所见,通知您已连接并准备好使用 Amazon Q Pro 级别。

图 2.12 – 在 VS Code IDE 中成功认证到 Amazon Q Pro 级别

图 2.12 – 在 VS Code IDE 中成功认证到 Amazon Q Pro 级别

JetBrains IDE 的设置与此相同,让我们快速看一下。由于过程类似,我们不会重复所有步骤。

JetBrains

JetBrains 提供了一系列 IDE,每个 IDE 都支持不同的编程语言。例如,Java 开发者使用 IntelliJ Idea IDE,而 Python 开发者使用 PyCharm IDE。同样,JetBrains 为其他编程语言提供了许多其他 IDE。由于我们将使用 Python 作为主要语言来描述 Amazon Q 的不同功能,让我们为 PyCharm IDE 设置它。

我们需要安装并认证 Amazon Q 插件,就像之前为 VS Code 所做的那样。您可以从 IDE 的插件部分或从 JetBrains 市场安装插件。为了进一步帮助您安装和设置 JetBrains IDE 的插件,请参阅本章末尾 参考文献 部分提供的链接,其中还列出了对不同 JetBrains IDE 及其特定版本的支持。

以下屏幕截图显示了 PyCharm IDE 内安装的 Amazon Q 插件。请注意,为了避免冲突结果,请禁用其他 AI 助手。如果您使用 PyCharm 进行 Python 编码,那么您已经准备好跳转到 第四章 开始使用 Amazon Q 开发者。

图 2.13 – PyCharm IDE 中启用的 Amazon Q 开发者插件

图 2.13 – PyCharm IDE 中启用的 Amazon Q 开发者插件

让我们看看 Amazon Q 支持的另一个流行 IDE,Visual Studio。

Visual Studio

Visual Studio 2022 是 Windows 上流行的 IDE,适用于 .NET 和 C++ 开发者。它在构建网页、云、桌面、移动应用、服务以及游戏方面表现出色。

要在 Visual Studio IDE 中使用 Amazon Q,您需要安装 AWS Toolkit for Visual Studio。从 Visual Studio 市场中,首先安装 AWS Toolkit for Visual Studio,然后有多种方式可以用于 AWS 账户的认证。有关使用 Visual Studio 设置 Amazon Q 的详细说明,请参阅本章末尾 参考文献 部分提供的链接。

Amazon Q 在 Visual Studio 中支持 C、C++ 和 C# 作为编程语言,并且也提供了命令行支持,因此让我们看看使用命令行进行 Amazon Q 开发者初始设置的步骤。

命令行版本的 Amazon Q 开发者设置

在复杂 IDE 的时代,命令行界面CLIs)仍然是开发者进行快速测试和构建的流行选择。在本书的 第二部分 中,我们将探讨如何使用 Amazon Q 开发者与命令行一起使用,但首先,我们需要确保 Q 已安装并设置用于命令行。

事物不断演变,但目前,命令行版本的 Amazon Q 开发者仅支持 macOS。有少量壳、终端模拟器、终端 IDE 和超过 500 个 CLI 支持。始终参考 AWS 文档以获取新支持的环境。

由于我们使用的是 macOS 和 zsh 壳终端,我们将指导您进行其安装步骤:

  • 下载并安装命令行版本的 Amazon Q 开发者。链接位于本章末尾的 参考文献 部分中。

  • 如果您有组织提供的 Pro 级别访问权限,您将需要组织管理员提供的 IAM Identity Centre 启动 URL。

  • 如果您是免费用户,系统将要求您使用 Builder ID 或 IAM Identity Centre 进行认证。AWS Builder ID 是一个个人配置文件,它授予您访问 Amazon Q 开发者的权限。Builder IDs 是免费的,您可以使用电子邮件地址注册。

安装成功后,Amazon Q 的 自动检查 部分应显示勾选标记,如下面的截图所示。

图 2.14 – 命令行版本的 Amazon Q 安装

图 2.14 – 命令行版本的 Amazon Q 安装

您可以使用 q doctor 命令来验证一切是否顺利。以下截图确认 Q 开发者已正确安装用于命令行。

图 2.15 – 命令行版本的 Amazon Q 开发者安装 – 成功

图 2.15 – 命令行版本的 Amazon Q 开发者安装 – 成功

现在,让我们看看 Amazon Q 开发者与一些支持的 AWS 服务和工具的初始设置。

Amazon Q 开发者设置用于 AWS 编码环境

如果你是一名应用程序构建者、软件开发者、数据工程师或数据科学家,并且与 AWS 服务合作,你将频繁使用如 Amazon SageMaker 这样的构建友好型工具作为构建 AI/ML 项目的平台,Amazon EMR 作为构建大数据处理项目的平台,AWS Glue 用于构建提取、转换和加载ETL)管道,以及 AWS Lambda 作为无服务器计算服务。所有这些服务都提供帮助构建者和开发者编写代码的工具。

为了简化与这些 AWS 服务的开发者体验,Amazon Q 在支持的 AWS 工具中提供代码建议和代码生成功能。让我们探索所有这些工具以及如何设置它们。

Amazon SageMaker Studio

Amazon SageMaker Studio 是一个综合平台,提供针对机器学习ML)开发每个阶段的专用工具。从数据准备到模型构建、训练、部署和管理,它提供了一个无缝的工作流程。快速上传数据,在您首选的 IDE 中构建模型,增强团队协作,利用 AI 辅助优化编码,微调和调试模型,在生产中部署和管理它们,以及自动化工作流程——所有这些都可以在一个单一的基于 Web 的界面中轻松实现。

在启用 Q Developer 在 SageMaker Studio 中提供 Python 代码推荐之前,我们假设你的 SageMaker Studio 环境已经启动并运行,所有先决条件都已完成,并且已创建 SageMaker 域。

要继续操作,在你的 SageMaker IAM 执行角色中,只需添加以下 IAM 策略允许 Amazon Q 生成代码推荐:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CodeWhispererPermissions",
      "Effect": "Allow",
      "Action": ["codewhisperer:GenerateRecommendations"],
      "Resource": "*"
    }
  ]
}

注意在策略声明中仍然引用了旧名称 CodeWhisperer。它可能会在未来发生变化,因此请始终参考官方文档以获取更新。

如果你已经有了一个 SageMaker 域,你可以在域设置中找到它的执行角色,如图下所示。

图 2.16 – SageMaker 域的执行角色

图 2.16 – SageMaker 域的执行角色

注意

2023 年 11 月,SageMaker Studio 更新了全新的体验。之前版本的体验现在被命名为 Amazon SageMaker Studio Classic,仍然可供使用。如果你已经使用经典主题,你仍然可以启用 Amazon Q Developer 以实现基于内联提示的代码生成。

然而,在新体验中,除了内联提示外,你还可以启用来自 Amazon Q 的聊天式辅助。聊天功能只能通过 Amazon Q Developer 的 Pro 级别启用,这需要将 SageMaker 域与 IAM 身份中心集成。

要在 SageMaker Studio 中启用 Amazon Q 的聊天式功能,你可以在域详情的应用配置选项卡中启用 Q,如图下所示。Q 配置文件 ARN 可以在 Amazon Q Developer 的设置页面中找到,如图图 2.6所示。

图 2.17 – 在 SageMaker Studio 中启用 Amazon Q 聊天

图 2.17 – 在 SageMaker Studio 中启用 Amazon Q 聊天

在此之后,您可以在新的 JupyterLab 笔记本中查看底部,可以看到 Amazon Q 已启用,如下面的截图所示。此外,SageMaker 还支持内联提示以及基于聊天的代码生成,这些也在截图中被突出显示。

图 2.18 – 在 SageMaker Studio 中 Amazon Q 的实际应用

图 2.18 – 在 SageMaker Studio 中 Amazon Q 的实际应用

我们将在 第十四章 中探讨如何在 SageMaker Studio 中有效使用 Amazon Q。目前,我们只是在 AWS 内所有支持的工具中设置它。

Amazon EMR Studio

EMR Studio 是 Amazon EMR 服务中的一个 IDE,它简化了数据科学家和工程师使用 R、Python、Scala 和 PySpark 创建、可视化和调试数据工程和数据分析应用程序的过程。Amazon Q 开发者支持 Python 语言,这使得编写 Spark 作业变得容易。

要在 EMR Studio 中启用 Amazon Q,您只需将我们用于 SageMaker Studio 的相同 IAM 策略附加到 EMR 上。一旦通过工作区启动笔记本,Q 将启用以供使用。

下面的截图显示了 EMR Studio 笔记本内启用的 Q,并能根据注释生成代码。请注意,CodeWhisperer 的旧名称仍然被显示出来。这最终可能会更改为 Amazon Q。

图 2.19 – 在 Amazon EMR Studio 中启用 Amazon Q

图 2.19 – 在 Amazon EMR Studio 中启用 Amazon Q

JupyterLab

许多数据科学家和数据工程师使用 Jupyter Notebooks 进行他们的数据科学项目。JupyterLab,一个用于编写笔记本的可定制且功能丰富的应用程序,是 Jupyter 项目的一个关键组件,该项目是一个非营利性、开源项目,旨在提供用于交互式计算的工具和标准。

Amazon Q 支持 JupyterLab 中的 Python 代码推荐。以下命令在 macOS 上安装 Q 以用于 JupyterLab 3 或 4。

# Use the below command if you have JupyterLab 4
pip install amazon-codewhisperer-jupyterlab-ext
# Use the below command if you have JupyterLab 3
pip install amazon-codewhisperer-jupyterlab-ext~=1.0
jupyter server extension enable amazon_codewhisperer_jupyterlab_ext

安装后,您可以使用 AWS Builder ID 进行身份验证,之后 Q 将开始在笔记本内提供建议。

AWS Glue Studio

AWS Glue Studio 提供了一个用户友好的图形界面,用于在 AWS Glue 中轻松创建、执行和监控数据集成作业。Amazon Q 支持 Python 以及 Scala 语言,这些语言常用于使用 Glue Studio 编码 ETL 管道。

要在 Glue Studio 中启用 Amazon Q,我们用于 SageMaker Studio 设置的相同 IAM 策略必须附加到 Glue 角色上。一旦启用,您可以在 ETL 作业下启动 Glue Studio 笔记本,并开始利用 Q 的功能。

下面的截图显示了 Glue Studio 笔记本内启用的 Q,并能根据提示生成代码。请注意,CodeWhisperer 的旧名称仍然被显示出来。这最终可能会更改为 Amazon Q。

图 2.20 – 在 AWS Glue Studio 中启用了 Amazon Q

图 2.20 - 在 AWS Glue Studio 中启用了 Amazon Q

AWS Lambda

AWS Lambda 是一种无服务器和事件驱动的计算服务,它可以在不配置或管理服务器的情况下执行您的代码。它提供了一条快速路径,将想法转化为现代、生产就绪的无服务器应用程序。

截至目前,Amazon Q 在 AWS Lambda 中支持 Python 和 Node.js 语言。在为 Q 分配相同的 IAM 策略后,您可以通过从 工具 菜单中选择 Q 代码建议选项来激活它。

以下屏幕截图显示了在 Lambda 函数中启用 Amazon Q 的选项。请注意,CodeWhisperer 的旧名称仍然被显示出来。这最终可能会改为 Amazon Q。

图 2.2.1 - 在 AWS Lambda 中启用了 Amazon Q

图 2.21 – 在 AWS Lambda 中启用了 Amazon Q

Lambda 编辑器现在可以接受代码建议。请参考章节末尾的“参考文献”部分的“用户操作”网页来测试包括 lambda 在内的不同编辑器的不同键盘快捷键。

现在让我们转换一下话题,看看 Amazon Q 开发者如何也能帮助 AWS 构建者更快地构建解决方案。

在 Amazon Q 开发者的支持下在 AWS 上构建

如果您是 IT 部门的构建者并使用 AWS 服务来解决业务用例,那么 Amazon Q 可以帮助提高您的生产力和增强您使用 AWS 服务的体验。Amazon Q 可以从 AWS 管理控制台、AWS 网站甚至 AWS 文档中访问,以帮助您更快地达到预期的最终目标。

在我们探索 Amazon Q 在 AWS 的一些功能之前,让我们回顾一下在使用它之前您可能需要在您的 AWS 账户中拥有的权限。

Amazon Q 权限

当用户登录 AWS 控制台时,他们会承担一个已经授予使用 AWS 服务中特定资源的某些权限的角色。为了使用 Amazon Q 的功能,用户必须有权使用 Q 功能。为了方便起见,用户承担的角色需要有一个包含 Q 权限的 IAM 策略。最快和最简单的方法是将托管 IAM 策略附加到该角色上。AmazonQFullAccess 是一个托管 IAM 策略,它提供了对 Amazon Q 所有功能的完全访问权限。

此托管 IAM 策略在操作和资源中包含通配符 (*) 字符,允许所有 AWS 资源使用 Q 的所有功能。以下代码片段说明了此策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowAmazonQFullAccess",
      "Effect": "Allow",
      "Action": [
        "q:*"
      ],
      "Resource": "*"
    }
  ]
}

在您的组织中,AWS 账户管理员很可能不会授予您完全访问权限。通常,通配符字符会被替换为您的角色需要访问的实际操作和资源。

例如,为了允许用户使用 Q 的对话功能,在“操作”部分,*将被替换为q:StartConversationq:SendMessage。而要使用 AWS 控制台故障排除功能,操作将包括q:StartTroubleshootingAnalysisq:GetTroubleshootingResultsq:StartTroubleshootingResolutionExplanation操作。

现在我们已经整理好了权限,让我们探索一些亚马逊 Q 可以在 AWS 上提供帮助的领域。

对话式问答功能

亚马逊 Q 允许您在 AWS 管理控制台内部直接提出对话式问题。AWS 构建者可以就架构、服务、最佳实践等方面提出广泛的问题,并且还可以提出多个后续问题以获得所需的指导。在 Q 聊天控制台中获取所有响应可以减少研究和调查所需的时间,从而加快应用程序构建过程。

以下屏幕截图突出了 Q 提供基于上下文答案的能力。亚马逊 Q 图标位于控制台右上角。我们将在本书的第四部分中探索更多亚马逊 Q 在 AWS 上的对话式使用。

图 2.2.2 – 在 AWS 控制台中使用亚马逊 Q

图 2.22 – 在 AWS 控制台中使用亚马逊 Q

亚马逊 Q 还通过其对话式问答功能为 AWS 服务(如亚马逊 Redshift 和 AWS Glue)提供有针对性的帮助。虽然我们将在本介绍性章节中简要介绍它们,但更详细的讨论将在本书的第四部分中提供,其中我们将深入研究 AWS 构建过程的相关章节。

与亚马逊 Redshift 聊天以生成见解

亚马逊 Redshift 是云中的一项完全托管的数据仓库服务,它使用基于 SQL 的强大分析工具提供快速查询性能。它有效地管理着 PB 级规模的数据仓库,使用户能够分析大型数据集并从中提取对决策有价值的见解。亚马逊 Redshift 查询编辑器是一个基于浏览器的工具,允许用户直接对其 Redshift 数据仓库运行 SQL 查询。

亚马逊 Redshift 查询编辑器中的亚马逊 Q 生成 SQL 功能根据自然语言提示生成 SQL 推荐。这通过帮助用户更有效地从数据中提取见解来提高生产力。

提供的屏幕截图展示了亚马逊 Q 如何理解聊天中提出的查询,并有效地连接必要的各种表以完成 SQL 查询。您可以将生成的查询集成到笔记本中,并通过测试查询以获得精确结果来验证其准确性。

图 2.2.3 – 亚马逊 Q 在亚马逊 Redshift 查询编辑器中的工作概述

图 2.23 – 亚马逊 Q 在亚马逊 Redshift 查询编辑器中的工作概述

此功能将加快报告创建,并使非技术用户能够在等待技术专长生成报告之前从数据中提取见解。我们将在 第十四章 中深入了解此细节。现在,让我们探索 Amazon Q 如何在 AWS Glue 笔记本中增加价值,使数据工程师更容易创建 ETL 作业。

使用聊天生成 AWS Glue ETL 的逻辑

在上一节中,我们讨论了 Amazon Q 如何在 Glue Studio 笔记本中协助自动编码。然而,有时你需要与助手聊天以生成整个样板逻辑。使用 Amazon Q 聊天功能简化了作业编写、故障排除,并立即对有关 AWS Glue 和数据集成任务的查询提供响应,大大减少了时间和精力。

以下截图展示了如何通过向 Q 提供用例,它能够生成 Glue 代码,然后你可以将其复制到 Glue Studio 笔记本中进行测试。这大大节省了数据工程师创建自定义脚本的 ETL 作业的时间。

图 2.24 – 使用 Amazon Q 聊天生成 Glue 代码

图 2.24 – 使用 Amazon Q 聊天生成 Glue 代码

第十四章 中,我们将介绍一个用例并提供解决方案,以说明 Q 如何加快 AWS Glue 中的 ETL 作业创建。

聊天关于 AWS 资源和成本

现在,Amazon Q 还能理解你在账户中创建的资源上下文中的问答。你可以提出诸如“显示我在 us-west-1 区域运行的所有 EC2 实例”的问题,它将为你列出所有实例。Amazon Q 还可以为你提供 AWS 账户中使用的资源的成本分解。你可以提出诸如“我们在 2023 年 us-east-1 区域在 Amazon Redshift 上花费了多少钱?”的问题,它将为你提供成本结构。

现在,让我们探索一些 Amazon Q 的其他重要功能,这些功能与各种 AWS 服务相关。

故障排除 AWS 控制台错误

AWS 构建者在开发过程中花费大量时间来故障排除问题。Amazon Q 使之容易直接从 AWS 控制台中识别和解决错误。而不是手动检查日志和研究错误解决方案,Q 只需点击一下按钮就提出可能的解决方案。

在下面的截图中,我们有一个简单的 AWS Lambda 函数,它打印一条消息。但示例代码中有一个错误。

图 2.25 – AWS Lambda 函数中代码存在错误的示例

图 2.25 – AWS Lambda 函数中代码存在错误的示例

一切看起来都很不错,但我们错误地将字符串在 print 语句中用双引号而不是单引号结束。当运行测试时,错误变得明显,如下面的截图所示。

图 2.26 – Amazon Q 与 AWS Lambda 的故障排除功能 – 错误

图 2.26 – Amazon Q 与 AWS Lambda 的故障排除功能 – 错误

您无需手动检查日志文件或在网上研究错误,只需在测试屏幕上点击使用 Amazon Q 进行故障排除按钮即可。Q 将提供问题分析,您还可以要求它提供解决方案。以下截图显示了缺失单引号的分析和解决方案。

图 2.27 – Amazon Q 与 AWS Lambda 的故障排除功能 – 错误解决

图 2.27 – Amazon Q 与 AWS Lambda 的故障排除功能 – 错误解决

在本书的第四部分中,我们将深入了解如何使用 AWS 服务构建解决方案时解决其他复杂问题的细节。

故障排除网络问题

每个应用程序构建者和开发者都知道处理网络问题可能会多么可怕。为了减轻这种挫败感,Amazon Q 还可以帮助解决网络问题。Amazon Q 与 Amazon VPC 的可达性分析器协同工作,检查网络连接并识别潜在的配置问题。

例如,在以下截图中,您可以看到,只需向 Q 提出一个连接性问题,它就能提出可能存在的网络问题。

图 2.2.8 – Amazon Q 网络故障排除

图 2.28 – Amazon Q 网络故障排除

在 Q 确定问题是由网络连接问题引起的后,它随后利用 Amazon VPC 的可达性分析器分析整个网络路径,确定问题可能发生在路径中的哪个位置。以下截图显示了从源到目的地的路径分析,并建议潜在的问题位置。

图 2.29 – Amazon Q 网络故障排除 – 路径分析

图 2.29 – Amazon Q 网络故障排除 – 路径分析

让我们继续看看 Amazon Q 在 AWS 上的更多功能。

Amazon EC2 实例的最佳选择

AWS 构建者对 Amazon 弹性计算云EC2)实例非常熟悉,因为他们中的许多人使用服务器来部署和运行他们的应用程序。然而,由于 EC2 实例类型众多,很难知道哪种类型的实例最适合特定的负载。当然,您可以进行研究并选择最佳选项,但 Amazon Q 使得从 EC2 控制台本身选择最佳的 EC2 实例变得容易。

在 EC2 控制台中,您可以选择实例类型,当您点击如下截图所示的获取建议链接时,Amazon Q 就派上用场了。

图 2.30 – Amazon Q – EC2 实例类型建议

图 2.30 – Amazon Q – EC2 实例类型建议

您可以选择您的用例、工作负载类型、优先级和 CPU 类型,这些构成了亚马逊 Q 的输入,以建议最佳可能的 EC2 实例。以下截图显示了您从 Q 寻求建议后,选择标准部分的情况。

图 2.3.1 – Amazon Q – EC2 实例类型选择标准

图 2.31 – Amazon Q – EC2 实例类型选择标准

一旦您点击获取实例类型建议按钮,Q 就会施展其魔法。以下截图显示了根据我们提供的输入标准应使用的实例,并解释了这些 EC2 实例各自带来的优势。它列出了信息来源,以便任何人都可以查看原始的真实来源。

图 2.3.2 – Amazon Q – EC2 实例选择建议

图 2.32 – Amazon Q – EC2 实例选择建议

在我们结束关于 Amazon Q 的介绍性章节之前,让我们快速看一下关于功能开发的关键方面之一。

协助 AWS 支持案例

您可以使用 Amazon Q 开发者创建支持案例,并从 AWS 管理控制台中的任何位置联系 AWS 支持,包括 AWS 支持中心控制台。亚马逊 Q 利用您对话的上下文,自动为您草拟支持案例,并将最近的对话纳入支持案例描述中。一旦创建案例,亚马逊 Q 就可以通过您首选的方式将您连接到支持代理,包括在同一界面内的实时聊天。

在 Amazon CodeCatalyst 中协助 DevOps 流程

Amazon CodeCatalyst 是一项服务,为开发团队提供统一的软件开发服务,以快速在 AWS 上构建、部署和扩展应用程序,同时保持组织特定的最佳实践。

亚马逊 Q 在 Amazon CodeCatalyst 中的功能开发能力充当一个生成式 AI 助手,您可以分配问题给它。一旦问题被分配,亚马逊 Q 将分析其标题和描述,审查指定存储库中的代码,并在可能的情况下草拟一个解决方案。然后,这个草拟的解决方案将被呈现给用户,以便在拉取请求中进行评估。

我们在书的第四部分有关于这个主题的整整一章,所以在这里我们将简要介绍。

摘要

在本章中,我们介绍了 Amazon Q 开发者是什么以及它如何帮助开发人员和应用程序构建者在日常任务中提供协助。我们还简要探讨了其一些功能,以及设置时的考虑因素。

接下来,我们介绍了 Amazon Q 在命令行界面、外部 IDE(如 VS Code 和 JetBrains IDEs)以及 AWS 服务、IDEs 和笔记本(如 Amazon SageMaker Studio、Amazon EMR Studio、AWS Glue Studio 和 AWS Lambda)中的设置。

我们探讨了其对 AWS 构建者的益处,强调了如何从 AWS 控制台本身利用 Amazon Q 来协助各种活动。从高层次上,我们介绍了 Amazon Q 如何帮助进行对话式问答风格的聊天、控制台问题、网络故障排除、EC2 实例选择,以及 Amazon CodeCatalyst 中的 DevOps 流程。

在本书第二部分的后续章节中,我们将深入了解自动代码生成技术以及 Amazon Q 开发者如何在这一过程中协助开发者。

参考文献

第二部分:生成代码推荐

在本部分中,我们将探讨许多可以帮助开发者在软件开发生命周期中使用的 Amazon Q 开发者关键功能。这些功能可以在许多支持的 IDE 中使用,并帮助各种编程语言。

本部分包含以下章节:

  • 第三章理解自动代码生成技术

  • 第四章使用自动代码生成提高 Python 和 Java 编码效率

  • 第五章使用自动代码生成提高 C 和 C++编码效率

  • 第六章使用自动代码生成提高 JavaScript 和 PHP 编码效率

  • 第七章使用自动代码生成提高 SQL 编码效率

  • 第八章, 使用自动代码生成提高命令-行和 Shell 脚本的编码效率

  • 第九章, 使用自动代码生成提高 JSON、YAML 和 HCL 的编码效率

第三章:理解自动代码生成技术

在本章中,我们将探讨以下关键主题:

  • 什么是提示词?

  • 单行提示词用于自动代码生成

  • 多行提示词用于自动代码生成

  • 思维链提示词用于自动代码生成

  • 与代码助手聊天进行自动代码生成

  • 自动代码生成的常见构建方法

随着大型语言模型(LLM)应用的增长,其中一种有趣的使用案例,基于用户评论的自动代码生成,已经变得流行。在过去的几年里,出现了多个针对开发者的代码助手,例如 GitHub Copilot、Codex、Pythia 和 Amazon Q Developer 等。这些代码助手可以用来获取代码推荐,在许多情况下,只需通过传递一些描述用户对代码要求的简单文本注释,就能从头生成无错误的代码。

许多这些代码助手现在由 LLM 支持。LLM 是在包括公共代码库在内的公共大型数据集上预训练的。这种对大量数据集的训练有助于代码助手生成更准确、相关的代码推荐。为了提高开发者的代码编写体验,这些代码助手不仅可以轻松集成到不同的集成开发环境IDE)和代码编辑器中,而且还可以通过大多数云提供商提供的服务轻松获得,配置简单。

总体而言,自动代码生成是一个过程,其中开发者能够使用任何支持的代码编辑器,通过简单的纯文本注释与不同的代码助手进行交互,以实时获取不同支持编程语言的代码推荐。

在本章后面我们将更深入地探讨使用代码助手进行自动代码生成之前,让我们先看看与生成式 AI 相关的提示词的关键概念。

什么是提示词?

如前所述,LLM 是在公开可用的大型数据集上预训练的,这使得它们非常强大和多功能。这些 LLM 通常具有数十亿个参数,可以用于解决多种任务,无需额外训练。

用户只需提出相关上下文中的正确问题,就可以从 LLM 中获得最佳输出。作为 LLM 指令的纯文本注释/问题被称为提示,而用相应上下文提出正确问题的技术被称为提示工程。在与 LLM 交互时,提供精确的信息,并在需要时补充相关上下文,这对于获得最准确的结果非常重要。与代码助手交互也是如此,因为大多数代码助手都集成了 LLM。作为用户,在与代码助手交互时,您应提供简单、具体且相关的上下文提示,这有助于生成高精度的高质量代码。

下面的图示显示了代码助手与 LLM 的集成。

图 3.1 – 代码助手与 LLM 集成的概述

图 3.1 – 代码助手与 LLM 集成的概述

与代码助手交互以获得所需结果有多种方式。在以下章节中,我们将探讨其中的一些技术。为了说明这些技术,我们将利用在 JetBrains 的 PyCharm IDE 中设置的 Python 编程语言,该 IDE 已配置与亚马逊 Q 开发者一起使用(有关设置,请参阅第二章)。

注意

亚马逊 Q 开发者使用 LLM 在后台生成代码。LLM 本质上是非确定性的,因此您可能不会得到与代码快照中显示的完全相同的代码块。然而,从逻辑上讲,生成的代码应该满足要求。

单行提示符自动生成代码

单行提示符自动生成代码是指用户使用代码助手,在单行纯文本中指定要求,期望以自动化的方式生成相关的代码行。

以下是关于单行提示自动生成代码的一些关键点:

  • 在单行提示技术中,用户不需要指定复杂的技术细节,而需要有效地以纯文本形式总结高层次的要求。

  • 集成 LLM 的代码助手经过训练,能够理解这些单行提示,并将它们转换为可执行且几乎无错误的代码。

  • 根据带有指令、上下文和具体要求的单行提示,代码助手将生成从单行到多行,再到更复杂的函数和类,以满足预期的功能需求。

  • 当代码需求相对简单且可以容易地用一句话描述时,单行提示符自动生成代码非常有用。

  • 与手动编写相同的代码相比,单行提示符自动生成代码可以显著减少时间。

  • 由于自动代码生成的单行提示不需要太多的提示工程经验,它通常被那些几乎没有编码经验的用户使用。在纯文本中,他们可以提供代码应该做什么,而不是如何使用实际代码来实现它。

  • 在大多数情况下,由于单行提示中使用了简单的要求,生成的代码可能不需要广泛的审查。

总结 – 自动代码生成的单行提示

总结来说,自动代码生成的单行提示是一种技术,用户使用纯文本格式的自然语言描述相对简单的代码要求;然后代码助手使用 LLM 自动生成单行或多行代码。这使得编码变得更加简单,并且更容易让更多人使用,特别是那些相对较少或没有编码经验或可能对特定编程语言新手的用户。

以下是一个在 PyCharm IDE 中使用 Amazon Q Developer 作为代码助手启用时的单行提示自动代码生成示例,后面是响应:

Prompt:
# generate code to display hello world in python

图 3.2 – 使用 PyCharm IDE 和 Amazon Q Developer 开发者工具的单行提示自动代码生成

图 3.2 – 使用 PyCharm IDE 和 Amazon Q Developer 开发者工具的单行提示自动代码生成

注意到 Amazon Q Developer 生成了单行代码,因为我们的要求很简单,并且可以很容易地在单行提示中实现。我们将在下一章中查看更复杂的示例。在这一章中,我们只是解释自动代码生成的不同技术。

重要提示

您可能在书的第二部分中的一些提示和截图中发现错别字。我们故意没有纠正它们,以突出显示 Amazon Q Developer 即使在提示中的语法错误的情况下,也能理解所请求内容的潜在含义。

自动代码生成的多行提示

自动代码生成的多行提示是指用户可以在单个提示中使用自然语言文本定义要求,这些文本可以跨越多个句子。基于每个句子提供的信息,代码助手然后尝试理解它们之间的相关性,以便掌握要求并生成所需的代码。

代码助手将主要依赖于每个句子的关键短语;然后它将使用这些关键短语在所有句子之间形成关系。这指导代码助手使用 LLM 形成一系列代码行以满足要求。在大多数情况下,代码助手将生成多行代码。

下面是一些关于自动代码生成多行提示的关键点:

  • 当代码要求相对复杂、有多个步骤且不能简单地在一句中描述时,多行提示自动代码生成非常有用,因为它可能需要更多的上下文。

  • 代码助手使用多行提示中的每个句子来提取关键短语,然后使用 LLM 来理解句子和关键短语之间的关系。这生成了代码片段的解释和相应的相关性,以定义端到端代码需求。

  • 由于需求复杂,通过提供多个简单、简洁的句子来提供上下文,通常可以更有效地实现更好的质量和更针对性的代码。这些句子可以提供如功能需求、架构约束和平台规范等详细信息。

  • 由多行提示生成的代码更加定制化、详细且相对复杂,与单行提示相比。

  • 生成的代码可能需要代码审查和彻底测试,并且根据需求复杂度,在升级到下一个项目生命周期之前可能需要进行一些代码优化。

  • 多行提示用于自动代码生成需要很好地掌握提示工程。重要的是要包括关键细节,同时避免过于冗长或含糊不清,并理解生成的代码。因此,这项技术通常由有编码经验的用户使用。

  • 代码的准确性高度依赖于用于生成代码的代码助手和 LLM 的成熟度/训练水平。

摘要 – 多行提示用于自动代码生成

总结来说,多行提示用于自动代码生成是一种技术,用户使用多个句子用普通自然语言文本描述相对复杂的代码目标。然后,代码助手可以使用这些句子中的关键短语来形成它们之间的关系,这有助于理解用户需求并将它们转化为多行代码。这需要一定程度的提示工程、代码审查经验,在某些情况下,还需要重写生成的代码。

以下是一个多行提示用于自动代码生成的示例。

我们将为以下需求使用自动生成的代码块:

  1. 代码需要生成特定语言版本 – 在这种情况下,Python 3.6.0。

  2. 代码需要读取/user/data/input/sample.csv文件。

  3. 代码需要以特定名称csv_data.将数据加载到 pandas DataFrame 中。

  4. 代码需要显示包含列标题的 50 行样本。

我们将提示写成如下:

"""
Generate code in python 3.6.0 version.
Read CSV file from /user/data/input/sample.csv in a pandas dataframe named csv_data.
Use csv_data dataframe to display sample 50 records with corresponding column details.
"""

我们得到以下输出:

图 3.3 – 在 PyCharm IDE 中使用 Amazon Q Developer 的多行提示进行自动代码生成

图 3.3 – 在 PyCharm IDE 中使用 Amazon Q Developer 的多行提示进行自动代码生成

注意到 Amazon Q Developer 在 PyCharm IDE 中使用了多行提示生成了多行代码,其中包含两个函数 – read_csv_file()用于读取 CSV 文件和display_sample_records()用于显示 50 条记录。然后,它创建了__main__来调用这两个函数以生成端到端脚本。

总体而言,前面的代码确实满足要求,但根据用户/企业偏好,可能需要一些修改和/或调整。在下一节中,我们将了解另一种适合经验丰富开发者的技术。当开发者熟悉代码流程并需要生成代码的帮助时,这项技术尤其有益。

思路链提示用于自动代码生成

自动代码生成的思路链提示是指用户使用单行或多行提示的组合来提供逐步指令的技术。代码助手随后使用 LLM 为每个步骤自动生成代码。用户可以使用多个自然语言提示,这些提示可以链接在一起来解决复杂需求。这些提示可以串联起来,引导模型生成相关的针对性代码。这是一种有效的技术,通过向代码助手逐个提供简单提示,将复杂的编码任务分解成更小的代码片段。代码助手可以使用每个提示生成更定制的代码片段。最终,所有代码片段都可以作为构建块来解决复杂需求。

下面是关于自动代码生成思路链提示的一些关键点:

  • 思路链提示是一种技术,其中用户将复杂需求分解成更小、更易于管理的单行或多行提示。

  • 思路链提示对于代码定制也很有用。用户可以通过在提示中提供特定信息,如生成具有相关变量名、特定函数名、逐步逻辑流程等的代码,有效地使用这项技术来获取定制代码。

  • 代码助手利用 LLM(大型语言模型)的进步来生成满足每个单独提示的代码片段,这些片段作为最终端到端代码的一部分。

  • 思路链提示可用于生成各种任务的代码,例如创建新项目、实现特定功能、定制代码以满足定制标准、提高灵活性、代码准确性以及代码组织。

  • 生成的代码可能需要代码审查和集成测试,以验证所有单独的代码片段组合是否满足端到端需求。根据测试用例的结果,用户可能需要在晋升到下一个项目生命周期之前重新调整提示或重写一些代码块。

  • 这种技术可以由经验更丰富的用户使用,因为他们主要负责追踪代码生成流程以实现最终目标。

  • 整体代码的准确性高度依赖于用户提供的提示,因此用户需要具备一些提示工程背景,以生成准确的端到端代码。

摘要 – 思路链提示用于自动代码生成

总结来说,用于自动代码生成的思维链提示是一种技术,用户可以用更小、更简单、更易于管理的单行或多行纯自然语言文本提示来描述复杂的代码要求。代码助手使用每个提示根据提示中提供的信息生成特定的代码。最终,所有这些单个提示的输出组合生成最终的代码。这种技术在创建高度定制的代码方面非常有效。用户需要执行集成测试以验证代码是否满足端到端功能;根据测试用例的结果,用户可能需要调整提示和/或重写最终代码的一些代码片段。

下面是自动代码生成思维链提示的示例。

我们将使用自动生成的代码块和多个提示来完成以下要求:

  1. 使用 Python 编程语言。

  2. 代码必须检查 /user/data/input/sample.csv 文件是否存在。

  3. 创建一个名为 read_csv_file() 的函数来读取 CSV 文件。同时,尝试使用 pandas 的特定 read_csv 来读取记录。

  4. 使用 read_csv_file() 函数读取 /user/data/input/sample.csv 文件。

  5. 显示文件中的 50 条记录的样本,包括相应的列详细信息。

让我们将前面的要求分解为三个单独的提示。

注意,为了简化,在这个例子中,我们将使用单行提示进行自动代码生成,但根据您的要求的复杂性,您可以组合单行和多行提示来实现思维链提示。代码助手根据提示生成多行代码,并附带相应的内联注释。这简化了用户对代码的理解。

下面是第一个提示和相应的输出:

Prompt 1 :
# Generate code to Check if /user/data/input/sample.csv exists

图 3.4 – 提示 1:在 PyCharm IDE 中使用 Amazon Q 开发者进行带有思维链提示的自动代码生成

图 3.4 – 提示 1:在 PyCharm IDE 中使用 Amazon Q 开发者进行带有思维链提示的自动代码生成

注意到 Amazon Q 开发者编写了多行代码,其中包括一个名为 check_file_exists() 的函数,该函数有一个参数 file_path,用于获取文件路径,检查文件是否存在并返回 True/False。它还添加了下一个 file_path 变量,并赋予其 /user/data/input/sample.csv 路径的值。

下面是第二个提示和相应的输出:

Prompt 2 :
# generate function read_csv_file() and read /user/data/input/sample.csv using pandas read_csv() method.

图 3.5 – 提示 2:在 PyCharm IDE 中使用 Amazon Q 开发者进行带有思维链提示的自动代码生成

图 3.5 – 提示 2:在 PyCharm IDE 中使用 Amazon Q 开发者进行带有思维链提示的自动代码生成

在这里,也观察 Amazon Q Developer 创建了多行代码。按照指示,它创建了一个名为 read_csv_file_file_exists() 的函数,该函数有一个参数用于获取 file_path,并使用 read_csv 方法读取文件。

这里是第三个提示及其输出:

Prompt 3 :
# Display sample 50 records with corresponding column details.

图 3.6 – 提示 3:在 PyCharm IDE 中使用 Amazon Q Developer 的思维链提示进行自动代码生成

图 3.6 – 提示 3:在 PyCharm IDE 中使用 Amazon Q Developer 的思维链提示进行自动代码生成

最后,在这里,观察 Amazon Q Developer 如何使用 display_sample_records() 函数创建多行代码以显示 50 个样本记录。

让我们继续介绍自动代码生成的下一个技术。

与代码助手聊天进行自动代码生成

许多代码助手允许用户使用聊天式交互技术来获取代码推荐和自动生成无错误的代码。一些代码助手示例包括但不限于 Amazon Q Developer、ChatGPT 和 Copilot。就像向队友提问以获取推荐一样,用户可以与代码助手互动,提出问题并获得与问题相关的推荐/建议。此外,许多代码助手还会提供有关答案的逐步说明,并提供一些参考链接以获取更多上下文。用户可以查看详细信息,并可选择将代码集成到主程序中,或更新现有代码。

关于与代码助手聊天进行自动代码生成的一些关键点如下:

  • 与代码助手聊天可以帮助用户实时进行问答式互动。

  • 与代码助手聊天允许用户通过直接提问和用自然语言表达他们的需求来接收建议和推荐。

  • 这种技术可以被任何经验水平的用户用来获取信息和建议,但理解并审查推荐代码需要一些经验。它可以用来获取各种复杂代码问题的响应,学习新技术,生成详细设计,检索整体架构细节,发现编码最佳实践和代码文档,执行调试任务,以及为生成的代码提供未来支持。

  • 在编码过程中,类似于其他提示技术,它允许用户通过描述更小、更易于管理的逐步问题来生成代码,以描述复杂的需求。此外,代码助手跟踪问题和相应的答案,通过推荐最相关的选项来改善未来问题的回答。

  • 在大多数情况下,用户负责审查和测试,以验证推荐的代码确实满足整体需求并集成到整体代码库中。

  • 为了帮助用户理解代码,代码助手还提供了与答案相关的详细流程以及获取更多上下文的参考链接。

  • 许多高级代码助手,如 Amazon Q Developer,也会从当前在 IDE 中打开的文件中收集上下文。它们自动检索有关所使用的编程语言和文件位置的信息,以提供更相关的答案。这有助于代码助手处理与更新现有代码、软件支持、软件开发、最佳实践等相关的问题。

  • 代码的整体准确性高度依赖于用户提出相关且准确的问题的能力,并包含具体细节。

摘要 – 使用代码助手进行自动代码生成聊天

总结来说,任何经验水平的用户都可以利用与代码助手的聊天进行自动代码生成。这项技术涉及在实时中以问答方式与代码助手互动,以接收各种用例的建议和/或推荐,包括复杂代码、详细设计、整体架构、编码最佳实践、代码文档、未来支持、代码更新以及理解代码等。在大多数情况下,用户负责在编码阶段审查并将建议的代码集成到主代码库中。为了协助用户,代码助手可以提供与答案相关的流程细节以及获取更多上下文的参考链接。

以下是与代码助手进行自动代码生成聊天的通用示例。

需求是获取 Amazon Q Developer 的通用帮助,以了解如何调试 Python 函数的问题,特别是对于 read_csv_file() 函数:

Q : How do I debug issues with my read_csv_file()python function?

我们得到以下结果:

图 3.7 – 使用 Amazon Q Developer 与代码助手进行聊天以实现自动代码生成技术

图 3.7 – 使用 Amazon Q Developer 与代码助手进行聊天以实现自动代码生成

下面是有关我们问题的逐步详细响应:

图 3.8 – 使用 Amazon Q Developer 与代码助手进行聊天以实现自动代码生成 – Amazon Q Developer 的响应

图 3.8 – 使用 Amazon Q Developer 与代码助手进行聊天以实现自动代码生成 – Amazon Q Developer 的响应

在响应的底部,注意 Amazon Q Developer 还提供了用于提供详细信息的来源:

图 3.9 – 使用 Amazon Q Developer 与代码助手进行聊天以实现自动代码生成 – Amazon Q Developer 的来源

图 3.9 – 使用 Amazon Q Developer 与代码助手进行聊天以实现自动代码生成 – Amazon Q Developer 的来源

为了使用户更方便,如果您只需将鼠标悬停在来源上,Amazon Q Developer 就会在同一窗口中显示来源的确切详细信息:

图 3.10 – 使用 Amazon Q Developer 与代码助手进行聊天以实现自动代码生成 – Amazon Q Developer 的来源细节

图 3.10 – 与代码助手聊天以实现自动代码生成 – 亚马逊 Q 开发者源细节

现在,让我们深入探讨自动代码生成的不同构建方法。

自动代码生成的常见构建方法

如前几节所述,不同经验水平的用户可以利用代码助手生成满足功能需求的代码。在本节中,我们将介绍一些有用的常见构建方法,这些方法取决于需求复杂度。我们将使用亚马逊 Q 开发者与 JetBrains 的 PyCharm IDE 的集成来展示代码助手如何帮助用户自动化生成代码片段和/或从系统中获取建议。

现在,让我们开始介绍在自动代码生成技术中使用的每种代码构建方法。

单行代码补全

利用 LLM 的代码助手可以跟踪用户提供的所有输入提示。在运行时,代码助手使用所有输入信息来建议相关的代码。这里是一个简单的演示,说明亚马逊 Q 开发者如何帮助用户实现单行代码补全。

当用户在亚马逊 Q 开发者启用的环境中开始编写代码时,它可以理解当前和之前输入的上下文。它将开始建议下一个代码块以完成现有行,或者推荐当前行之后可能跟随的下一行。以下截图突出了这种方法:

图 3.11 – 使用亚马逊 Q 开发者实现 PyCharm IDE 中的单行代码补全

图 3.11 – 使用亚马逊 Q 开发者实现 PyCharm IDE 中的单行代码补全

注意,当用户开始输入 DataFrame 名称csv_data时,亚马逊 Q 开发者建议使用在脚本中定义的read_csv_file()函数。

完整功能生成

编程的基本构建块之一是函数。通常,函数是在程序中定义的、可重用的多行代码块,用于执行特定任务。除非被调用,否则函数不会运行。函数可以接受参数或参数,在脚本中调用时可以传递。可选地,函数可以返回数据给调用语句。代码助手可以帮助用户编写整个函数体。用户只需提供他们从函数中需要的功能信息,以及可选的编程语言,使用任何之前的自动代码生成技术即可。

现在,让我们看看用户如何自动生成一个函数的例子。

以下是一个简单的演示,说明亚马逊 Q 开发者如何帮助用户生成一个完整的功能:

  1. 用户需要编写一个名为read_csv()的简单 Python 函数,该函数以file_path为参数,并返回 50 条记录的样本

  2. 调用read_csv()函数从/user/data/input/sample.csv路径读取 CSV 文件

我们将使用思维链提示技术来生成前面的代码。以下是第一个提示及其输出:

Prompt 1 :
"""
write a python function named read_csv() which takes file_path as a parameters and returns sample 50 records.
"""

图 3.12 – 在 PyCharm IDE 中使用 Amazon Q Developer 生成函数 – 生成函数

图 3.12 – 在 PyCharm IDE 中使用 Amazon Q Developer 生成函数 – 生成函数

仔细观察,正如单行提示中所述,Amazon Q Developer 创建了一个名为 read_csv() 的 Python 函数,该函数接受 file_path 作为参数,并返回 50 条记录的样本。

现在,让我们看看如何自动生成函数语句逻辑,然后是输出:

Prompt 2 :
"""
call read_csv by passing file path as /user/data/input/sample.csv
"""

图 3.13 – 在 PyCharm IDE 中使用 Amazon Q Developer 完成完整函数生成 – 调用函数

图 3.13 – 在 PyCharm IDE 中使用 Amazon Q Developer 完成完整函数生成 – 调用函数

仔细观察,正如 Amazon Q Developer 指示的那样,为 read_csv() 函数生成了调用逻辑,用于从 /``user/data/input/sample.csv 文件中读取数据。

块完成

在程序的逻辑流程中,用户需要根据条件运行某些代码块,或者需要在循环中运行某些行。实现这些功能最常用的代码块是 if 条件、for 循环、while 条件和 try 块。代码助手被训练来完成并建议编写这些条件和循环语句的代码。

现在,让我们看看 Amazon Q Developer 如何帮助用户在 完整函数生成 示例中(参考 图 3**.13)建议可能的 if 条件。由于 Amazon Q Developer 理解代码的上下文,它能够理解与 read_csv() 函数相关的功能。因此,在 read_csv() 函数内开始输入 if 以显示我们编写条件块的意图:

图 3.14 – 在 IDE 中使用 Amazon Q Developer 完成块

图 3.14 – 在 IDE 中使用 Amazon Q Developer 完成块

注意,一旦用户开始输入 if,Amazon Q Developer 就理解 file_pathread_csv() 函数的强制参数,并期望有一个 .csv 文件;基于这种理解,它建议添加一个错误处理条件来检查传递的参数是否具有 .``csv 文件扩展名。

行内推荐

通常,用户需求可能很复杂,用户可能无法通过组合多个提示来定义所有需求。在某些情况下,代码助手可能无法一次性生成用户期望的脚本。此外,如果用户决定更新现有代码,那么 Amazon Q Developer 提供逐行推荐。Amazon Q Developer 尝试理解脚本的上下文并预测可能逻辑上有用的相关下一行。

现在,让我们使用上一节“块完成”中的脚本(参考图 3.14)来检查亚马逊 Q 开发者是否可以推荐下一行代码。为了说明功能,让我们删除最后一行print(data)。然后,转到脚本的最后一行并按Enter;现在,亚马逊 Q 开发者将尝试预测脚本的下一个逻辑功能:

图 3.15 – 使用亚马逊 Q 开发者 IDE 中的逐行推荐

图 3.15 – 使用亚马逊 Q 开发者 IDE 中的逐行推荐

注意到,在这个脚本中,亚马逊 Q 开发者建议打印 DataFrame 语句,print(data),这在我们从名为data的 DataFrame 中读取sample.csv文件时是有逻辑意义的。

参考现有代码

常见的最佳编码实践之一是使用同一代码库中不同文件中的现有函数。许多开发者喜欢创建可重用函数并将它们保存在一个公共文件中,以便在其他脚本中引用。代码助手理解库中现有的脚本和函数。这使得他们能够帮助用户推荐引用现有文件中函数的新代码。用户可以编写简单的单行提示,建议代码助手生成引用特定程序文件中现有函数的代码。

例如,亚马逊 Q 开发者有一些功能可以在生成新代码时交叉引用现有代码。假设用户已经将函数保存在prompt-Fullfunctiongeneration.py文件中(参考图 3.14)并想在新的脚本中使用现有的read_csv函数。以下是提示和输出:

Prompt:
# read test.csv file using read_csv function from prompt-Fullfunctiongeneration.py file

图 3.16 – 使用亚马逊 Q 开发者 IDE 中的现有代码交叉引用

图 3.16 – 使用亚马逊 Q 开发者 IDE 中的现有代码交叉引用

注意到亚马逊 Q 开发者导入了prompt_fullfunctiongeneration中的所有功能,然后使用了read_csv()函数并生成代码来读取test.csv文件。

生成样本数据

在开发过程中,开发者通常需要样本数据,这些数据可能或可能不是现成的。代码助手可以帮助用户以不同的方式生成样本数据。我们将探讨亚马逊 Q 开发者帮助用户生成样本数据的几种方法。

假设用户已经有一些示例数据,并希望创建额外的记录以增加数据量。就像许多其他代码助手一样,Amazon Q Developer 理解现有示例数据的结构和格式,以生成下一个示例记录。在下面的示例示例中,用户有一个包含 sr_nbrnameagecity 作为属性的 JSON 格式记录。一旦用户在第一个记录的末尾按下 Enter 键,Amazon Q Developer 将开始生成示例记录。以下截图突出了这一功能:

图 3.17 – 在 PyCharm IDE 中使用 Amazon Q Developer 生成示例数据

图 3.17 – 在 PyCharm IDE 中使用 Amazon Q Developer 生成示例数据

注意到 Amazon Q Developer 是根据现有记录的结构建议下一个示例记录,{"sr_nbr": 2, "name": "Jane", "age": 25, "city": "Chicago"}

让我们考虑另一个示例,并假设用户没有示例数据集,但知道样本数据中需要的属性。用户需要创建固定数量的样本记录。在这种情况下,用户可以使用提示来生成样本数据。在下面的示例示例中,用户输入了一个提示来生成 50 条具有 sr_nbrnameagecity 作为所需属性的 JSON 格式记录。使用此提示,Amazon Q Developer 建议了一个随机数据生成函数。

下面是提示和输出:

Prompt:
"""
Generate 50 records for user_data json with sr_nbr, name, age, and city
"""

图 3.18 – 在 PyCharm IDE 中使用 Amazon Q Developer 生成示例数据 – 函数逻辑

图 3.18 – 在 PyCharm IDE 中使用 Amazon Q Developer 生成示例数据 – 函数逻辑

注意到根据提示中的要求,Amazon Q Developer 生成了 generate_user_data() 函数,范围是 50,以生成具有 sr_nbrnameagecity 属性的 JSON 文件格式的示例数据。

此外,如果您在函数末尾按下 Enter 键,您将观察到 Amazon Q Developer 将使用逐行建议来建议端到端代码,并将数据保存到 user_data.json 文件中。以下截图突出了这一功能:

图 3.19 – 在 IDE 中使用 Amazon Q Developer 生成示例数据 – 脚本

图 3.19 – 在 IDE 中使用 Amazon Q Developer 生成示例数据 – 脚本

编写单元测试

测试脚本是编码过程中的一个必要部分。测试代码需要在不同的阶段进行,例如在编码过程中或接近编码结束时进行单元测试,跨多个脚本的集成测试等等。让我们探讨代码助手提供的选项,以支持单元测试的创建。正如之前讨论的,代码助手可以理解脚本的上下文。这有助于开发者在创建单元测试时引用现有的程序文件。

假设用户想要为之前生成的代码创建单元测试以生成样本数据(参考 图 3**.18)。用户可以使用简单的单行提示来创建单元测试。Amazon Q Developer 可以分析函数文件中的代码并生成基本的单元测试用例。以下提示和输出展示了这一功能:

Prompt:
"""
Create unit tests for the generate_user_data() function from sample_data_generation.py file
"""

图 3.20 – 在 PyCharm IDE 中使用 Amazon Q Developer 编写单元测试

图 3.20 – 在 PyCharm IDE 中使用 Amazon Q Developer 编写单元测试

注意到 Amazon Q Developer 使用输入提示来引用 sample_data_generation.py 文件中的 generate_user_data() 函数,并根据功能生成了基本的单元测试用例。此外,它还创建了一个完整的端到端脚本,可以用来运行单元测试用例。

解释和记录代码

在项目的生命周期中,许多开发者对同一脚本进行工作以添加代码或更新现有代码。缺乏文档会使每个人都难以理解脚本中的端到端逻辑。为了帮助开发者理解现有代码,许多代码助手都有不同的机制来以自然语言和纯文本格式生成代码的解释。用户可以使用这些选项的结果来创建文档或将详细信息嵌入到脚本的注释部分。

Amazon Q Developer 可以帮助用户根据现有脚本生成文档。一旦脚本在 IDE 中打开,只需在 Q 的聊天会话中输入 Explain 命令。Amazon Q Developer 将分析整个脚本,并返回自然语言文本,解释脚本的功能。例如,让我们使用之前创建的脚本 prompt-Fullfunctiongeneration.py(参考 图 3**.14),并让 Amazon Q Developer 解释代码。

图 3.21 – 使用 Amazon Q Developer 接口在 PyCharm IDE 中记录代码

图 3.21 – 使用 Amazon Q Developer 接口在 PyCharm IDE 中记录代码

注意到用户不需要指定脚本名称,因为当您输入 Explain 命令时,Amazon Q Developer 可以自动使用编辑器中打开的脚本。以下截图突出了 Amazon Q Developer 提供的代码解释:

图 3.22 – 使用 Amazon Q Developer 在 IDE 中记录代码 – 文档

图 3.22 – 使用 Amazon Q Developer 在 IDE 中记录代码 – 文档

注意到,Amazon Q Developer 生成了自然语言的文档。它能够提供read_csv()函数的确切功能;然后,它解释说脚本使用了该函数来读取/user/data/input/sample.csv文件。这样,任何代码都可以轻松地被文档化,无需手动理解代码并输入整个解释,从而节省时间并提高生产力。

更新现有代码

与前面的例子类似,开发者通常会继承先前开发的代码。用户需要根据新可用的库和已知问题以及提高编码标准来更新代码。

通常,更新现有代码可以分为以下三个类别:

  • 重构:用户需要更新现有代码以简化它,使其易于理解,并/或添加额外的异常来处理错误等

  • 修复:用户需要更新现有代码以修复可能已知或未知的错误

  • 优化:用户需要更新现有代码以提高执行效率和性能调优

为了帮助开发者完成上述任务,许多代码助手提供了选项。用户可以使用这些选项的结果来更新现有代码并提高编码标准。

让我们看看 Amazon Q Developer 如何帮助用户更新现有代码。类似于前面章节中讨论的解释命令,Amazon Q Developer 有重构修复优化命令。一旦脚本在 IDE 中打开,只需输入这些命令中的任何一个,就可以从 Amazon Q Developer 获得建议。根据代码质量,Amazon Q Developer 可以提供多个不同的建议,并直接提供一个选项将片段插入到现有脚本中。

如以下屏幕截图所示,让我们使用之前创建的脚本prompt-Fullfunctiongeneration.py(参考图 3.15),并让 Amazon Q Developer 重构代码:

图 3.23 – 使用 Amazon Q Developer 界面在 PyCharm IDE 中更新现有代码:重构

图 3.23 – 使用 Amazon Q Developer 界面在 PyCharm IDE 中更新现有代码:重构

注意到,当你在编辑器中输入重构指令时,Amazon Q Developer 可以自动使用打开的脚本,并建议在重构时考虑的多个建议。让我们在下一节中看看其中的一些。

在下面的屏幕截图中,Amazon Q Developer 建议向file_path函数参数添加提示,并将参数作为列表返回以提高整体可读性:

图 3.24 – 使用 Amazon Q Developer 界面在 PyCharm IDE 中更新现有代码:重构 2

图 3.24 – 使用 Amazon Q Developer 界面在 PyCharm IDE 中更新现有代码:重构 2

如以下屏幕截图所示,Amazon Q Developer 建议为 file_path 参数添加额外的异常处理,以检查文件是否为 CSV 类型以及文件是否存在:

图 3.25 – 使用 Amazon Q Developer 接口在 PyCharm IDE 中更新现有代码:重构 3

图 3.25 – 使用 Amazon Q Developer 接口在 PyCharm IDE 中更新现有代码:重构 3

我们将在 第十二章 中探索其他选项并深入探讨示例。

功能开发

代码助手可以通过用自然语言描述功能并指定关键词来帮助开发者开发功能。作为用户,您只需提供与功能功能相关的关键词/短语,代码助手就可以生成端到端的代码。

让我们看看 Amazon Q Developer 如何帮助用户开发功能。Amazon Q Developer 利用当前项目的上下文生成一个全面的实施计划,并指定必要的代码更改。要开始功能开发,用户只需在项目内打开一个文件并在 /dev 中输入 /dev

例如,让我们让 Amazon Q Developer 实现二分查找功能。这在上面的屏幕截图中得到了突出显示:

图 3.26 – 使用 Amazon Q Developer 接口在 PyCharm IDE 中进行功能开发

图 3.26 – 使用 Amazon Q Developer 接口在 PyCharm IDE 中进行功能开发

注意,根据命令,Amazon Q Developer 为二分查找功能生成了代码,提供了代码流/算法的详细信息,并引用了源代码以生成功能。

我们将在 第十二章 中深入探讨详细示例。

代码转换

在升级版本时,根据所使用的编程语言,用户可能需要在他们的代码中进行各种调整以确保与最新版本兼容。代码助手为开发者提供升级代码的帮助,帮助他们从旧版本过渡到最新版本。

例如,Amazon Q Developer 具有升级代码语言版本的能力。用户只需打开现有的旧版本代码,并在文件中使用 /transform 命令直接升级代码版本。

我们将在 第十二章 中通过示例深入探讨更多细节。

摘要

在本章中,我们介绍了代码助手与大型语言模型(LLM)的集成,以帮助用户进行自动代码生成。然后,我们探讨了三种常用的自动代码生成提示技术:单行提示、多行提示和思维链提示。我们为每种自动代码生成提示技术介绍了其潜在的应用场景、局限性以及所需的编程经验。示例代码示例使用了启用 Amazon Q Developer 的 JetBrains PyCharm IDE。此外,我们还介绍了自动代码生成过程中的“与代码助手聊天”技术,用户可以通过简单的问答式会话与代码助手互动。Amazon Q Developer 被用于获取编码/调试的一般性建议。

我们随后讨论了一些常见的代码生成构建方法,例如单行代码补全、完整功能生成、块补全、逐行推荐、生成示例数据、编写单元测试、解释和记录代码、更新现有代码、功能开发和代码转换。此外,我们还使用 Amazon Q Developer 在 JetBrains PyCharm IDE 中探索了这些功能,以支持最常见的代码构建方法。

接下来,我们将开始本书的第二部分。在这一部分,第四章第九章将指导您了解 Amazon Q Developer 如何通过为许多支持的编程语言自动生成代码来提高开发者的生产力。根据您的专业或偏好,您可以自由地直接跳转到您最感兴趣的章节。

在下一章中,我们将深入探讨如何在 IDE 环境中利用这些技术和构建方法,特别是针对 Python 和 Java 语言。此外,我们还将借助 Amazon Q Developer 创建一个示例 Python 应用程序。

参考文献

第四章:通过自动代码生成提高 Python 和 Java 的编码效率

在本章中,我们将探讨以下关键主题:

  • 天气数据分析用例概述

  • 使用 Amazon Q 开发者为天气数据分析生成 Python 自动代码

  • 使用 Amazon Q 开发者为天气数据分析生成 Java 自动代码

在上一章中,我们为不同的自动代码生成技术与其 AI 驱动的代码助手交互奠定了基础。我们讨论了常见的提示技术,如单行、多行、思维链和与代码助手聊天,以及常见的代码构建方法。

在本章中,我们将探讨如何使用 Amazon Q 开发者工具在多种集成开发环境(IDEs)中建议代码。我们将从开发者最常用的两种编程语言,Python 和 Java,开始,展示如何利用第 3 章 中的技术生成自动代码。我们还将看到 Amazon Q 开发者如何通过启用与代码助手进行聊天的技术,在代码开发过程中增加价值。

我们相信,通过一个示例应用程序展示 AI 驱动的代码助手的效率和易用性将具有影响力。

在下一节中,让我们首先定义我们将用于 Python 和 Java 脚本的示例用例。

天气数据分析用例概述

许多客户都渴望了解特定城市的天气模式,这对于众多应用都具有重要意义,并且可以被视为广泛应用中的关键数据源。企业中的天气数据应用可以在不同行业中服务于各种目的。

下面是一个概述,说明天气数据应用如何在某些企业中得到利用:

  • 风险管理及保险:保险公司可以使用天气数据来评估和减轻与天气相关事件(如飓风、洪水或野火)相关的风险。通过分析历史天气模式和预报,保险公司可以更好地理解潜在风险并相应调整其政策。

  • 供应链优化:天气数据可以通过提供可能影响运输、物流和分销网络的天气条件洞察来帮助优化供应链运营。企业可以使用天气预报来预测中断,并相应地优化路线和库存管理。

  • 能源管理:能源公司可以利用天气数据来优化能源生产和分配。例如,可再生能源公司可以使用天气预报来预测太阳能或风能的生成,帮助他们更好地规划和管理工作资源。

  • 金融行业:在金融行业,天气数据可以通过多种方式被利用来增强决策过程和改善风险管理策略。在零售银行业务中,天气模式直接影响消费者的行为和消费习惯,从而影响银行业务。此外,在房地产行业,天气数据具有很高的价值,尤其是在财产保险和抵押贷款方面。

  • 农业和农业:农业企业可以利用天气数据优化作物规划、灌溉计划和害虫管理。通过分析天气模式和预报,农民可以做出基于数据的决策,以提高作物产量并最小化与天气相关事件相关的风险。

  • 零售和营销:零售商可以利用天气数据优化营销活动和库存管理。例如,零售商可以根据天气预报调整促销和库存水平,以利用受天气条件影响的消费者行为变化。

  • 建筑和基础设施:建筑公司可以利用天气数据更有效地规划建设项目并最小化与天气相关的延误。通过将天气预报整合到项目规划和调度中,建筑企业可以优化资源配置并降低项目风险。

  • 旅游和酒店业:旅游和酒店业的企业可以利用天气数据优化运营并提升客户体验。例如,酒店和度假村可以根据天气预报调整定价和营销策略,以在有利天气条件下吸引更多游客。

总体而言,企业中的天气数据应用可以提供有价值的见解,帮助企业跨行业做出明智的决策,最终提高效率、降低风险和增强竞争力。有许多供应商,如 OpenWeatherMap、The Weather Company、AerisWeather、WeatherTAP、AccuWeather 和 Yahoo Weather,为企业和机构提供天气数据。

应用需求 – 天气数据分析

对于我们的应用,我们将使用 OpenWeatherMap 提供的天气数据,它提供了一套丰富的 API。通过api.openweathermap.org,您可以访问一个全面的天气信息来源,使您能够无缝地将实时和预测天气数据集成到您的应用中。OpenWeatherMap 的 API 提供了一系列的天气数据,包括当前天气状况、预报、历史数据等。无论您是在构建天气应用、优化物流还是规划户外活动,我们的 API 都能提供您做出明智决策所需的数据。

让我们定义这个简单且通用的应用的需求。我们将为 Python 和 Java 脚本使用相同的应用需求。

应用需求 – 天气数据分析

业务需求:分析师对获取国家和城市的天气预报感兴趣。他们希望看到可视化温度变化的图表。

用户输入:应用程序应接受用户输入的国家和城市名称作为参数。

数据获取:根据提供的输入,应用程序使用 API 密钥从 api.openweathermap.org/data/2.5/forecast 请求天气数据。

数据表:显示包含日期时间和相应华氏温度的表格。

数据可视化:创建简单的图表,根据从 OpenWeatherMap 获取的数据集绘制华氏温度和日期。

访问 OpenWeatherMap API 的先决条件

OpenWeatherMap 提供使用 API 调用请求数据的选项。作为先决条件,您需要创建一个账户。以下是步骤摘要;如需更多信息,请参考 openweathermap.org/

要从 OpenWeatherMap 获取天气数据,您需要遵循以下步骤:

  1. 注册:访问 OpenWeatherMap 网站 (openweathermap.org/) 并注册账户。注册并登录后,继续下一步。

  2. 使用 api.openweathermap.org API 收集数据集。根据我们在本章中调用 API 的次数,它将保持在免费层。

  3. 获取 API 密钥:您可以从账户仪表板生成 API 密钥或使用默认密钥。

图 4.1 – OpenWeatherMap API 密钥

图 4.1 – OpenWeatherMap API 密钥

记下 API 密钥,因为我们将在下一节中调用 API 时需要它。

使用 Amazon Q Developer 自动生成 Python 代码进行天气数据分析

既然我们已经定义了用例(问题陈述)并完成了先决条件,让我们利用各种自动代码生成技术来获取解决方案。为了说明这些技术,我们将利用 JetBrains 的 PyCharm IDE 中的 Python 编程语言,该 IDE 已配置为与 Amazon Q Developer 一起使用。请参阅 第二章 中设置 Amazon Q Developer 与 JetBrains PyCharm IDE 的详细步骤。

天气数据分析的解决方案蓝图

作为一名经验丰富的代码开发者或数据工程师,您需要通过定义可重用函数将前面的业务目标转换为技术需求:

  1. 编写一个用于天气数据分析的 Python 脚本。

  2. 编写一个函数,使用 API 密钥获取用户输入的国家和城市的天气数据,从 api.openweathermap.org/data/2.5/forecast

  3. 将 API 调用返回的日期转换为 UTC 格式。(请注意,OpenWeatherMap API 将返回与请求时间相关的未来 40 小时的日期。)

  4. 将 API 调用返回的温度从摄氏度转换为华氏度。

  5. 编写一个函数,以表格形式显示 UTC 日期和华氏度温度。

  6. 编写一个函数,根据 temperature_datay 轴上绘制温度,在 x 轴上绘制日期。

  7. 接受用户输入的国家和城市名称。

  8. 使用用户提供的国家和城市名称调用 get_weather_data() 函数。

  9. 根据天气数据创建一个包含日期和时间(华氏度温度)的表格。

  10. 根据天气数据为指定城市绘制一个图表,其中 y 轴为 Temperature (°F)x 轴为 Date

  11. 生成脚本的文档。

为了实现整体解决方案,我们将主要使用思维链提示来获取端到端脚本,以及单行和多行提示的组合来处理单个代码片段。我们还将与代码助手进行对话以生成文档。

注意

人工智能代码助手的输出是非确定性的,因此您可能不会得到完全相同的代码。您可能还需要修改代码的一些部分以满足要求。此外,自动生成的代码可能引用了您需要手动安装的包。要在 JetBrains 的 PyCharm 集成开发环境中安装缺失的包,请参阅www.jetbrains.com/help/pycharm/installing-uninstalling-and-upgrading-packages.html中的说明。

让我们逐步进行解决方案。

要求 1

使用最新版本的 Python 编写 Python 脚本。

使用 JetBrains 的 PyCharm 集成开发环境创建一个 book_weather_data.py 文件,并确保已启用 Amazon Q 开发者。

图 4.2 – JetBrains 的 PyCharm 集成开发环境,已启用 .py 文件和 Amazon Q 开发者

图 4.2 – JetBrains 的 PyCharm 集成开发环境,已启用 .py 文件和 Amazon Q 开发者

上一步将生成一个以 .py 扩展名的文件,当生成代码时,Amazon Q 开发者将能够识别该文件。因此,在您的提示中不需要包含 Python 语言名称。

要求 2、3 和 4

让我们将要求 2、3 和 4 结合起来创建一个多行提示:

  • 编写一个函数,根据用户从 api.openweathermap.org/data/2.5/forecast 选择的国家和城市获取天气数据。

  • 将 API 调用返回的日期转换为 UTC 格式。

  • 将 API 调用返回的温度从摄氏度转换为华氏度。

我们正在使用多行提示技术。提醒一下,在这个技术中,我们可以指示我们的代码助手根据我们的具体要求生成代码。

我们将提示编写如下:

'''
Write function get_weather_data() to get weather data from http://api.openweathermap.org/data/2.5/forecast based on country and city.
Convert date to UTC format and Convert temparture from Celsius to Fahrenheit.
Then return date and temperature as temperature_data
'''

注意,作为多行提示的一部分,我们已经为代码助手提供了具体的说明:

图 4.3 – Python 的 get_weather_data() 函数

图 4.3 – Python 的 get_weather_data() 函数

注意,代码助手遵循了提示中的具体指令。此外,它还确定需要 api_key 来从 api.openweathermap.org/data/2.5/forecast 获取数据,因此将其作为参数之一添加。

要求 5

编写一个函数,以表格形式显示 UTC 日期和华氏温度。

我们使用 单行提示 技术,因为要求简单,可以很容易地用一行描述。请注意,作为单行提示的一部分,我们已为代码助手提供了具体指令:

  • 要使用的函数名是 display_weather_table().

  • 使用 temperature_data 显示表格。这是思维链提示,我们将先前定义的 get_weather_data() 函数的返回结果作为此函数的输入。

我们将提示写成如下形式:

'''
write function display_weather_table() to show temperature_data
'''

图 4.4 – Python 的 display_weather_table() 函数

图 4.4 – Python 的 display_weather_table() 函数

要求 6

编写一个函数,根据 temperature_datay 轴上绘制 温度,在 x 轴上绘制 日期

我们使用单行提示技术,因为要求简单,可以很容易地用一行描述。请注意,作为单行提示的一部分,我们已为代码助手提供了具体指令:

  • 要使用的函数名是 plot_temperature_graph()

  • 使用 temperature_data 显示表格。这是思维链提示,因为我们正在将先前定义的 get_weather_data() 函数的返回结果作为此函数的输入。

我们将提示写成如下形式:

'''
Write function plot_temperature_graph() to plot temperature on Y axis and date on X axis based on temperature_data
'''

图 4.5 – Python 的 plot_temperature_graph() 函数

图 4.5 – Python 的 plot_temperature_graph() 函数

要求 7、8、9 和 10

让我们将要求 7、8、9 和 10 结合起来创建多行提示技术:

  • 接受用户输入的国家和城市名称。

  • 使用用户提供的国家和城市名称调用 get_weather_data() 函数。

  • 根据天气数据创建一个包含日期和时间(华氏温度)的表格。

  • 根据天气数据,以 温度 (°F) 为 Y 轴,日期 为 X 轴绘制指定城市的图表

我们使用思维链提示技术将所有先前定义的函数链接在一起。

我们将提示写成如下形式:

'''
Accept country and city from User and call get_weather_data() and display_weather_table() and plot_temperature_graph() functions.
'''

我们将得到以下输出:

图 4.6 – Python 获取用户输入并显示天气数据的代码

图 4.6 – Python 获取用户输入并显示天气数据的代码

注意,在先前的提示中,我没有包括输入数据的错误处理。然而,我鼓励您通过添加更多上下文来实验提示,以指导 Amazon Q 开发者建议带有额外错误处理的代码。

现在,让我们确保脚本按预期运行。运行代码并输入国家和城市以获取天气数据。

对于测试,我将使用以下值,但请随意选择您自己的:

  • 国家名称:US

  • 城市名称:Atlanta

图 4.7 – 包含用户输入的国家、城市和天气信息的 Python 输出表格

图 4.7 – 包含用户输入的国家、城市和天气信息的 Python 输出表格

现在,让我们回顾与日期和相应温度绘制的图表相关的输出第二部分。

图 4.8 – 包含日期和温度的 Python 输出图表

图 4.8 – 包含日期和温度的 Python 输出图表

要求 11

生成脚本的文档。

让我们使用 Amazon Q 开发者与代码助手聊天技术来生成文档。请记住,Amazon Q 开发者支持“解释”提示(更多详情,见第三章

或者,您可以突出显示整个代码,然后右键单击并从弹出菜单中选择Amazon Q选项,然后选择解释代码

图 4.9 – Amazon Q 开发者提供的 Python 代码文档

图 4.9 – Amazon Q 开发者提供的 Python 代码文档

前面的截图显示了 Amazon Q 开发者提供的代码解释的第一部分。

现在,让我们使用一些额外的提示来生成更多文档。

如您所见,Amazon Q 开发者分析了编辑器窗口中打开的脚本。然后它试图理解代码以推导其逻辑。最后,它综合所有发现以生成旨在帮助用户更好地理解代码的文档。

图 4.10 – Python Amazon Q 开发者建议的提示

图 4.10 – Python Amazon Q 开发者建议的提示

注意,Amazon Q 开发者提示进行额外的建议以获得更深入的文档。请随意进一步探索。应用程序开发者可以通过使用与代码助手聊天技术来使用 Amazon Q 开发者进行代码改进。

让我们要求 Amazon Q 开发者为之前生成的 display_weather_table() 函数提供更新或改进的代码:

code to improve
def display_weather_table(temperature_data):
    df = pd.DataFrame(temperature_data, columns=['Date', 
        'Temperature (°F)'])
    print(df)

图 4.11 – Amazon Q 开发者建议的 Python 改进

图 4.11 – Amazon Q 开发者建议的 Python 改进

如您在前面的快照中所见,Amazon Q 开发者提供了带有额外验证的新代码,使用了 dataframe,并推荐了更改。您可以通过使用“在光标处插入”或“复制”来简单地更新代码片段。

我已经使用其中一个代码片段演示了一个简单的用例,但通过遵循前面的步骤,您可以从 Amazon Q Developer 获取针对您用例的推荐更新代码。此外,您可以调整提示以指示 Amazon Q Developer 生成具有错误和异常处理的代码。

用例摘要

如上图所示,我们使用了一系列的提示,包括思维链、单行和多行提示,创建了一个用于天气数据应用的端到端 Python 脚本。我们使用了配置为与 Amazon Q Developer 一起工作的 JetBrains PyCharm IDE。对于脚本,我们使用 Amazon Q Developer 和特定的提示来自动生成从 OpenWeatherMap 检索天气数据、将温度从摄氏度转换为华氏度、将日期转换为 UTC 格式以及绘制图表的功能。

此外,我们还利用了 Amazon Q Developer 的聊天功能来生成详细的文档,并为我们天气数据应用获得代码改进建议。通过这种方法,我们展示了如何有效地整合各种提示类型并利用 Amazon Q Developer 的能力来简化开发过程。

通过调整提示或简单地通过聊天式界面指示 Amazon Q Developer,读者可以进一步指导 Amazon Q Developer 生成具有增强错误和异常处理的代码,使解决方案对不同用例具有鲁棒性和多功能性。此示例展示了结合高级 IDE 和智能代码助手高效构建复杂应用的能力。

在下一节中,让我们使用 Java 语言实现相同的应用程序。

使用 Amazon Q Developer 进行天气数据分析的 Java 自动代码生成

既然我们已经定义了用例并完成了先决条件,让我们使用不同的自动代码生成技术来实现这个用例。为了说明这一点,我们将在已经设置为与 Amazon Q Developer 一起工作的Visual Studio CodeVS Code)IDE 中使用 Java 编程语言。请参考第二章中的详细步骤,以帮助您使用 VS Code IDE 设置 Amazon Q Developer。

天气数据分析解决方案蓝图

作为一名经验丰富的代码开发者或数据工程师,您需要通过定义可重用函数将前面的业务目标转换为技术要求:

  1. 编写用于天气数据分析的 JavaScript 脚本。

  2. 接受用户输入的国家和城市名称。

  3. 使用用户输入的国家和城市从http://api.openweathermap.org/data/2.5/forecast获取天气数据。

  4. 将 API 调用返回的日期转换为 UTC 格式。(注意,OpenWeatherMap API 将返回与请求时间相关的未来 40 小时的日期。)

  5. 将 API 调用返回的温度从摄氏度转换为华氏度。

  6. 以表格形式显示 UTC 日期和华氏度温度。

  7. 根据天气数据,以 温度 (°F)y 轴,日期x 轴绘制指定城市的图表。

  8. 生成脚本的文档。

为了实现整体解决方案,我们将主要使用单行和多行提示的组合来处理单个代码片段,并与代码助手进行对话以生成文档。

注意

AI 辅助代码助手的输出是非确定性的,因此您可能不会得到以下完全相同的代码。您可能还需要修改代码的一些部分以满足要求。此外,自动生成的代码可能引用您需要手动安装的包或方法。要在 VS Code IDE 中安装缺失的包,请参考 code.visualstudio.com/docs/java/java-project

让我们逐步进行解决方案。

要求 1

编写用于天气数据分析的 Java 脚本。

使用 VS Code IDE 创建一个新的 Java 项目。创建 book_weather_data.java 文件,并确保已启用 Amazon Q 开发者。

图 4.12 – 包含 .java 文件和 Amazon Q 开发者的 VS Code IDE

图 4.12 – 包含 .java 文件和 Amazon Q 开发者的 VS Code IDE

上一步将创建一个具有 .java 扩展名的文件,Amazon Q 开发者将引用该文件,因此无需在您的提示中包含 Java 语言名称。

要求 2

接受用户输入的国家和城市名称。

我们正在使用单行提示技术,因为它是一个非常直接的要求。

我们将提示信息编写如下:

// Accept user input for country name and city name

然后,我们将得到以下输出:

图 4.13 – Java 接受用户输入

图 4.13 – Java 接受用户输入

要求 3、4 和 5

让我们将要求 3、4 和 5 结合起来,因为它们构成一个逻辑单元。

  • 根据 api.openweathermap.org/data/2.5/forecast 中的国家和城市获取天气数据。

  • 将 API 调用的返回日期转换为 UTC 格式。

  • 将 API 调用返回的温度从摄氏度转换为华氏度。

我们正在使用多行提示技术来描述逻辑。我们将提示信息编写如下:

//Get weather data from http://api.openweathermap.org/data/2.5/forecast based on country and city.
//Convert date to UTC format and Convert temperature from Celsius to Fahrenheit.

图 4.14 – 获取天气数据的 Java 代码

图 4.14 – 获取天气数据的 Java 代码

要求 6

以表格形式显示 UTC 日期和华氏度温度。

我们正在使用单行提示技术。我们将提示信息编写如下:

// Display temperature in Fahrenheit and date in UTC for each weather forecast entry

然后,我们将得到以下输出:

图 4.15 – 显示天气数据的 Java 代码

图 4.15 – 显示天气数据的 Java 代码

要求 7

根据天气数据,以 温度 (°F)y 轴,日期x 轴绘制指定城市的图表。

我们正在使用单行提示技术。我们将提示信息编写如下:

// Plot a graph for the specified city with "Temperature (°F)" on the Y-axis and "Date" on the X-axis for weather forecast entry

图 4.16 – 显示天气数据的图表的 Java 代码

图 4.16 – 显示天气数据的图表的 Java 代码

现在,让我们确保脚本按预期运行。运行代码并输入国家和城市以获取天气数据。

对于测试,我将使用以下值,但请随意选择您自己的:

  • 国家名称:US

  • 城市名称:亚特兰大

图 4.17 – 用户输入国家、城市和天气信息的 Java 代码输出

图 4.17 – 用户输入国家、城市和天气信息的 Java 代码输出

现在,让我们回顾与日期和相应温度绘制的图表相关的输出第二部分。

图 4.18 – 天气信息图表的 Java 输出

图 4.18 – 天气信息图表的 Java 输出

要求 8

生成脚本的文档。

让我们使用 Amazon Q 开发者与代码助手技术生成文档。请记住,Amazon Q 开发者支持 Explain 提示或命令(参见 第三章 以获取参考)。

或者,您可以选择整个代码,然后右键单击并从弹出菜单中选择 Amazon Q 选项,然后选择 Explain

图 4.19 – Java 中的 Amazon Q 开发者概述文档

图 4.19 – Java 中的 Amazon Q 开发者概述文档

如您所见,Amazon Q 开发者分析了编辑器窗口中打开的脚本。然后它试图理解代码以推导其逻辑。最后,它综合所有发现以生成旨在帮助用户更好地理解代码的文档。

现在,让我们使用以下屏幕截图中看到的附加文档建议。

图 4.20 – Java 中的 Amazon Q 开发者建议提示

图 4.20 – Java 中的 Amazon Q 开发者建议提示

注意,Amazon Q 开发者提供了额外的建议以获得更深入的文档。请随意进一步探索它们。

应用程序开发者可以通过使用与代码助手聊天技术来使用 Amazon Q 开发者进行代码改进。让我们要求 Amazon Q 开发者为之前生成的 '将温度转换为华氏度和日期转换为 UTC,并将数据添加到时间序列' 要求提供更新或改进的代码。

我们将提示编写如下:

Improve following code :
for (int i = 0; i < forecastList.length(); i++) {
    JSONObject forecast = forecastList.getJSONObject(i);
    double temperatureCelsius = \ 
        forecast.getJSONObject("main").getDouble("temp");
    double temperatureFahrenheit = (temperatureCelsius * 9/5) + 32;
    long timestamp = forecast.getLong("dt") * 1000; // Convert timestamp to milliseconds
    Date date = new Date(timestamp);
    SimpleDateFormat sdf = \ 
        new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    sdf.setTimeZone(java.util.TimeZone.getTimeZone("UTC"));
    series.add(new org.jfree.data.time.Second(date), 
        temperatureFahrenheit);
}

在以下屏幕截图中观察,Amazon Q 开发者建议了多个代码更改以改进代码,使其更容易理解。这包括创建新方法和将代码标准化以使用面向对象的方法,如类封装而不是普通变量。

图 4.21 – Java 代码改进的 Amazon Q 开发者

图 4.21 – Java 代码改进的 Amazon Q 开发者

应用程序可以使用这些推荐来使用亚马逊 Q 开发者获取确切的代码。此外,亚马逊 Q 开发者还提供了代码片段。你可以通过使用插入光标处复制来更新脚本。

我用一个代码片段的简单用例进行了说明,但通过遵循前面的步骤,你可以从亚马逊 Q 开发者那里获取任何用例的推荐更新代码。此外,你可以调整提示来指导亚马逊 Q 开发者生成具有错误和异常处理的代码。

用例摘要

如所示,我们使用了各种提示类型——思维链、单行和多行——来开发一个天气数据应用的 JavaScript 脚本。我们使用了配置为与亚马逊 Q 开发者无缝集成的 VS Code IDE。使用亚马逊 Q 开发者,我们应用了特定的提示来自动生成从 OpenWeatherMap 检索天气数据、将温度从摄氏度转换为华氏度、将日期转换为 UTC 格式以及绘制图表的功能。此外,我们利用亚马逊 Q 开发者的聊天功能生成全面的文档,并获得改进我们天气数据应用代码的建议。这种方法突出了使用不同提示样式来定制 JavaScript 生态系统中特定要求的代码生成的灵活性。通过利用 VS Code 等高级 IDE 以及亚马逊 Q 开发者等智能代码助手,开发者可以简化开发过程并提高生产力。通过聊天交互接收详细文档和可操作见解的能力进一步展示了如何将这些工具集成以促进高效和有效的软件开发实践。

通过调整提示或简单地以聊天式界面指导亚马逊 Q 开发者,读者可以进一步指导亚马逊 Q 开发者生成具有增强错误和异常处理的代码,使解决方案对不同用例既稳健又灵活。本例展示了结合高级 IDE 和智能代码助手高效构建复杂应用的能力。

摘要

在本章中,我们介绍了 AI 驱动的代码助手如何帮助 Python 和 Java 开发者从他们选择的本地 IDE 生成应用代码。为了说明功能,我们讨论了简单而通用的天气数据分析应用。

下面是整个应用开发过程中涵盖的关键特性。

我们讲解了生成 OpenWeatherMap API 密钥的先决条件,使我们能够获取用户输入的国家和城市组合的天气数据。我们使用 API 密钥检索 OpenWeatherMap 提供的天气数据,OpenWeatherMap 提供了一套丰富的 API。我们从api.openweathermap.org/data/2.5/forecast收集了天气预报数据。

对于编码,我们使用了适用于 Java 的 VS Code IDE,该 IDE 已配置为与 Amazon Q Developer 一起使用。对于 Python,我们使用了 JetBrains 的 PyCharm IDE,该 IDE 也已配置为与 Amazon Q Developer 一起使用。

为了获取代码建议,我们结合了思维链、单行和多行提示,为天气数据应用程序创建了一个 JavaScript 脚本。我们使用 Amazon Q Developer 和特定的提示来自动生成从 OpenWeatherMap 获取天气数据、将温度从摄氏度转换为华氏度、将日期转换为 UTC 格式,并绘制图表的功能。此外,为了文档和代码改进,我们使用了与代码助手进行对话的技术来与 Amazon Q Developer 交互。这使我们能够生成详细的文档并收到针对我们的天气数据应用程序的代码改进建议。

通过利用 VS Code 和 PyCharm 等高级 IDE 以及 Amazon Q Developer,我们展示了如何通过多种提示风格简化跨多种编程语言的开发过程。这种方法不仅提高了生产力,还确保了生成的代码健壮且文档齐全,使得开发者更容易理解和维护。

在下一章中,我们将探讨 Amazon Q Developer 如何为 JavaScript、C#、Go、PHP、Shell 等多种其他编程语言生成代码。

参考文献

第五章:使用自动代码生成提高 C 和 C++ 的编码效率

在本章中,我们将探讨以下关键主题:

  • 编程语言类别和基础语言的概述

  • 使用 Amazon Q Developer 进行 C 的自动代码生成

  • 使用 Amazon Q Developer 进行 C++ 的自动代码生成

  • 使用 Amazon Q Developer 进行 C 和 C++ 代码可解释性和优化

在上一章中,我们探讨了如何使用 Amazon Q Developer 在 VS Code 和 PyCharm IDE 中建议代码。我们使用了开发者使用的两种最突出的编程语言,Python 和 Java,来演示如何使用提示技术以及利用与代码助手聊天技术生成自动代码。

在本章中,我们将首先探讨一些编程语言的类别。然后,我们将讨论基础编程语言的概述,然后重点关注软件行业中使用的两种主导语言:C 和 C++。我们将介绍如何将自动代码生成,特别是在 Amazon Q Developer 中,集成并供 C 和 C++ 开发者使用,以理解、学习语法以及自动生成代码。作为额外的好处,通过在不同编程语言之间标准化代码,这些工具可以增强代码的可读性、可维护性和在大规模项目中的互操作性。

编程语言类别和基础语言的概述

软件开发的格局在过去几十年中经历了巨大的变革。随着对强大、高效和可扩展应用程序的需求增长,编码过程的复杂性也随之增加。因此,出现了各种编码语言类别以满足这些多样化的需求。

基础语言,如 C 和 C++,为许多系统提供了基本构造。包括 HTML、CSS 和 JavaScript 在内的网络开发语言,为动态和交互式网络体验提供动力。数据库管理语言,如 SQL,对于处理大型数据集至关重要。系统管理和自动化语言,如 Python 和 Bash,简化了重复性任务并提高了运营效率。“基础设施即代码”(IaC)语言,如 Terraform 和 AWS CloudFormation,允许开发者通过代码管理和配置计算基础设施。

每个类别都针对特定的挑战,反映了现代技术生态系统的多面性。了解这些类别有助于开发者选择适合他们项目的正确工具,从而实现更有效的解决方案。

基础语言 C 和 C++,以及自动代码生成支持

C 和 C++ 是构成软件开发基础的编程语言,它们塑造了软件开发的格局。以其性能和对系统资源的控制而闻名,这些语言在系统编程、游戏开发和实时处理应用等各个领域都至关重要。然而,使 C 和 C++ 强大的正是它们的复杂性。手动内存管理、低级操作和复杂的语法使得在这些语言中编码容易出错且耗时。

为了减轻这些挑战并提高生产力,自动代码生成已成为一种变革性的解决方案。自动代码生成涉及使用高级工具根据预定义的模板或规范自动生成源代码。这种自动化可以显著减少编码中的手动工作量,减少错误,并标准化代码质量。在这个领域领先的工具之一是 Amazon Q Developer,它为 C 和 C++ 代码生成带来了强大的功能。如前几章所述,Amazon Q Developer 是一种创新工具,它利用人工智能和机器学习来帮助开发者编写代码。通过将 Amazon Q Developer 集成到开发工作流程中,程序员可以从中受益于其针对 C 和 C++ 定制的复杂代码生成功能。

使用 Amazon Q Developer 为 C 和 C++ 代码生成的主要优势之一是显著减少开发时间。编写样板代码,例如内存管理例程、数据结构和错误处理,可能会很繁琐且重复。Amazon Q Developer 可以提供建议来自动化这些任务,使开发者能够专注于学习和实施项目更复杂和更具创造性的方面。这不仅加速了开发过程,而且通过确保重复性任务得到一致且正确的处理,提高了整体代码质量。

此外,Amazon Q 有助于缩小对 C 和 C++ 新手开发者的知识差距。鉴于这些语言的复杂性和对细节的严格关注,学习曲线可能很陡峭。通过提供自动生成的代码示例和模板,Amazon Q 作为一种教育工具,帮助开发者更快地理解和采用正确的语法和编码约定。这一特性在教育环境和为新团队成员入职时尤其有益,因为它提供了理论概念在实际应用中的具体示例。

此外,Amazon Q Developer 配备了先进的调试和优化功能。它可以识别代码中的潜在问题并提出优化建议,确保生成的代码不仅正确,而且高效。这一特性在性能关键型应用中至关重要,在这些应用中,即使是微小的低效也可能产生重大影响。

现在,让我们深入探讨 Amazon Q Developer 如何帮助程序员。为了说明这一点,我将使用带有 VS Code 的 Amazon Q Developer 界面(有关 Amazon Q Developer 与 VS Code 的配置步骤,请参阅第二章,以及本章末尾的参考文献部分关于 VS Code 的 C/C++)。

注意

Amazon Q Developer 使用 LLMs,它们本质上是非确定性的,因此您可能不会得到与代码快照中显示的完全相同的答案或代码块。尝试更新您的提示以获得所需的推荐。然而,从逻辑上讲,生成的答案或代码应满足要求。

使用 Amazon Q Developer 进行 C 语言自动代码生成

首先,假设一位新程序员计划使用 C 语言,并且没有这方面的语言背景。让我们使用 Amazon Q Developer 的聊天式界面来教育这位程序员。

C 语言基础

让我们了解 C 编程语言:

Q: What is programming language C and what are use cases best suitable for C ?

图 5.1 – 以聊天方式了解 C 语言

图 5.1 – 以聊天方式了解 C 语言

如前截图所示,Amazon Q Developer 提供了 C 语言原始开发者的历史信息。然后,它通过分类总结 C 语言的常见用例,说明 C 语言在哪些方面表现卓越。此外,它还提供了进一步参考和学习的资源。

现在让我们来询问 C 程序员常用的命令:

Q: What are the common commands in programming language C ?

图 5.2 – 了解常见的 C 程序员命令

图 5.2 – 了解常见的 C 程序员命令

我们不会详细讲解每个命令,但为了说明,如图中所示的部分截图,Amazon Q Developer 提供了 C 编程语言中常见命令和结构的几个示例。为了便于理解,它将它们分类为条件结构、循环结构、函数等组。此外,您还可以看到它提供了参考文献,供用户获取有关主题的更详细信息。

现在,让我们向 Amazon Q Developer 询问 for 循环的语法和示例:

Q: Provide syntax and example of "for loop" in C

图 5.3 – 了解 for 循环

图 5.3 – 了解 for 循环

观察前后的截图,可以看到 Amazon Q Developer 提供了 for 循环的语法、细节和示例。

图 5.4 – for 循环示例

图 5.4 – for 循环示例

C 语言端到端用例开发

现在,让我们转向示例用例,以展示 Amazon Q Developer 推荐代码的能力。为了说明这一点,我将使用 VS Code 脚本编辑器窗口的单行和多行提示。

假设我们想要编写一个 C 程序,从文件中读取一系列整数,对它们进行排序,并将排序后的列表写入另一个文件。这是一个非常常见的用例,可以看到 C 语言的多个功能。

让我们使用多行提示技术来实现前面的用例。

Prompt:
/* Write the end-to-end C language program to read a list of integers from a file "input.txt" then sorts that list and then writes the sorted list to output file "output.txt"
*/

图 5.5 – C 程序示例快照

图 5.5 – C 程序示例快照

前一个截图显示了 Amazon Q Developer 提出的部分代码。Amazon Q Developer 生成的端到端 C 代码展示了 C 编程中的几个基本和高级概念,包括函数、数组、指针和文件 I/O 操作。它还添加了与 "Error opening file" 相关的错误处理。

现在我们使用交互式内联提示和思维链技术来增强代码。正如你在 readIntegersFromFile() 函数中看到的,Amazon Q Developer 已经添加了 "Error opening file"。现在,让我们指导它检查零字节文件。只需进入函数并使用以下单行提示技术:

Prompt :
/* check if file is zero byte*/

图 5.6 – C 程序内联函数增强

图 5.6 – C 程序内联函数增强

如截图所示,基于我们的提示,Amazon Q Developer 添加了一个 if 条件来检查输入文件是否为零字节。如果文件为空,代码将优雅地退出,并显示 "File is empty" 消息和一个非零退出代码。

在下一节中,让我们探索 Amazon Q Developer 与 C++ 的功能。

使用 Amazon Q Developer 进行 C++ 自动代码生成

与前一个章节类似,让我们首先假设一位新程序员计划使用 C++,并且没有这个语言的基础。我们将使用来自 C 语言章节的类似聊天式界面提示,在 Amazon Q Developer 的帮助下学习 C++ 语言的基础。

C++ 语言基础

让我们了解 C++ 编程语言:

Q: What is programming language C++ and what are use cases best suitable for C++ ?

图 5.7 – 了解 C++ 编程

图 5.7 – 了解 C++ 编程

如前一个截图所示,Amazon Q Developer 提供了关于原始开发者的历史信息。然后,它通过分类总结出 C++ 语言擅长的常见用例。此外,它还提供了参考资料,供用户进一步参考和学习。

现在,让我们询问 C++ 程序员常用的命令:

Q: What are the common commands in programming language C++?

图 5.8 – 了解常见程序员 C++ 命令

图 5.8 – 了解常见程序员 C++ 命令

我们不会逐个命令讲解,只是为了说明,正如你在以下部分截图中所见,Amazon Q Developer 提供了 C++ 编程语言中常见命令和结构的几个类别。为了便于理解,它还包含了每个示例命令的一些常见快捷键。此外,你还可以看到它提供了参考资料,供用户获取有关主题的更详细信息。

根据提供的信息,你可以观察到 C++ 在面向对象编程(OOP)领域表现出色,因此让我们请 Amazon Q 开发者提供有关 C++ 对 OOP 支持的详细信息和示例:

Q: What is Object-Oriented Programming and how C++ supports it ?

图 5.9 – 学习 C++ 面向对象编程

图 5.9 – 学习 C++ 面向对象编程

如前一个屏幕截图所示,Amazon Q 提供了面向对象编程(OOP)基础和关键概念,如类、对象、继承、封装和抽象的概述。它还包括相应的 C++ 构造,如 classpublicprivateprotected

现在,让我们请 Amazon Q 开发者提供 do... while 循环的语法和示例:

Q: Provide syntax and example of "do... while loop" in C++

图 5.10 – 学习 do…while 循环

图 5.10 – 学习 do…while 循环

观察前一个和后一个屏幕截图,Amazon Q 开发者提供了 do... while 循环的语法、细节和示例。

端到端 C++ 语言用例开发

现在,让我们转到示例用例,以展示 Amazon Q 开发者推荐代码的能力。为了说明,我将使用 VS Code 脚本编辑器窗口的单行和多行提示。

假设我们想要编写一个 C++ 程序来开发一个新的操作系统内核,该内核可以控制系统资源,并具有处理复杂内存管理任务的能力。内核必须与硬件交互,管理进程,并确保在不同硬件架构上的稳定性。

让我们使用多行提示技术来实现前面的用例。

Prompt:
/* Write an end to end executable C++ script
to develop a new operating system kernel, that can control over system resources and ability to handle complex memory management tasks. The kernel must interact with hardware, manage processes, and ensure stability across different hardware architectures.
*/

图 5.11 – 使用 Amazon Q 开发者编写 C++ 程序

图 5.11 – 使用 Amazon Q 开发者编写 C++ 程序

前一个屏幕截图显示了 Amazon Q 开发者建议的部分代码。你可以观察到,端到端代码展示了 C++ 编程中的几个基本和高级概念,包括 OOP、类、向量、函数、错误处理等。

现在,让我们使用交互式内联提示和思维链技术来增强代码。正如你所见,loadProcess() 函数没有异常处理,因此让我们用单行提示技术指导它添加对空进程的异常处理:

Prompt :
/* add exception handling for loadProcess */

图 5.12 – 提示 – C++ 程序示例快照

图 5.12 – 提示 – C++ 程序示例快照

如截图所示,根据我们的提示,Amazon Q 开发者添加了一个 nullptr 条件来检查进程加载异常。如果遇到空指针,则代码会优雅地退出,并显示 Error: process is null 消息。

使用 Amazon Q 开发者进行 C 和 C++ 代码可解释性和优化

Amazon Q 提供了实现代码可解释性和优化的选项,适用于 C 和 C++。有关可解释性和优化的更多详细信息,请参阅 第十二章

为了展示代码的可解释性和优化,我将使用为 C 语言生成的端到端代码。如图所示,只需突出显示整个代码,右键单击以打开弹出菜单,然后选择亚马逊 Q并选择解释以实现代码可解释性或选择优化以获取优化建议。

图 5.13 –C 和 C++程序的可解释性和优化

图 5.13 –C 和 C++程序的可解释性和优化

这将打开亚马逊 Q 开发者的聊天风格界面,并将整个代码移动到分析位置。对于可解释性,亚马逊 Q 开发者提供了关于每个函数和整体代码逻辑的详细信息。至于优化,亚马逊 Q 开发者提供了端到端优化的代码,您可以通过点击插入到****光标按钮直接将其插入到您的编辑器中。

除了 C 和 C++之外,亚马逊 Q 开发者还支持多种其他编程语言,如 C#、Go、Rust 等。这个领域正在进行许多改进,我们预计将会有更多语言的支持增强(请参阅本章末尾的参考文献部分)。

摘要

在本章中,我们了解到亚马逊 Q 开发者处于 C 和 C++等基础语言自动代码生成的最前沿,为开发者提供了一种简化的软件开发方法。通过直观的聊天风格界面,程序员与亚马逊 Q 开发者互动,全面探索这些语言。此外,我们还了解到该平台利用先进的提示技术来帮助生成代码片段或完整解决方案,自动化重复性任务,并确保代码结构的统一性。凭借对 C 和 C++编程的强大支持,亚马逊 Q 开发者有效地处理了包括函数、循环、数据结构和内存管理在内的各种任务。它遵循行业最佳实践,包括错误处理、缩进、命名约定和标准库的使用。我们了解到这种细致的方法提高了整体代码质量,并简化了维护工作。

亚马逊 Q 开发者的一个显著特点是它的解释功能,它使开发者能够深入了解现有代码的功能,正如我们在本章所学。这个工具不仅有助于理解,还促进了学习和技能的提升。通过自动化常规编码任务和提供优化建议,亚马逊 Q 开发者加速了开发周期,同时促进了代码的一致性和质量,正如我们在本章所探讨的。此外,该平台还作为一个教育资源,提供教程和实际示例,以支持开发者磨练技能并跟上行业标准。

总体而言,正如本章所述,Amazon Q 开发者使开发者能够更多地关注创新,而不是日常编码任务。它提高了跨项目的生产力,使其成为现代软件开发环境中效率与敏捷性的宝贵工具;这是本章的主要学习点。

在下一章中,我们将探讨如何使用 Amazon Q 开发者建议在网页开发语言如 JavaScript 和 PHP 中的代码。

参考文献

第六章:使用自动代码生成提高 JavaScript 和 PHP 的编码效率

在本章中,我们将探讨以下关键主题:

  • 网络开发编程语言概述

  • 使用 Amazon Q Developer 进行 JavaScript 自动代码生成

  • 使用 Amazon Q Developer 自动生成 PHP 代码

  • 使用 Amazon Q Developer 解释和优化 JavaScript 和 PHP 代码的可解释性

在上一章中,我们探讨了编程语言的某些类别。然后,我们讨论了基础编程语言的概述,在关注软件行业中使用的两种主导语言:C 和 C++ 之前。我们介绍了如何使用 Amazon Q Developer 集成自动代码生成,并可以帮助 C 和 C++ 开发者理解、学习语法和自动生成代码。

与上一章类似,在本章中,我们将关注两种编程语言。我们将从网络编程语言的概述开始,然后重点关注在软件行业中常用的两种语言:JavaScriptJS)和 PHP。我们将介绍如何使用自动代码生成,特别是通过 Amazon Q Developer,来帮助 JavaScript 和 PHP 开发者理解基础知识、学习语法、自动生成代码、代码可解释性和通过代码建议进行优化。

网络开发编程语言概述

在前面的章节中,我们回顾了不同的编程语言类别,并深入探讨了如 C 和 C++ 这样的基础语言,这些语言为许多系统结构提供动力。现在,让我们深入了解网络开发语言,如 JS 和 PHP,这些语言使动态和交互式网络体验成为可能。这些是服务器端脚本、客户端脚本、文档对象模型DOM)编程、Web API、移动应用程序等最受欢迎的语言。

几十年前,随着网络应用程序开发的增长,软件行业中引入了许多语言。网络开发语言在塑造现代网络应用程序的交互和功能方面发挥着关键作用。在这些语言中,JavaScript(JS)和 PHP 因其在客户端和服务器端脚本中的各自角色而突出。JavaScript 为网络浏览器中的动态和交互式用户体验提供动力,而 PHP 则便于服务器端逻辑,以实现动态内容生成和数据库交互。在 Web 开发领域,效率和生产力是成功的关键因素。开发者经常面临诸如重复编码任务、在不同模块间保持代码一致性以及跟上不断发展的最佳实践等挑战。自动代码生成已成为解决这些挑战的解决方案,使开发者能够自动化常规编码任务并简化他们的工作流程。

亚马逊 Q 开发者是一个利用人工智能和机器学习的高级工具,为 JavaScript 和 PHP 的自动代码生成提供了显著的能力。通过将亚马逊 Q 开发者集成到开发过程中,开发者可以利用其功能来提高生产力、提升代码质量并加快开发周期。

作为前端脚本语言,JS 在创建交互式用户界面和动态网页内容方面起着至关重要的作用。然而,由于需要跨浏览器兼容性、异步编程模式和事件驱动交互的管理,JS 开发可能会变得复杂。亚马逊 Q 开发者通过生成针对特定要求定制的代码片段和函数来简化 JS 开发。网页开发者可以利用不同的提示技术以及聊天式集成(请参阅第三章)来获取自动创建事件处理程序、DOM 操作函数和异步操作的建议,从而减少开发时间并确保在不同浏览器环境中的代码一致性。

在服务器端,PHP 仍然是动态网页应用和后端服务的流行选择。PHP 在处理表单提交、会话管理和数据库交互方面的多功能性使它对网页开发者来说是不可或缺的。然而,编写高效且安全的 PHP 代码需要遵守编码标准和最佳实践。亚马逊 Q 开发者通过为常见任务如数据库查询、表单处理和错误处理生成优化的 PHP 代码片段来协助开发者。这不仅加速了开发,还增强了代码的可靠性和安全性。

此外,亚马逊 Q 开发者支持 JS 和 PHP 语法的学习和理解。对于这些语言的新手开发者,亚马逊 Q 开发者通过聊天式交互提供交互式教程和代码示例。开发者可以使用提示来请求对语言特性的解释、获取特定功能的代码片段或根据预定义模板生成完整的脚本。亚马逊 Q 开发者这一教育特性有助于缩短学习曲线,并使开发者能够快速掌握基本概念和技术。

现在,让我们深入探讨一下亚马逊 Q 开发者如何帮助一位网页程序员。为了说明这一点,我正在使用 VS Code 中的亚马逊 Q 开发者界面(有关亚马逊 Q 开发者与 VS Code 的配置步骤,请参阅第二章,并在本章末尾的参考部分查看 JS 和 PHP 的 URL),并检查 JS 和 PHP 在 VS Code 中的配置步骤;检查本章末尾的参考部分以获取 JS 和 PHP 的 URL。

注意

亚马逊 Q 开发者使用 LLMs,按其本质是非确定性的,因此您可能不会得到代码快照中显示的完全相同的答案/代码块;尝试更新提示以获取所需的建议。然而,从逻辑上讲,生成的答案/代码应满足要求。

使用 Amazon Q 开发者进行 JS 自动代码生成

首先,让我们探索 Amazon Q 开发者如何帮助一个计划使用 JS 但缺乏语言背景的新网页程序员。我们将使用 Amazon Q 开发者的聊天风格界面来教育程序员。

JS 语言基础

让我们通过询问 JS 的基础知识来了解 JS 编程语言:

Q: What is programming language JavaScript(JS) and what are use cases best suitable for JS ?

如你在以下屏幕截图中所见,Amazon Q 开发者提供了关于原始开发者的历史信息。然后,它通过分类总结 JS 语言的常见用例,其中 JS 语言表现出色。此外,它还提供了进一步参考和学习的资源。

图 6.1 – 聊天风格 – JS 基础

图 6.1 – 聊天风格 – JS 基础

你可以观察到,除了网页开发之外,Amazon Q 开发者指出了 JS 应用程序的通用性,例如游戏开发、桌面应用程序、物联网IoT)应用程序和机器学习应用程序。Amazon Q 还提供了关于在“需要高度交互性、响应性和动态行为”的应用程序中使用 JS 的指南.

根据前面的信息,你可以看到 JS 是如此通用,可以在各个行业的各种软件开发项目中使用。让我们看看 JS 网页程序员常用的命令:

Q: What are the common commands in programming language JS?

我们不会逐个介绍每个命令,但为了说明,如你在以下部分屏幕截图中所见,Amazon Q 开发者提供了 JS 编程语言中常见命令和结构的几个类别。为了便于理解,它还包含了每个类别的常见关键命令。

图 6.2 – 聊天风格 – JS 命令

图 6.2 – 聊天风格 – JS 命令

Amazon Q 开发者突出了 JS 在多个领域支持的命令集,例如控制台命令、DOM 操作命令、数组操作等等。

让我们使用其中一个领域来获取信息,并请 Amazon Q 开发者提供与 JS 对 DOM 操作支持相关的详细信息和示例:

Q: What is DOM Manipulation and how JS supports it ?

图 6.3 – 聊天风格 – JS DOM 操作

图 6.3 – 聊天风格 – JS DOM 操作

如前一张部分截图所示,亚马逊 Q 开发者从 DOM 操作的基础开始,这指的是使用 JS 动态访问和修改网页的内容、结构和样式的能力。DOM 代表了 HTML 文档的层次结构,其中每个元素、属性和文本节点都是一个可以访问和操作的对象。然后,它继续提供与访问 DOM 元素、创建和修改元素、操作属性、处理事件、修改样式以及 DOM 操作库和框架相关的具体细节。最后,它提供了一个总结,强调了 JS 在 DOM 操作中的重要性:“DOM 操作是构建动态和交互式 Web 应用程序的关键方面。通过利用 JavaScript 访问和修改 DOM 的能力,开发者可以创建丰富的用户体验,动态更新内容,验证用户输入,并响应用户交互,而无需刷新整个页面”,并附上参考来源。

现在,让我们向亚马逊 Q 开发者询问在编写复杂脚本时最常用的循环之一的语法,即 JS 中的for...in循环:

Q: Provide syntax and example of "for…in loop" in JS

图 6.4 – 聊天风格 – JS “for...in”循环示例

图 6.4 – 聊天风格 – JS “for...in”循环示例

在上一张部分截图中,可以看到亚马逊 Q 开发者提供了for...in循环的语法、细节和示例。现在,让我们转到示例使用案例,以展示亚马逊 Q 开发者推荐代码的能力。

端到端 JS 使用案例开发

为了说明,我将使用 VS Code 脚本编辑器窗口的单行和多行提示。

这里是使用案例:创建 JS 端到端代码来构建待办事项列表应用程序。创建添加新项目、标记项目为完成和删除项目等任务。使用 JS 操作 DOM 并响应用户事件。以下是提示:

Prompt:
/* Create JS end to end code to building a to-do list application. Tasks to adding new items, mark items as completed, and delete items. Use JavaScript to manipulate the DOM and responding to user events. */

图 6.5 – 提示 – JS 程序部分快照

图 6.5 – 提示 – JS 程序部分快照

上一张截图显示了亚马逊 Q 开发者建议的部分代码片段。根据我们的提示生成的完整端到端代码展示了 JS 和 DOM 操作中的几个基本和高级概念。它有效地利用了与 DOM 相关的关键 JS 功能,例如获取元素、创建元素、修改元素、处理事件和应用样式。它利用了 JS 的多个关键内置函数,包括document.getElementByIddocument.createElementtaskItem.appendChildtaskList.removeChildButton.onclick等。它还包括一个自定义的addTask()函数来支持编码最佳实践。端到端代码满足了您提示的具体要求,展示了亚马逊 Q 开发者生成全面且功能强大的 Web 开发任务代码的能力。

在当前版本的代码中,亚马逊 Q 开发者添加了两个按钮:“删除”和“完成”。如果我们根据应用程序支持的基本操作链来考虑,似乎缺少一个“取消”按钮。让我们使用单行提示技术建议亚马逊 Q 开发者添加一个“取消”按钮:

Prompt:
/* add Cancel button */

图 6.6 – 提示 – JS 程序取消按钮

图 6.6 – 提示 – JS 程序取消按钮

正如您在前面的屏幕截图中所见,亚马逊 Q 开发者添加了多行代码来添加“取消”按钮。它有效地使用了诸如 document.createElementcancelButton.onclicktaskList.removeChild 等 JS 函数。

在下一节中,我们将看看亚马逊 Q 开发者如何支持 PHP 开发者。

使用亚马逊 Q 开发者进行 PHP 自动代码生成

就像之前一样,首先,让我们假设一位新的网络程序员计划使用 PHP(这是一个递归缩写,代表 PHP: Hypertext Preprocessor)并且没有太多使用 PHP 背景进行编码的经验。让我们使用亚马逊 Q 开发者的聊天风格界面来教育这位程序员。

PHP 语言基础

让我们了解 PHP 编程语言:

Q: What is programming language PHP and what are use cases best suitable for PHP ?

图 6.7 – 聊天风格 – PHP 基础

图 6.7 – 聊天风格 – PHP 基础

正如您在前面的屏幕截图中所见,亚马逊 Q 开发者提供了基本信息,例如告知我们 PHP 是一种流行的开源服务器端脚本语言,广泛用于网站开发。它主要用于创建动态网页和网页应用程序。PHP 的多功能性和大量库和框架的可用性已经扩展了其使用场景,超出了网页的范围。然而,它仍然主要用于构建动态网页应用程序、内容管理系统和网页服务。

此外,它概述了 PHP 在其中扮演重要角色的常见应用,例如网站开发、内容管理系统CMSs)、服务器端脚本、命令行脚本、桌面应用程序、数据处理和分析以及嵌入式系统。

由于 PHP 是一种流行的开源服务器端脚本语言,让我们请亚马逊 Q 开发者提供有关 PHP 对服务器端脚本支持的具体细节和示例,这有助于其广泛使用:

Q: What is server-side scripting and how PHP supports it?

图 6.8 – 聊天风格 – PHP 服务器端脚本支持

图 6.8 – 聊天风格 – PHP 服务器端脚本支持

亚马逊 Q 开发者从服务器端脚本的基础开始,解释说:“服务器端脚本是指在实际输出(通常是 HTML)发送到客户端的 Web 浏览器之前在服务器上执行代码的过程. 然后,它为 PHP 提供了背景信息,强调 PHP 是一种设计在服务器上运行并生成动态网页的服务器端脚本语言。此外,它列出了 PHP 支持的关键功能,例如在 HTML 中嵌入 PHP 代码、处理用户输入、文件系统操作、数据库集成、会话管理、网络服务和 API 以及服务器配置和环境。

现在,让我们请求一些 PHP 网络程序员常用的命令:

Q: What are the common commands in programming language PHP?

图 6.9 – 聊天式界面 – PHP 常见命令局部截图

图 6.9 – 聊天式界面 – PHP 常见命令局部截图

我们不会涵盖每个命令,但如图 6.10 所示的局部截图所示,亚马逊 Q 开发者提供了各种命令类别,例如输出命令、变量命令、条件语句、数据库命令、表单命令、错误处理、数组命令等。为了便于理解,它为每个类别包含了一些常见的关键命令,并为用户提供参考,以便获取这些主题的更详细信息。

数据库命令是使 PHP 在服务器端脚本中变得有用的几个重要类别之一。现在,让我们向亚马逊 Q 开发者请求 PHP 中mysqli_connect()的语法和示例:

Q: Provide syntax and example of mysqli_connect() in PHP

图 6.10 – 聊天式界面 – PHP mysqli_connect()

图 6.10 – 聊天式界面 – PHP mysqli_connect()

如前图所示,亚马逊 Q 开发者提供了一个mysqli_connect()的示例,并解释了代码每一行的细节,以便更容易理解。

PHP 语言端到端用例开发

现在,让我们继续到示例用例,以展示亚马逊 Q 开发者推荐代码的能力。为了说明,我将使用相同的聊天式界面生成代码,然后转到 VS Code 脚本编辑器窗口。

在服务器端编程中,PHP 的一个常见用例是处理用户身份验证和管理会话。这包括验证用户凭据、启动会话以及管理会话数据以在 Web 应用程序的不同页面之间保持用户状态。以下是提示:

Prompt:
/* Write PHP server-side end to end programming to handle user authentication and managing sessions. This involves verifying user credentials, starting sessions, and managing session data to maintain user state across different pages of a web application. */

图 6.11 – 提示 – PHP 程序局部快照

图 6.11 – 提示 – PHP 程序局部快照

上述截图显示了 Amazon Q Developer 提出的部分代码片段。您可以使用 authenticate ($username, $password) 函数并带有错误处理,以及使用 isset($_SESSION['loggedin']) && $_SESSION['loggedin'] 检查有效用户并使用会话处理。该代码符合您提示的具体要求,展示了 Amazon Q Developer 生成全面且功能性的代码以处理用户身份验证和管理会话的能力。

脚本已经输出了错误信息,但让我们通过一些定制来增加趣味。不是仅仅显示一个无聊的错误信息,而是每次发生错误时都从充满随机图像的文件夹中显示一个随机错误图像。让我们使用单行提示技术,添加一个自定义的转折点:

Prompt:
/* show random error image from folder '/user/error/images/'*/

图 6.12 – 提示 – PHP 程序自定义错误图像

图 6.12 – 提示 – PHP 程序自定义错误图像

如前述截图所示,Amazon Q Developer 添加了多行代码,随机从我们的 error/images 目录中选择一个图像,并将其作为显示的一部分。

现在,让我们探讨 Amazon Q Developer 如何支持 JS 和 PHP 的代码可解释性和优化。

使用 Amazon Q Developer 解释 JS 和 PHP 代码的可解释性和优化

Amazon Q Developer 为 JS 和 PHP 提供了一个简单的界面,以实现代码的可解释性和优化。有关可解释性和优化的更多详细信息,请参阅 第十二章

为了说明,我将在 PHP 服务器端端到端代码 创建任务中使用的先前自动生成的代码。如下所示截图,突出显示代码,右键单击以打开弹出菜单,选择 Amazon Q,然后选择 解释 以实现代码可解释性或选择 优化 以获取优化建议。

图 6.13 – 提示 – JS 和 PHP 程序的可解释性和优化

图 6.13 – 提示 – JS 和 PHP 程序的可解释性和优化

这将打开 Amazon Q Developer 的聊天式界面以分析完整代码。

对于可解释性,Amazon Q Developer 提供了关于每个函数和整体代码逻辑的详细信息。

在优化方面,Amazon Q Developer 提供了端到端优化的代码,您可以直接使用 authenticate() 函数将其插入到您的编辑器中,结合 $isLoggedIn 中的条件以提高可读性,并建议输出编码以防止潜在的安全漏洞。这些优化增强了代码的安全性、可读性和性能,而不改变其核心功能。此外,它建议用更安全的方法替换当前的认证方法,例如使用安全的密码散列算法并将用户凭据存储在数据库中。

除了 JS 和 PHP,Amazon Q 开发者还支持多种其他编程语言。该领域正在进行许多改进,我们预计将会有更多语言支持方面的改进(请参阅章节末尾的参考文献部分)。

摘要

Amazon Q 开发者代表了在诸如 JS 和 PHP 这样的网络开发语言中自动代码生成的变革性工具。程序员通过与 Amazon Q 开发者的聊天式交互来与之互动,使其成为一个直观的学习和编码平台。通过使用各种提示技术,开发者可以从 Amazon Q 开发者那里获取代码片段或完整的脚本,从而简化他们的工作流程。

对于 JS 来说,这项功能对于创建交互式用户界面和动态网络内容至关重要。开发者可以提示 Amazon Q 开发者生成用于常见任务(如表单验证、事件处理和 DOM 操作)的 JS 代码。

类似地,Amazon Q 开发者对 PHP 的集成有助于网络开发者实现动态网络应用、服务器端脚本和后端服务。如图所示,它可以生成用于处理用户登录、会话、身份验证等任务的 PHP 代码。除了代码生成外,Amazon Q 开发者还提供生成代码的解释,帮助开发者理解脚本中每一部分的功能。这一教育特性对于希望提高编码技能的新手和经验丰富的开发者来说都非常有价值。

总体而言,Amazon Q 开发者通过自动化常规编码任务和提供优化见解,使网络开发者能够更高效地工作。这使开发者能够专注于项目创新方面,提高开发效率和代码质量。对 JS 和 PHP 的支持展示了 Amazon Q 开发者在现代网络开发中的多功能性和潜力。

在下一章中,我们将介绍 Amazon Q 开发者如何通过 SQL 为数据库管理员(DBAs)和开发工程师(DEs)提供益处。

参考文献

第七章:使用自动代码生成提高 SQL 的编码效率

在本章中,我们将探讨以下关键主题:

  • 数据库管理语言的概述

  • 使用 Amazon Q Developer 为数据库管理员DBAs)进行 SQL 自动代码生成

  • 使用 Amazon Q Developer 为数据工程师DEs)进行 SQL 自动代码生成

  • 使用 Amazon Q Developer 进行 SQL 代码的可解释性和优化

在我们上一章中,我们讨论了网络编程语言的概述,然后重点介绍了在软件行业中使用的两种主导语言——JavaScriptJS)和 PHP。我们展示了自动代码生成,特别是 Amazon Q Developer,是如何集成并可以被 JS 和 PHP 开发者用来理解基础知识、学习语法以及自动生成代码的。

在本章中,我们将专注于数据库管理语言。我们将深入研究软件行业中占主导地位的数据库管理语言之一——结构化查询语言SQL)。使用两个用户角色,数据库管理员(DBAs)和数据库工程师(DEs),我们将介绍如何通过 Amazon Q Developer 的自动代码生成来帮助您理解基础知识、学习语法以及为常见的数据库管理员活动自动生成代码。然后,我们将探讨代码可解释性,以支持 Amazon Q Developer 为 SQL 提供的文档和代码优化建议。

数据库管理语言概述

让我们深入了解另一个在各个行业中广泛使用的系统领域——数据库管理——并探索 SQL,这是处理大型数据集、表、视图、用户等的关键语言。

在数据库管理的动态环境中,SQL 作为与关系数据库交互的基本语言。SQL 使数据库管理员(DBAs)和数据库工程师(DEs)能够高效地在各种数据库管理系统DBMs)中检索、操作和管理数据。当在涉及关系数据库和/或列数据库的项目上工作时,如 MySQL、PostgreSQL、Oracle 数据库、SQL Server、Teradata 和 Amazon RedShift,SQL 至关重要。随着数据库变得越来越复杂,对业务运营至关重要,编写高效和可靠的 SQL 代码的能力变得至关重要。自动代码生成已成为简化 SQL 开发流程、自动化常规任务并提高数据库管理员和数据库工程师 alike 生产力的一种变革性方法。Amazon Q Developer 利用先进的人工智能和机器学习功能,为 SQL 代码生成提供强大的支持。本节探讨了 Amazon Q Developer 如何革新 SQL 开发,赋予数据库管理员和数据库工程师权力,并促进高效的数据库管理和数据操作。

对于数据库管理员(DBAs)来说,SQL 在数据库管理和应用开发中扮演着至关重要的角色,它使得定义数据库结构、管理访问控制、监控日志表和确保数据完整性等任务成为可能。对于数据工程师(DEs)而言,SQL 是执行诸如在表中加载数据、通过连接多个表查询数据、使用存储过程操作数据以及卸载数据等任务的关键。然而,编写 SQL 查询和维护数据库模式可能会非常耗时且容易出错,尤其是在数据需求广泛且关系复杂的环境中。Amazon Q Developer 通过自动化生成 SQL 查询、数据库模式定义和数据操作脚本,简化了 SQL 开发过程。通过其直观的聊天式界面,DBAs 和数据工程师可以使用自然语言提示与 Amazon Q Developer 交互,请求特定的 SQL 查询或任务。

此外,Amazon Q Developer 还作为 SQL 学习者和新手数据工程师的教育资源。它通过聊天界面提供交互式教程、SQL 概念的说明以及 SQL 查询的实际示例。这一教育特性帮助 DBAs 和数据工程师更有效地掌握 SQL 基础知识,并将其应用于实际的数据库管理和数据操作场景中。

经验丰富的 DBAs 和数据工程师可以使用 Amazon Q Developer 的高级功能,例如查询优化和性能调整建议。它分析用户生成的 SQL 查询,识别潜在的性能瓶颈或低效之处,并提供建议以提升查询执行速度和资源利用率。这些优化能力对于在生产环境中保持最佳数据库性能和可扩展性至关重要。致力于数据库驱动应用程序的团队可以从标准化的 SQL 代码模板、共享的最佳实践和简化的代码审查流程中受益。

现在,让我们深入探讨 Amazon Q Developer 如何帮助 DBAs 和数据工程师。为了说明,我将使用 Amazon 关系数据库服务RDS)的 MySQL 版本,这是 Amazon Web Services(AWS)提供的一项服务,以及与 VS Code 集成的 Amazon Q Developer 界面(有关 Amazon Q Developer 与 VS Code 的配置步骤,请参阅第二章)。

注意

Amazon Q Developer 使用大型语言模型LLMs),这些模型本质上是非确定性的,因此您可能不会得到与代码快照中显示的完全相同的答案/代码块。尝试更新提示以获取您期望的建议。然而,从逻辑上讲,生成的答案/代码应满足要求。

使用 Amazon Q Developer 为 DBAs 自动生成 SQL 代码

首先,假设一位新的 DBA 计划使用 Amazon RDS for MySQL,并且对该服务没有任何背景知识。让我们使用 Amazon Q 开发者的聊天风格界面来教育 DBA,在那里他们可以简单地用自然语言提问,了解关于 Amazon RDS for MySQL 的 DBA 活动和最佳实践。

Amazon RDS for MySQL 的基本知识,适用于 DBA

让我们先了解 Amazon RDS for MySQL:

Q: What is Amazon RDS for MySQL ?

图 7.1 – 聊天风格 – MySQL DBA 的 Amazon RDS 基本操作

图 7.1 – 聊天风格 – MySQL DBA 的 Amazon RDS 基本

注意,Amazon Q 开发者提供了关于 Amazon RDS for MySQL 的关键信息,涉及重要主题,如托管服务可伸缩性高可用性只读副本自动备份

现在,让我们深入了解与 Amazon RDS for MySQL 相关的 DBA 特定信息:

Q: What are the common activities of Amazon RDS for MySQL DBA?

图 7.2 – 聊天风格 – Amazon RDS for MySQL 的基本 DBA 活动

图 7.2 – 聊天风格 – Amazon RDS for MySQL 的基本 MySQL DBA 活动

我们不会深入探讨 Amazon Q 开发者建议的每个 DBA 活动;只需注意,Amazon Q 开发者利用了 DBA 职责的关键领域,如创建和管理数据库、监控和优化性能、备份和恢复、高可用性和复制、安全管理以及升级和打补丁,为 Amazon RDS 提供 MySQL 特定的信息。此外,它还提供了可用于进一步阅读的资源。

安全管理是数据库管理员(DBA)最重要的职责之一。管理型 AWS 服务,如 Amazon RDS,具有与本地数据库不同的机制,因此 DBA 了解这些差异至关重要。让我们请 Amazon Q 开发者提供更多信息,以帮助 DBA 了解 Amazon RDS for MySQL 的具体细节和最佳实践。

为了说明最佳实践建议,我们将询问 Amazon Q 开发者关于关键安全资源配置,例如 Amazon RDS for MySQL 数据库的安全组。

Q: What are the best practices for configuring security groups for Amazon RDS for MySQL databases?

图 7.3 – 聊天风格 – Amazon RDS for MySQL 安全组最佳实践

图 7.3 – 聊天风格 – Amazon RDS for MySQL 安全组最佳实践

如前一个屏幕截图所示,Amazon Q 开发者提供了 DBA 可以遵循的 10 个最佳实践,以配置 Amazon RDS for MySQL 的安全组。

为 DBA 生成 SQL

现在,让我们询问 Amazon Q 开发者关于 Amazon RDS for MySQL DBA 使用的常见 SQL 命令:

Q: Which are the common SQL commands used by Amazon RDS for MySQL DBA?

图 7.4 – 聊天风格 – Amazon RDS for MySQL 的常见 SQL 命令

图 7.4 – 聊天风格 – Amazon RDS for MySQL 的常见 SQL 命令

如前截图所示,Amazon Q Developer 的聊天式界面提供了多个常用 SQL 命令及其语法,以便于理解。新 Amazon RDS for MySQL DBA 将意识到,虽然一些传统的 DBA 活动由 Amazon RDS 管理,但创建数据库和模式、简单的表以及具有特定访问权限的数据库用户等活动仍需要 DBA 的关注。

因此,基于之前为 DBA 提供的信息,让我们开始编写 SQL 命令,在 Amazon Q Developer 的帮助下执行常见的 DBA 任务。为了说明,我将使用 VS Code 脚本编辑器窗口的单行和多行提示。

让我们让 Amazon Q Developer 提供一个创建数据库和模式的 SQL 命令:

Prompt :
/* Write a SQL command for Amazon RDS for MySQL to
create database "my_test_db", schema "my_test_db.my_test_schema"
*/

图 7.5 – 为 Amazon RDS for MySQL 创建数据库和模式的提示

图 7.5 – 为 Amazon RDS for MySQL 创建数据库和模式的提示

注意,Amazon Q Developer 提供了创建数据库和模式所需的完整、无错误的 SQL 代码,按照提示中提供的 MySQL 具体名称。

现在,让我们让 Amazon Q Developer 创建一个简单的表:

Prompt :
/* Write a SQL command for Amazon RDS for MySQL
to create table "my_test_table" in schema "my_test_schema" with columns sr_nbr as integer, name as varchar 50 where sr_nbr is a primary key */

图 7.6 – 为 Amazon RDS for MySQL 创建表的提示

图 7.6 – 为 Amazon RDS for MySQL 创建表的提示

注意,正如提示的那样,Amazon Q Developer 提供了带有主键约束的表 DDL。

现在,让我们让 Amazon Q Developer 创建一个数据库用户,并在前表中授予用户特定的访问权限:

Prompt 1:
/* Write a SQL command for Amazon RDS for MySQL
to create user "my_test_user" */
Prompt 2:
/* Write a SQL command for Amazon RDS for MySQL
to grant select, insert, and update access to user "my_test_user" on
table "my_test_db.my_test_schema.my_test_table"
*/

我们得到的 SQL 代码如图图 7.7所示。

图 7.7 – 为 Amazon RDS for MySQL 创建用户和授予用户访问权限的提示

图 7.7 – 为 Amazon RDS for MySQL 创建用户和授予用户访问权限的提示

现在,让我们编写 SQL 语句来移除之前授予的update权限:

Prompt :
/* Write a SQL command for Amazon RDS for MySQL
to revoke update access to user "my_test_user" on
table "my_test_db.my_test_schema.my_test_table"
*/

图 7.8 – 为 Amazon RDS for MySQL 撤销访问权限的提示

图 7.8 – 为 Amazon RDS for MySQL 撤销访问权限的提示

现在,让我们执行清理任务,删除用户、表、模式和数据库:

Prompt :
/* Write a SQL command for Amazon RDS for MySQL to
drop user "my_test_user"
drop table "my_test_db.my_test_schema.my_test_table"
drop schema "my_test_db.my_test_schema"
drop database "my_test_db"
*/

我们得到的 SQL 代码如图图 7.9所示。

图 7.9 – 为 Amazon RDS for MySQL 撤销对象的提示

图 7.9 – 为 Amazon RDS for MySQL 撤销对象的提示

如此所示,通过使用 Amazon RDS for MySQL,DBA 可以简单地使用聊天式和/或提示式界面与 Amazon Q Developer 交互,接收无错误的 SQL 代码以执行日常活动。为了进一步探索,请随意使用额外的提示从 Amazon Q Developer 获取与 DBA 活动相关的 SQL 代码。

在下一节中,我们将看看 Amazon Q Developer 如何帮助一个主要负责编写 SQL 代码以理解数据、连接多个表、操作数据以及将数据加载到表中的 DE。

使用 Amazon Q Developer 为 DEs 自动生成 SQL 代码

首先,让我们假设一个新 DE 正在计划使用 Amazon RDS for MySQL,并且对 SQL 命令提供没有背景知识。在接下来的几节中,我们将探讨 Amazon Q Developer 如何支持 DE 的常见 数据操作语言 (DML) 支持、语法和基本 SQL 查询。让我们从基本的 DML 支持开始。

Amazon RDS for MySQL 基础知识对 DE

让我们使用 Amazon Q Developer 的聊天风格界面来教育 DE,他们可以简单地用自然语言提出问题,了解 Amazon RDS for MySQL 可用的命令和函数。由于数据操作是 DE 的关键活动,属于 DML,让我们请 Amazon Q Developer 提供有关 Amazon RDS 对 DML 操作支持的信息:

Q: What are supported SQL DML commands in Amazon RDS for MySQL?

如以下截图所示,Amazon Q Developer 提供了常用的可用 SQL 命令,如 SELECTINSERTUPDATEDELETE

图 7.10 – 聊天风格 – Amazon RDS for MySQL 对 DE 的 DML

图 7.10 – 聊天风格 – Amazon RDS for MySQL 对 DE 的 DML

为 DE 生成 SQL

让我们深入了解并询问 SQL 命令,通过一些常见的 SQL 操作来了解 Amazon Q Developer 如何帮助 DE 学习更多,以及使用不同的提示技术自动生成 SQL 代码。

在我们开始编写 SQL 代码之前,让我们再问一个关于 SQL 语法的问题:

Q: What is syntax of SELECT SQL commands in Amazon RDS for MySQL ?

图 7.11 – 聊天风格 – Amazon RDS for MySQL 对 DE 的 SELECT 命令提示

图 7.11 – 聊天风格 – Amazon RDS for MySQL 对 DE 的 SELECT 命令提示

注意 Amazon Q Developer 在末尾提供了详细的子句和示例,以帮助用户理解 select 命令的使用。

现在,让我们在 Amazon Q Developer 的帮助下开始编写 SQL 命令,以执行常见的 DE 任务。为了说明,我将使用 VS Code 脚本编辑器窗口的单行和多行提示。

让我们从简单的 select 命令开始,假设表已经存在,并且用户有权从中选择:

Prompt :
/* Write a SQL command for Amazon RDS for MySQL to
select sample 10 records from
Table "table_emp" and Table "table_dept"
*/

图 7.12 – Amazon RDS for MySQL 对 DE 的 select SQL 命令提示

图 7.12 – Amazon RDS for MySQL 对 DE 的 select SQL 命令提示

现在,让我们通过使用 join 来将这两个表连接起来,以去规范化数据:

Prompt :
/* Write a SQL command for Amazon RDS for MySQL to join
Table "table_emp" - columns emp_id as integer, emp_name as varchar 50  with Table "table_dept" - columns emp_id as integer, dept_id as int, and dept_name as varchar 50
on emp_id to pull emp_id, emp_name, dept_name
and pull all records from table_emp
*/

图 7.13 – Amazon RDS for MySQL 对 DE 的 join SQL 命令提示

图 7.13 – Amazon RDS for MySQL 对 DE 的 join SQL 命令提示

注意我们提示中的 pull all records from table_emp 指令,Amazon Q Developer 正确将其转换为两个表之间的 LEFT OUTER JOIN

现在,让我们使用提示来创建一个“存储过程”,将前面的 join 输出加载到现有的表中:

Prompt :
/* Write a SQL command for Amazon RDS for MySQL to create Store Procedure  to
Join between Table "table_emp" and Table "table_dept"
on emp_id to pull uppercase(emp_id), emp_name, dept_name
and pull all records from table_emp
load data into table "derom_data"
*/

图 7.14 – Amazon RDS for MySQL 对 DE 的 join SQL 命令提示

图 7.14 – Amazon RDS for MySQL 对 DE 的 join SQL 命令提示

注意,Amazon Q 开发者根据我们的指示创建了无错误的代码来创建一个“过程”,并且它还添加了适当的函数来处理 emp_id 的大写指令。

在前面的例子中,我们只是触及了 Amazon Q 开发者对 SQL 代码开发的集成表面。请随意尝试不同的聊天式提示和交互式编码来进一步探索。

现在,让我们探索 Amazon Q 开发者如何支持 SQL 代码的可解释性和优化。

使用 Amazon Q 开发者进行 SQL 代码可解释性和优化

Amazon Q 开发者提供了一个简单的界面来实现代码的可解释性和优化。有关可解释性和优化主题的更多详细信息,请参阅 第十二章

为了说明,我将在存储过程创建任务期间使用之前自动生成的代码。如图下所示,突出显示存储过程中生成的代码部分,右键单击以打开弹出菜单,选择 Amazon Q,然后选择 解释 以实现代码可解释性或选择 优化 以获取优化建议。

图 7.15 –SQL 代码可解释性和优化

图 7.15 –SQL 代码可解释性和优化

这将弹出 Amazon Q 开发者的聊天式界面,并使用完整的代码进行分析。

对于可解释性,Amazon Q 开发者为几乎每一行代码提供详细信息,并在最后提供一个总结,例如以下内容:“当调用 join_emp_dept 存储过程时,它将执行 SELECT 语句,根据 emp_id 列在 table_emp 和 table_dept 表之间执行左外连接。包括大写员工 ID、员工姓名和部门名称的结果数据将被插入到 derom_data 表 **”****。

对于优化,尽管我们有一个相对简单的逻辑的小代码片段,但 Amazon Q 开发者仍然提供了改进代码和重写代码的建议,遵循 join 实现的最佳实践,添加到 insert 语句中的列列表,添加 coalesce 等。

如前所述,Amazon Q 开发者为数据库管理员(DBA)和开发者提供了有意义的输入,为关系数据库(如 Amazon RDS MySQL)自动生成 SQL 代码。此外,Amazon Q 开发者与列式数据库(如 Amazon Redshift)无缝集成。AWS 将完全托管的人工智能数据仓库服务 Amazon Redshift 与代码助手集成,允许用户使用自然语言处理NLP)生成完整的 SQL 查询。我们将在 第十四章([B21378_14.xhtml#_idTextAnchor210])的 与 Amazon Redshift 的代码辅助集成 部分探讨此主题。

除了 SQL 之外,Amazon Q Developer 还支持多种其他编程语言。该领域正在进行许多开发,我们预计其中一些将支持额外的语言(请参阅本章末尾的参考文献部分)。

摘要

Amazon Q Developer 代表了 DBA 和 DE 在 SQL 代码生成和数据库管理方面的突破性创新。通过各种提示技术和聊天式交互,专业人士可以从 Amazon Q Developer 获取 SQL 代码。这一功能有助于自动化常规的 SQL 任务,提高代码一致性,并提供高级优化功能。它使数据库专业人士能够专注于战略举措、创新和交付高质量的数据库驱动应用程序。

将 Amazon Q Developer 与 SQL 集成也促进了协作数据库开发。致力于数据库驱动应用程序的团队可从标准化的 SQL 代码模板、共享的最佳实践和简化的代码审查流程中受益。这种一致性提高了团队的生产力,降低了在数据库架构修改或数据迁移过程中出现错误的风险,并加快了数据库驱动应用程序的上市时间。

此外,Amazon Q Developer 提供了关于 SQL 代码优化的见解,确保高效的查询性能和资源利用。通过不断改进其建议,Amazon Q Developer 适应数据库专业人士不断变化的需求,为复杂的数据库挑战提供尖端解决方案。

因此,Amazon Q Developer 不仅自动化了常规的 SQL 任务,而且促进了数据库团队内的协作和创新,最终导致更高质量和更高效的数据库驱动应用程序。

在本章中,我们只是触及了 Amazon Q Developer 对 DBA 和 DE 的支持。您可以自由探索与创建常见数据库对象相关的其他 SQL 选项,例如视图、物化视图、函数和复杂的 SQL 查询。

在下一章中,我们将介绍 Amazon Q Developer 如何通过使用 shell 脚本来帮助系统管理和自动化。

参考文献

在 IDE 中支持 Amazon Q Developer 的语言:docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/q-language-ide-support.html

第八章:通过自动代码生成提高命令行和 Shell 脚本的编码效率

在本章中,我们将探讨以下关键主题:

  • 命令行和 Shell 脚本概述

  • 使用 Amazon Q Developer 为系统管理员生成命令行自动代码

  • 使用 Amazon Q Developer 为程序员生成 Shell 脚本自动代码

  • 使用 Amazon Q Developer 解释和优化 Shell 脚本

在上一章中,我们深入探讨了软件行业中占主导地位的数据库管理语言之一:结构化查询语言SQL)。通过两个用户角色——数据库管理员DBA)和 数据工程师DE),我们介绍了通过 Amazon Q Developer 自动生成代码如何帮助理解基础知识、学习语法,并自动生成常见的 DBA 和 DE 活动的代码。

在本章中,我们继续探讨类似主题,重点关注系统管理员和 Shell 脚本程序员。系统管理员主要使用 命令行界面CLI)进行各种系统配置任务,而 Shell 脚本程序员使用 操作系统OS)命令来自动化重复性任务,如开发过程、文件传输和预处理任务。我们将介绍 Amazon Q Developer 如何帮助这些专业人士理解基础知识、学习语法,并自动生成常见的系统管理和 Shell 脚本编程活动的代码。然后,我们将探讨代码可解释性,以支持 Amazon Q Developer 为 Shell 脚本提供的文档和代码优化建议。

命令行和 Shell 脚本概述

操作系统代码在管理和维护 IT 基础设施稳定性、安全性和效率方面发挥着关键作用。Shell 脚本和命令行是自动化常规任务、执行系统命令以及在基于 Unix 的操作系统(如 Linux 和 macOS)上编排复杂工作流程的基本工具。随着组织努力优化运营流程和增强可扩展性,对高效 Shell 脚本和命令行解决方案的需求日益增加。

自动代码生成已成为通过 IDE 和/或命令行简化 Shell 脚本开发、减少人工努力并提高系统管理员、程序员和工程师生产力的变革性方法。

命令行和 shell 脚本使系统管理员、程序员和工程师能够自动化重复性任务,如文件管理、系统监控、用户管理和备份操作。它还便于将多个命令串联起来执行系统命令和复杂的工作流程,确保 IT 操作的一致性和可靠性。然而,编写和维护复杂的串联命令和 shell 脚本可能耗时,容易出错,并且需要专业知识,尤其是当脚本变得更加复杂且对业务运营至关重要时。系统管理员、程序员和工程师可以利用不同的提示技术以及聊天式集成(参考第三章)来获取针对特定系统任务的定制化 shell 脚本自动创建的建议。这种交互模型加速了脚本开发周期,减少了人为错误,并确保了在不同操作系统环境中脚本结构和执行的统一性。

此外,Amazon Q 开发者作为学习 shell 脚本技术、可用命令行语法和最佳实践的教育资源。它通过其聊天界面提供交互式教程、shell 脚本概念的说明以及自动化脚本的实用示例。这一教育特性有助于系统管理员、程序员和工程师提升他们的脚本编写技能,采用行业标准实践,并有效地利用高级自动化功能。

对于经验丰富的用户,Amazon Q 开发者提供了高级功能,如脚本优化和错误处理建议。它分析生成的 shell 脚本,识别潜在的低效或陷阱,并提供提高脚本性能和可靠性的建议。这些优化能力对于在动态 IT 环境中保持操作效率和可扩展性至关重要。Amazon Q 开发者与 shell 脚本的集成还促进了协作实践。致力于系统自动化项目的团队从标准化的 shell 脚本模板、共享的自动化工作流程和简化的代码审查流程中受益。这种一致性提高了团队的生产力,促进了开发和运维团队之间的协作,并加快了关键 IT 基础设施变更的部署时间。

在下一节中,我们将探讨 Amazon Q 开发者如何通过 Unix CLI 和 shell 脚本生成操作系统代码。为了说明,我将使用整体思维链提示技术来模拟一系列活动,将它们分解为单行和多行提示(有关更多详细信息,请参阅第三章)。对于平台,我将使用带有 VS Code 的 Amazon Q 开发者界面和 macOS 终端 CLI。有关将 Amazon Q 开发者与 VS Code 和 CLI 集成的配置步骤,请参阅第二章,并在章节末尾的参考文献部分查看终端 shell 集成为命令行安装 Amazon Q的 URL。

注意

Amazon Q 开发者使用大型语言模型LLMs),其本质是非确定性的,因此您可能不会得到代码快照中显示的完全相同的答案/代码块;尝试更新提示以获取所需的建议。然而,从逻辑上讲,生成的答案/代码应满足要求。

使用 Amazon Q 开发者为系统管理员自动生成命令行代码

我将扮演一个熟悉磁盘空间管理、用户管理、进程管理和库管理等职责的系统管理员角色,但需要帮助编写具有正确语法的命令。使用 macOS,我将演示 Amazon Q 开发者如何与 CLI 交互。这个示例展示了 Amazon Q 开发者如何简化并自动化复杂任务,即使对于那些具有有限命令行经验的人来说也是如此。

通过遵循这些步骤,您将能够利用 Amazon Q 开发者的强大功能来简化您的命令行任务,并作为系统管理员提高您的整体生产力。

要开始与 Amazon Q 开发者的交互,请打开终端并输入 q ai

图 8.1 – CLI – Amazon Q 开发者基础

图 8.1 – CLI – Amazon Q 开发者基础

一旦集成窗口打开,让我们要求 Amazon Q 开发者提供以下部分中系统管理员常见任务的命令。这些任务包括磁盘空间管理、用户管理、库管理、进程管理、网络配置和系统监控等多个领域。通过利用 Amazon Q 开发者,系统管理员可以收到针对广泛任务的详细、分步命令,确保高效和准确的执行。Amazon Q 开发者的 CLI 允许用户执行命令而无需在终端提示符中明确输入。

磁盘空间管理 CLI 自动代码生成

磁盘空间管理是系统管理员的关键职责之一。有效的空间管理有助于维护系统稳定性、性能和安全,因此对于系统管理员来说是一项至关重要的任务。让我们从一些与磁盘空间管理相关的任务开始。让我们使用思维链来模拟常见任务,并将它们分解成简单的单行提示。

让我们从查找可用的磁盘空间开始:

Prompt: command to find out the disk space available

图 8.2 – CLI – Amazon Q Developer 可用磁盘空间

图 8.2 – CLI – Amazon Q Developer 可用磁盘空间

现在,让我们确定已使用的磁盘空间,并根据磁盘占用的空间量从高到低排序结果:

Prompt: command to find out the disk space utilized sort by high to low

图 8.3 – CLI – Amazon Q Developer 磁盘使用情况

图 8.3 – CLI – Amazon Q Developer 磁盘使用情况

现在,让我们查找文件的大小,并按大小从高到低排序,以便系统管理员可以确定哪些文件对磁盘空间利用率贡献最大:

Prompt: command to find out the largest file on the disk

图 8.4 – CLI – Amazon Q Developer 大文件

图 8.4 – CLI – Amazon Q Developer 大文件

观察前一个屏幕截图,可以看到 Amazon Q Developer 通过链式多个命令提供了一个单一命令,以实现提示中的指令。

现在,让我们通过让 Amazon Q Developer 查找最大的 10 个文件并将它们存档来释放一些空间。这可能涉及一个稍微复杂的过程:

Prompt: command to find out top 10 largest file on the disk and archive them

图 8.5 – CLI – Amazon Q Developer 存档文件

图 8.5 – CLI – Amazon Q Developer 存档文件

正如您在前面的屏幕截图中看到的,Amazon Q Developer 通过链式多个命令提供了一个单一命令,以实现提示中的指令。它还使用了我们指定的文件数量,并将这些文件作为tar.gz存档。

现在,让我们看看用户管理,这是系统管理员另一个非常重要的责任领域。

系统管理员用户管理 CLI 自动代码生成

系统管理员用户管理涉及在计算机系统或网络上创建、配置、维护和保障用户账户的任务。有效的用户管理对于维护系统安全、确保数据完整性和支持组织内高效运作至关重要。让我们使用思维链来模拟常见任务,并将它们分解成简单的单行提示。

让我们从基本的用户管理任务开始,例如识别所有有权访问系统的用户列表:

Prompt: command to print list of all the user logins

图 8.6 – CLI – Amazon Q Developer 用户列表

图 8.6 – CLI – Amazon Q Developer 用户列表

现在,让我们识别系统上的活跃用户并确定他们最后一次登录的时间:

Prompt: command to print user list with last login date and time

图 8.7 – CLI – Amazon Q Developer 用户最后登录

图 8.7 – CLI – Amazon Q Developer 用户最后登录

现在,让我们识别系统上最近未登录的休眠用户:

Prompt: command to print user name those do not have last log-in date

图 8.8 – CLI – Amazon Q Developer 用户从未登录

图 8.8 – CLI – Amazon Q Developer 用户从未登录

为了增强安全性和减少漏洞,让我们从系统中删除没有最近登录日期的休眠用户。这个过程可能有些复杂,所以让我们看看 Amazon Q Developer 如何帮助:

Prompt: command to drop user those do not have login date

图 8.9 – CLI – Amazon Q Developer 删除从未登录的用户

图 8.9 – CLI – Amazon Q Developer 删除从未登录的用户

在前面的截图观察中,可以看到随着需求复杂性的增加,Amazon Q Developer 会链式执行多个命令以实现提示中的指令。

现在,让我们看看一些与进程管理相关的任务以及 Amazon Q Developer 的相应支持。

进程管理 CLI 自动代码生成

进程管理是系统管理员的一项关键职责,包括监控、控制和优化计算机系统上运行的进程,以确保资源利用率和性能的效率。维护服务器的健康是系统管理员的重要职责之一。

让我们从要求 Amazon Q Developer 生成查找所有活跃进程的命令开始:

Prompt: command to list all the active processes

图 8.10 – CLI – Amazon Q Developer 活跃进程

图 8.10 – CLI – Amazon Q Developer 活跃进程

在进程管理中,CPU 在系统中有效执行多个进程方面起着至关重要的作用,因此让我们找出前 10 个 CPU 密集型进程:

Prompt: command to list top 10 CPU intense processes

图 8.11 – CLI – Amazon Q Developer 顶级 CPU 进程

图 8.11 – CLI – Amazon Q Developer 顶级 CPU 进程

与 CPU 类似,内存在整个系统中的多进程有效执行中起着至关重要的作用,因此让我们确定前 10 个内存密集型进程:

Prompt: command to list top 10 memory intense processes

图 8.12 – CLI – Amazon Q Developer 顶级内存进程

图 8.12 – CLI – Amazon Q Developer 顶级内存进程

系统管理员通常需要终止消耗大量内存或 CPU 资源的进程。为了模拟这种情况,让我们使用 Amazon Q Developer 创建一个命令来杀死消耗最多内存的前两个进程:

Prompt: command to list kill top two memory intense processes

图 8.13 – CLI – Amazon Q Developer 杀死顶级内存进程

图 8.13 – CLI – Amazon Q Developer 杀死顶级内存进程

如前一个截图所示,Amazon Q Developer 高效地生成了精确的命令,通过终止两个内存密集型进程来释放内存。这涉及一个稍微复杂的命令,其中多个命令被端到端地链接在一起。

现在,让我们看看与库管理相关的一个最后区域,这包括安装新库和升级现有库。

库管理 CLI 自动代码生成

与其他部分相比,图书馆管理中的活动相对较少,但这些任务对于确保所有应用程序在服务器上平稳运行至关重要。适当的图书馆管理,包括安装新库和升级现有库,对于维护应用程序的功能和性能至关重要。这些任务虽然不那么频繁,但在防止软件冲突、增强安全性和确保应用程序能够访问最新功能和优化方面发挥着重要作用。因此,尽管图书馆管理活动可能看起来不多,但它们对服务器环境整体健康和效率的影响是显著的。

让我们从基础开始,获取所有库的列表并将它们保存到文件中:

Prompt: command to list all the installed libraries and their version and save them in a file

图 8.14 – CLI – Amazon Q 开发者所有库列表

图 8.14 – CLI – Amazon Q 开发者所有库列表

系统管理员验证已安装库的版本是标准做法。例如,让我们利用 Python 并请求 Amazon Q 开发者生成识别相关版本的命令:

Prompt: command to find python version

图 8.15 – CLI – Amazon Q 开发者查找版本

图 8.15 – CLI – Amazon Q 开发者查找版本

同样,系统管理员通常需要升级已安装的库。例如,让我们使用 Python 并让 Amazon Q 开发者生成升级 Python 版本的命令:

Prompt: command to upgrade python version

图 8.16 – CLI – Amazon Q 开发者升级版本

图 8.16 – CLI – Amazon Q 开发者升级版本

我已经展示了系统管理员常用的几个常用 CLI 命令,展示了 Amazon Q 开发者提供从单个命令到链式多个命令以实现要求的命令的能力。此外,尝试使用 Amazon Q 开发者为其他可能从生成 CLI 命令中受益的用户角色。

在下一节中,我们将探讨 Amazon Q 开发者如何帮助程序员编写 shell 脚本。

使用 Amazon Q 开发者为程序员生成 Shell 脚本自动代码

沿着前几章的主题,我将从一个希望学习和开发使用 shell 脚本的程序员或工程师的角色开始。

Shell 脚本基础

让我们使用 Amazon Q 开发者的聊天风格界面来教育程序员,他们可以简单地用自然语言提问来了解可用的命令和功能。我将使用聊天风格交互和单行和多行提示技术:

Q : what is a shell script and what is it used for ?

图 8.17 – Shell 脚本 – 基础

图 8.17 – Shell 脚本 – 基础

如前一个屏幕截图所示,对于学习者,Amazon Q Developer 指出了 Shell 脚本有效的关键区域,例如自动化、系统管理、应用部署等。它还提供了一个带有bash shell 声明的"Hello, World !" Shell 脚本示例。此外,它还提供了可用于获取更多信息的数据源。

现在,让我们获取更多信息,并询问常用的 Shell 脚本命令及其对应的语法示例:

Q : what are the  available bash shell script commands ?

图 8.18 – Shell – 命令列表,部分截图

图 8.18 – Shell – 命令列表,部分截图

如前一个部分截图所示,Amazon Q Developer 提供了一个 Shell 脚本命令目录,这些命令被分类为文件和目录命令、文本处理命令、系统信息命令、进程管理命令、网络命令以及用户和权限命令。此外,Bash 支持控制结构、函数和其他特性,使其成为自动化 Unix-like 操作系统任务和系统管理的强大脚本语言。

现在让我们请求 Amazon Q Developer 提供"``cat"命令的语法和示例:

Q : provide details and example for shell command "cat"

图 8.19 – Shell – “cat”命令

图 8.19 – Shell – “cat”命令

如前一个屏幕截图所示,Amazon Q Developer 提供了命令的基本用法。然后,它提供了语法cat [OPTIONS] [FILE(S)]以及不同的选项,如-n-b-s-v-E-T,并提供了示例。

程序员用 Shell 脚本生成

现在我们已经了解了 Shell 脚本的基础知识,让我们使用前面的信息来处理一个用例。

这里是使用案例:创建一个接受文件名作为参数的 Shell 脚本。检查文件是否存在且可读。如果是,则在/user/input/files目录中复制该文件并启动initial_data_load.sh脚本。然后,检查进程是否成功完成。

让我们使用思维链提示技术将这个用例分解成更小的任务,当它们组合在一起时,将实现端到端场景:

  1. 创建一个接受文件名作为参数的 Shell 脚本。

  2. 检查文件是否存在且可读,然后在/``user/input/files目录中复制该文件。

  3. 假设程序员已经创建了一个名为initial_data_load.sh的脚本。让我们开始执行initial_data_load.sh脚本并检查其是否成功完成。

为了说明,我将使用 VS Code 脚本编辑器窗口的单行和多行提示。

需求 1

这就是我们如何处理第一个要求并创建一个接受文件名作为参数的 Shell 脚本:

Prompt 1 :
/* Create a shell script */
Prompt 2 :
/* get file name from as parameter */

图 8.20 – Shell – 输入参数

图 8.20 – Shell – 输入参数

注意到 Amazon Q Developer 初始化了 Shell 并接受了一个参数。现在,让我们处理下一个需求。

要求 2 和 3

检查文件是否可用且可读,然后将文件复制到/user/input/files目录。然后我们将启动initial_data_load.sh脚本并检查其成功完成:

Prompt 1 :
/* check if a file exists and readable in the current directory then copy in "/user/input/files/" directory */
Prompt 2 :
/* run "/user/scripts/initial_data_load.sh"  and check it's status  */

图 8.21 – Shell – 复制文件并运行脚本

图 8.21 – Shell – 复制文件并运行脚本

如上图所示,您可以使用多个单行提示符,在 Amazon Q Developer 的帮助下自动生成代码。由于这是一个相对简单的用例,您可以自由尝试单行和多行提示技术,以观察 Amazon Q Developer 生成的最终代码。

使用 Amazon Q Developer 进行 shell 脚本的可解释性和优化

Amazon Q Developer 提供了一个简单的界面来实现代码的可解释性和优化。有关可解释性和优化的更多详细信息,请参阅第十二章

为了说明,我将在创建 shell 脚本任务期间使用之前自动生成的代码。如图所示,突出显示代码,右键单击以打开弹出菜单,选择Amazon Q,然后选择解释以进行代码可解释性或优化以获取优化建议:

图 8.22 – Shell – Amazon Q 可解释性和优化

图 8.22 – Shell – Amazon Q 可解释性和优化

这将弹出 Amazon Q Developer 的聊天式界面,并将整个代码移动到分析位置。

为了可解释性,Amazon Q Developer 为每一行代码提供了详细信息,并在最后提供了一个总结:“总的来说,这个 shell 脚本接受一个文件名作为参数,检查该文件是否存在于当前目录中并且可读,将文件复制到指定位置(/user/input/files/),运行另一个脚本(initial_data_load.sh),并根据第二个脚本的退出状态打印成功或失败信息”。

由于我们使用多个单行提示符构建了这个脚本,为了优化,Amazon Q Developer 彻底分析了整个脚本。它提供了几个优化和增强脚本可读性、可维护性和错误处理的建议。这些改进没有改变其核心功能。建议涵盖了变量赋值、条件优化、错误处理、路径赋值、命令替换、错误重定向、退出状态和代码格式化。此外,Amazon Q Developer 生成了一个包含这些最佳实践的更新后的端到端 shell 脚本,您可以通过点击插入到****光标按钮直接添加。

除了命令行和 shell 脚本之外,Amazon Q Developer 还支持多种其他编程语言。在这个领域有许多增强功能正在发生,我们预计将会有更多的增强来支持额外的语言(请参阅本章末尾的参考文献部分)。

摘要

如上图所示,Amazon Q 开发者作为系统管理员、程序员和工程师的有价值助手。Amazon Q 开发者可以与 CLI 结合使用,仅通过简单的提示就能生成复杂的命令。输出命令可以是简单的单个命令,也可以是命令链的组合,以实现诸如磁盘空间管理、用户管理、进程管理、库管理等多样的管理任务。

Shell 脚本程序员和工程师可以使用思维链提示、单行提示和多行提示技术来自动生成端到端无错误的脚本。此外,他们还可以使用解释优化选项来轻松获取代码细节和定制代码建议。使用这些选项鼓励遵循 shell 脚本最佳实践和命令行语法,促进代码质量和标准化。该工具还验证脚本语法和命令行选项,并推荐安全的脚本实践以减轻潜在的安全漏洞。这确保了系统管理员和 DevOps 工程师生成的 shell 脚本和命令行集成既稳健又安全,符合组织标准和监管要求。

在下一章中,我们将探讨如何使用 Amazon Q 开发者工具在命令行和 shell 脚本中建议代码。

参考资料

第九章:通过自动代码生成提高 JSON、YAML 和 HCL 的编码效率

在本章中,我们将探讨以下关键主题:

  • 基础设施即代码(IaC)语言的概述

  • 使用 Amazon Q Developer 为 AWS CloudFormation 自动生成 JSON 和 YAML 代码

  • 使用 Amazon Q Developer 为 Terraform 自动生成 HCL 代码

  • 使用 Amazon Q Developer 进行 JSON、YAML 和 HCL 代码的可解释性和优化

在上一章中,我们通过两个用户角色:系统管理员和 shell 脚本程序员,探讨了命令行界面(CLI)和 shell 脚本。我们介绍了如何通过 Amazon Q Developer 的自动代码生成功能协助这些专业人士。使用 Amazon Q Developer CLI,我们演示了如何完成各种管理任务,如磁盘空间管理、用户管理、进程管理、库管理等等。此外,我们还利用思维链提示、单行提示和多行提示技术生成了一个端到端的 shell 脚本。

在本章中,我们将探讨与 IaC 相关的不同编程语言类别。在 IaC 中,编程语言与使用的工具或服务紧密耦合。首先,我们将关注 JSON 和 YAML,它们由 AWS CloudFormation 服务使用。然后,我们将探索 HCL,它由 Terraform 使用。我们将介绍如何通过 Amazon Q Developer 的自动代码生成功能帮助理解基础知识、学习语法以及使用 JSON、YAML 和 HCL 自动生成代码。然后,我们将探讨代码可解释性,以支持 Amazon Q Developer 为 IaC 程序员提供的文档和代码优化建议。

IaC 语言的概述

在当今的云计算领域,基础设施即代码(IaC)已成为管理和提供基础设施的基本范式转变。AWS CloudFormation 和 Terraform 是两款领先的 IaC 工具,它们使开发人员和系统管理员能够以编程方式定义和管理云资源,将基础设施视为软件。

AWS CloudFormation 通过声明性 JSON 或 YAML 模板简化了 AWS 资源的提供和管理。这些模板定义了 AWS 服务的配置和相互依赖关系,使用户能够可预测和可重复地提供多个资源。CloudFormation 自动创建、更新和删除基础设施堆栈,确保一致性并降低资源提供中手动错误的几率。

Terraform,由 HashiCorp 开发,采用更广泛的方法,支持多个云服务提供商(包括 AWS、Azure 和 Google Cloud Platform)以及本地基础设施。它使用一种名为HashiCorp 配置语言HCL)的声明性语言来定义基础设施代码。Terraform 的状态管理功能允许它在最小停机时间内规划和执行对基础设施的更改,并管理不同提供商之间资源的复杂依赖关系。

AWS CloudFormation 和 Terraform 在帮助组织实现 IaC(基础设施即代码)原则方面发挥着关键作用,包括版本控制、自动化和可扩展性。它们促进了协作开发实践,与 CI/CD 管道集成,并允许将基础设施配置作为代码存储库进行管理。IaC 开发人员可以利用 Amazon Q Developer 的各种提示技术和聊天式集成,在几个关键领域增强 AWS CloudFormation 和 Terraform 的功能。Amazon Q Developer 根据特定的基础设施需求自动生成 AWS CloudFormation 模板和 Terraform 配置。通过自然语言处理和聊天式交互,开发人员可以指定基础设施需求,并接收符合最佳实践和架构指南的生成代码。除了基本的模板生成之外,Amazon Q Developer 还提供优化建议,并强制执行 AWS CloudFormation 和 Terraform 配置的最佳实践。它分析生成的代码,识别潜在的性能瓶颈或安全漏洞,并提供优化基础设施部署的建议。

此外,Amazon Q Developer 作为学习 IaC(基础设施即代码)原则和掌握 AWS CloudFormation 和 Terraform 的教育资源。它通过直观的界面提供交互式教程、IaC 概念的说明和实际示例。这一教育方面有助于开发人员和系统管理员提高他们在高效和安全地管理云资源方面的熟练程度。此外,通过将 Amazon Q Developer 与 AWS CloudFormation 和 Terraform 集成,团队可以受益于标准化的模板、共享的基础设施配置和简化的代码审查流程。这种集成增强了开发、运维和安全团队之间的协作,确保基础设施更改的一致性和安全性。随着云环境的发展,Amazon Q Developer 持续更新其推荐和功能,以与 AWS CloudFormation 和 Terraform 的最新最佳实践和架构模式保持一致。这确保了组织可以利用最尖端的设施管理技术,并在云部署中保持运营卓越。

让我们深入探讨,看看 Amazon Q Developer 如何帮助一位 IaC 开发者。为了说明,我将使用带有 VS Code 的 Amazon Q Developer 界面(有关 Amazon Q Developer 与 VS Code 配置的步骤,请参阅第二章)。此外,有关 Visual Studio Code 的 Terraform 扩展的信息,请参阅本章末尾的“参考文献”部分。

注意

Amazon Q Developer 使用 LLMs,其本质是非确定性的,因此您可能不会得到与代码快照中显示的完全相同的答案/代码块;尝试更新提示以获取所需的建议。然而,从逻辑上讲,生成的答案/代码应满足要求。

使用 Amazon Q Developer 为 AWS CloudFormation 自动生成 JSON 和 YAML 代码

与上一章类似,让我们假设一位新的 IaC 开发者计划使用 JSON 和 YAML 编码在 AWS 云上使用 AWS CloudFormation 构建基础设施,但缺乏对该服务的背景知识。我们将使用 Amazon Q Developer 的聊天式界面来教育 IaC 开发者。他们可以简单地用自然语言提问,以了解 AWS CloudFormation 及其对 JSON 和 YAML 的支持。

AWS CloudFormation 基础

让我们首先了解 AWS CloudFormation:

Q: What is AWS CloudFormation and what is it use for?

图 9.1 – 提示 – IaC AWS CloudFormation 基础

图 9.1 – 提示 – IaC AWS CloudFormation 基础

Amazon Q Developer 提供了 AWS CloudFormation 服务的概述:“AWS CloudFormation 是由 Amazon Web Services (AWS) 提供的一项服务,允许您使用模板来建模和部署一组相关的 AWS 和第三方资源。它使您能够以代码的形式定义和管理您的基础设施,从而更容易以一致和可重复的方式创建、更新和删除资源。”

此外,Amazon Q Developer 列出了一些可以使用 AWS CloudFormation 部署的 AWS 资源。然后,它提供了 AWS CloudFormation 的关键特性,包括基础设施即代码 (IaC)、自动化部署、资源编排、可重用性和模块化、变更管理、回滚和删除。此外,它还强调了使用 JSON 和 YAML 模板作为常见的编程机制。

因此,现在,让我们让 Amazon Q Developer 提供更多关于 AWS CloudFormation 支持的 AWS 资源的信息,使用 JSON 和 YAML 模板:

Q: Which AWS resources AWS CloudFormation support using JSON and YAML templates?

图 9.2 – 提示 – IaC AWS CloudFormation AWS 资源

图 9.2 – 提示 – IaC AWS CloudFormation AWS 资源

如前一个屏幕截图所示,Amazon Q Developer 提供了一个格式良好的答案,其中包含与计算、网络、存储、数据库、分析、安全、应用服务和管理等资源类别相关的规格,以及 AWS CloudFormation 支持的每个类别的示例资源(使用 JSON 和 YAML)。

JSON 自动代码生成

根据前面的信息,一个 IaC(基础设施即代码)开发者现在理解了 AWS CloudFormation 在 JSON 中配置资源所提供支持。作为下一步,让我们开始编写 AWS CloudFormation 的 JSON 模板以创建一个简单的 AWS 资源。

让我们要求 Amazon Q Developer 从一个存储资源(如 S3 存储桶)和一个网络组件(如 VPC)创建一个常用请求的 AWS 资源(如 S3 存储桶)的 JSON 代码。为了定制,使用特定的 S3 存储桶名称、VPC 名称和 CIDR 块10.0.0.0/16。我们将使用提示来完成以下操作:

  1. 创建一个名为"MyTestBucket"的 S3 存储桶的 AWS CloudFormation JSON 模板。

  2. 创建一个 AWS CloudFormation JSON 模板,以创建一个 CIDR 块为10.0.0.0/16"MyTestVPC" VPC。

为了说明,我将使用与 Amazon Q Developer 集成的 VS Code 脚本编辑器。由于这些要求相对简单,让我们为前面提到的每个资源使用单行提示:

Prompt 1:
/* Write AWS CloudFormation JSON code to
create s3 bucket "MyTestBucket" */
Prompt 2:
/* Write AWS CloudFormation JSON code to
create Amazon VPC "MyTestVPC" with CIDR block "10.0.0.0/16" */

图 9.3 – 提示 – IaC AWS CloudFormation JSON,S3 和 VPC

图 9.3 – 提示 – IaC AWS CloudFormation JSON,S3 和 VPC

如前一个屏幕截图所示,Amazon Q Developer 为 S3 和 VPC 提供了正确的端到端 JSON 模板语法。它使用了 AWS CloudFormation 支持的特定关键字来配置这些资源,例如"AWS::S3::Bucket""AWS::EC2::VPC",这些关键字结合了资源类型和相应的父服务名称。此外,它还使用了满足我们要求的必需属性,例如将"BucketName"设置为"MyTestBucket"和将"CidrBlock"的值设置为"10.0.0.0/16"

YAML 自动代码生成

YAML 是 AWS CloudFormation 支持用于配置资源的另一种语言。作为下一步,让我们开始编写 AWS CloudFormation 的 YAML 模板以创建一个简单的 AWS 资源。我们将使用与 JSON 模板相同的创建 Amazon S3 存储桶和 VPC 的要求。现在,让我们修改我们的提示以指示 Amazon Q Developer 生成一个 YAML 模板。

与前一个示例类似,我将使用与 Amazon Q Developer 集成的 VS Code 脚本编辑器,并为这些资源中的每一个使用单行提示:

Prompt 1:
/* Write AWS CloudFormation YAML code to create s3 bucket "MyTestBucket" */
Prompt 2:
/* Write AWS CloudFormation YAML code to create Amazon VPC "MyTestVPC" with CIDR block "10.0.0.0/16" */

图 9.4 – 提示 – IaC AWS CloudFormation YAML,S3 和 VPC

图 9.4 – 提示 – IaC AWS CloudFormation YAML,S3 和 VPC

注意在前面的屏幕截图中,Amazon Q Developer 为 S3 和 VPC 创建了一个端到端的 YAML 脚本。它使用了 AWS CloudFormation 支持的特定关键字来配置这些资源,例如AWS::S3::BucketAWS::EC2::VPC,这些关键字结合了资源类型和相应的父服务名称。此外,它还使用了满足我们要求的必需属性,例如将BucketName设置为mytestbucket和将CidrBlock的值设置为10.0.0.0/16

如果您将 YAML 模板截图(图 9**.4)与 JSON 模板截图(图 9**.3)进行比较,您会注意到 Amazon Q Developer 在 YAML 版本中包含了额外的属性。由于 LLM 的非确定性特性,Amazon Q Developer 可能会添加额外的属性。然而,它始终包含满足您需求的必要属性。如果您希望,您可以调整提示以添加更多要求,并接收包含额外属性的推荐。

我们将在 使用 Amazon Q Developer 进行 JSON、YAML 和 HCL 代码可解释性和优化 部分重新审视 JSON 模板,以审查额外的建议。

使用 Amazon Q Developer 自动生成 Terraform 的 HCL 代码

我们将在本节中也遵循主题,从对语言的基本知识开始。我将首先扮演一个新 IaC 开发者的角色,他计划通过 Terraform 使用 HCL,并且对该工具没有任何背景知识。

Terraform 基础知识

让我们使用 Amazon Q Developer 的聊天式界面来教育 IaC 开发者,他们可以简单地用自然语言提问来学习 Terraform。

让我们先从 Amazon Q Developer 那里了解 Terraform:

Q: What is Terraform and what is it use for?

图 9.5 – 提示 – IaC Terraform 基本部分截图

图 9.5 – 提示 – IaC Terraform 基本部分截图

如您在前面的部分截图中所见,Amazon Q Developer 提供了基本信息:“Terraform 是由 HashiCorp 创建的开源基础设施即代码 (IaC) 工具。它用于跨多个云提供商部署和管理云基础设施资源”。然后,它列出了 Terraform 支持的使用案例和功能,如基础设施部署、IaC、多云支持、资源生命周期管理、状态管理、依赖处理等。

现在,根据 Amazon Q Developer 的回答信息,作为一个 IaC 开发者,我们了解到它使用了 HCL 在多个云提供商和本地创建资源,包括 AWS 资源,如 EC2 实例、VPC、RDS 数据库等。

现在让我们让 Amazon Q Developer 列出 HCL 支持的不同 AWS 资源:

Q: Which AWS resources are supported by Terraform HCL?

图 9.6 – 提示 – IaC Terraform AWS 资源

图 9.6 – 提示 – IaC Terraform AWS 资源

注意到 Amazon Q Developer 提供了一个包括计算、网络、存储、数据库、分析、安全、应用服务和管理等类别的分类列表,以及每个类别中 Terraform HCL 支持的示例资源。

HCL 自动代码生成

根据 Amazon Q Developer 提供的先前基本信息,HCL 是 Terraform 支持的语言,用于部署多个 AWS 云资源,包括 Amazon S3 存储桶和 VPC。作为下一步,我们将使用与上一节中 AWS CloudFormation 使用 JSON 相同的要求来创建 S3 存储桶和 VPC。

现在,让我们修改我们的提示以指示亚马逊 Q 开发者生成一个 HCL 模板。类似于前面的例子,我将使用与亚马逊 Q 开发者集成的 VS Code 脚本编辑器,并为这些资源中的每一个使用单行提示:

Prompt 1:
/* Write Terraform HCL to create s3 bucket "MyTestBucket" */
Prompt 2:
/* Write Terraform HCL code to create Amazon VPC "MyTestVPC" with CIDR block "10.0.0.0/16" */

图 9.7 – 提示 – IaC Terraform HCL,S3 和 VPC

图 9.7 – 提示 – IaC Terraform HCL,S3 和 VPC

注意到亚马逊 Q 开发者提供的端到端 HCL 代码使用了 Terraform 模块和相应的必需属性。它使用了resource "aws_s3_bucket"resource "aws_vpc"bucket = "MyTestBucket"cidr_block = "10.0.0.0/16"来满足提示中提供的精确规范。您可以自由地更新提示以从亚马逊 Q 开发者获取具体的 HCL 代码建议。

使用亚马逊 Q 开发者进行 JSON、YAML 和 HCL 代码的可解释性和优化

亚马逊 Q 开发者提供了一个简单的界面来实现代码的可解释性和优化,并支持带有 JSON 和 YAML 模板以及 Terraform HCL 的 AWS CloudFormation 脚本。有关可解释性和优化的更多详细信息,请参阅第十二章

为了说明,我将使用在 AWS CloudFormation JSON 创建任务期间自动生成的代码。如图下所示,突出显示代码,右键单击以打开弹出菜单,选择亚马逊 Q,然后选择解释以进行代码可解释性或优化以获取优化建议。

图 9.8 – JSON、YAML 和 HCL – 亚马逊 Q 的可解释性和优化

图 9.8 – JSON、YAML 和 HCL – 亚马逊 Q 的可解释性和优化

这将弹出亚马逊 Q 开发者的聊天风格界面,并将用于分析的完整代码移动到该界面。

对于可解释性,亚马逊 Q 开发者识别出两个不同的模板,并相应地隔离每个块,提供可用于文档和了解资源规范的相关详细信息。例如,亚马逊 Q 开发者为 S3 存储桶部分提供了以下详细信息:“此模板定义了一个名为 MyTestBucket 的单个资源,类型为 AWS::S3::Bucket。属性部分指定了 S3 存储桶资源的属性。在这种情况下,它将 BucketName 属性设置为“MyTestBucket”,这将成为创建的 S3 存储桶的名称”。

为了优化,Amazon Q 开发者推荐了几个额外的属性来增强 CloudFormation 模板的安保性、功能性和组织结构,同时保持其核心目的,即创建一个 S3 存储桶和一个 VPC。以下是一些建议的关键增强功能:“启用 S3 存储桶加密:通过 AES256 服务器端加密增强数据安全,配置 VPC DNS 支持:启用 EnableDnsHostnames 和 EnableDnsSupport 以确保 VPC 内的 DNS 正确解析,设置 VPC 实例租户:将租户设置为默认,这对于大多数用例是推荐的,并实施标签:为资源添加标签以改善识别和组织目的”。

此外,Amazon Q 开发者生成了一个包含所有先前更改的更新后的端到端脚本,您可以直接通过点击 插入到 光标 按钮来添加。

除了 JSON、YAML 和 HCL 用于 IaC 之外,Amazon Q 开发者还支持 AWS Cloud Development Kit (CDK)(TypeScript 和 Python),以及多种其他编程语言。这一领域正在进行许多增强,我们预计将支持更多语言的进一步增强(请参阅本章末尾的 参考文献 部分)。

摘要

通过 Amazon Q 开发者增强的 JSON、YAML 和 HCL 与 AWS CloudFormation 和 Terraform,通过 IaC 革命性地改变了现代基础设施管理。这些工具自动化了部署工作流程,确保了一致性和遵循最佳实践,同时提供了教育资源以促进学习和采用。这种全面的方法使组织能够在其云环境中实现更高的敏捷性、可靠性和可扩展性。

如本章所示,Amazon Q 开发者与 AWS CloudFormation 和 Terraform 集成以生成 JSON、YAML 和 HCL 代码,可以显著提高基础设施供应和管理的高效性和创新性。通过利用 Amazon Q 开发者的功能,团队能够简化 IaC 模板的开发,优化资源利用,并加快部署周期。这不仅减少了人工工作量,还最小化了在基础设施更新和扩展操作中出错的风险。此外,Amazon Q 开发者提供了对高级配置的见解,并就优化基础设施设计提供建议。这使得组织能够实施满足不断变化业务需求的强大、可扩展的架构。

最终,Amazon Q 开发者、JSON、YAML 和 HCL 与 AWS CloudFormation 和 Terraform 之间的协同作用,使企业能够在云操作中实现卓越的运营,推动其 IT 环境中的持续改进和创新。

在下一章中,我们将探讨如何使用 Amazon Q Developer 的自定义功能来允许代码建议与团队的内部库、专有算法技术和企业代码风格保持一致。

参考资料

第三部分:高级助手功能

在本部分中,我们将探讨 Amazon Q Developer 的一些高级功能,这些功能通过提供超出基本自动代码生成能力的功能来提高开发者的生产力。

本部分包含以下章节:

  • 第十章, 自定义代码建议

  • 第十一章, 理解代码引用

  • 第十二章, 简化代码解释、优化、转换和功能开发

  • 第十三章, 简化代码扫描和修复安全漏洞

第十章:定制代码建议

在本章中,我们将探讨以下关键主题:

  • Amazon Q 定制的先决条件

  • 在 Amazon Q 中创建定制

  • 评估和优化定制

  • 创建不同的定制版本

  • 添加用户和组

  • 在集成开发环境(IDE)中使用定制

通过定制,Amazon Q 开发者 可以支持针对您团队内部库、专有算法和企业代码风格的软件开发。通过连接包含您的代码的数据源,Amazon Q 利用您的内容提供与您组织开发风格相一致的帮助。

让我们开始,先看看在您能够利用 Amazon Q 定制之前需要满足的一些先决条件。

Amazon Q 定制的先决条件

由于定制主要被组织使用,它仅在 Amazon Q 开发者 Pro 级别中可用。但是,您也可以通过获取 Pro 订阅并在 Amazon Q 管理控制台中添加定制功能来亲自尝试。

当使用 Amazon Q 定制时,请确保您的 Amazon Q 管理员已获得访问您的代码库的授权,该代码库可以存储在 Amazon S3 上,或通过 AWS CodeConnections。值得注意的是,在 Amazon Q 开发者 Pro 的标准设置流程中,您的 AWS 组织 管理员不会授予 Amazon Q 管理员访问这些服务的权限。

因此,在利用 Amazon Q 定制之前,将以下权限添加到您的 Amazon Q 管理员角色中至关重要。请注意,即使在现在与 Amazon Q 开发者相关的情况下,策略中仍然显示了 CodeWhisperer 的旧名称:

{
    "Version": "2012-10-17",
    "Statement": [{
            "Effect": "Allow",
            "Action": [
                "sso-directory:DescribeUsers"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "codewhisperer:CreateCustomization",
                "codewhisperer:DeleteCustomization",
                "codewhisperer:ListCustomizations",
                "codewhisperer:UpdateCustomization",
                "codewhisperer:GetCustomization",
                "codewhisperer:ListCustomizationPermissions",
                "codewhisperer:AssociateCustomizationPermission",
                "codewhisperer:DisassociateCustomizationPermission"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "codeconnections:ListConnections",
                "codeconnections:ListOwners",
                "codeconnections:ListRepositories",
                "codeconnections:GetConnection"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "codeconnections:UseConnection",
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "codeconnections:ProviderAction": [
                        "GitPull",
                        "ListRepositories",
                        "ListOwners"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject*",
                "s3:GetBucket*",
                "s3:ListBucket*"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

上述策略授予了角色使用 Amazon Q 开发者定制 API 的权限。它还允许角色通过 Amazon S3 或 AWS CodeConnections 建立连接并访问代码库。如果您计划尝试定制,请随意从 AWS 文档中复制 身份和访问管理IAM)策略代码,该链接已在本章末尾的 参考文献 部分提供。

Amazon Q 还会在 Amazon CloudWatch 日志 中保留有关您创建定制的相关数据。请使用以下授权设置授予您的 Amazon Q 管理员访问这些日志的权限。以下权限允许 Amazon Q 开发者管理员查看这些日志。我们将在以下章节中看到这些日志在跟踪以及调试方面的帮助:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowLogDeliveryActions",
            "Effect": "Allow",
            "Action": [
                "logs:PutDeliverySource",
                "logs:GetDeliverySource",
                "logs:DeleteDeliverySource",
                "logs:DescribeDeliverySources",
                "logs:PutDeliveryDestination",
                "logs:GetDeliveryDestination",
                "logs:DeleteDeliveryDestination",
                "logs:DescribeDeliveryDestinations",
                "logs:CreateDelivery",
                "logs:GetDelivery",
                "logs:DeleteDelivery",
                "logs:DescribeDeliveries",
                "firehose:ListDeliveryStreams",
                "firehose:DescribeDeliveryStream",
                "s3:ListAllMyBuckets",
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:account number:log-group:*",
                "arn:aws:firehose:us-east-1:account number:deliverystream/*",
                "arn:aws:s3:::*"
            ]
        }
    ]
}

确保定制质量的第一步是选择最佳源材料。在准备数据源时,包含具有团队认可模式的代码,同时避免包含反模式、错误、安全漏洞、性能问题等类似问题的代码。组织通过创建全面指南和最佳实践来建立最佳编码标准和模式,这些指南和最佳实践经过充分记录,并且对所有开发者易于访问。他们通过代码审查和开发项目中的安全标准来执行这些标准。所有组织都可以自行决定哪些项目代码库是他们的黄金标准,以便他们可以使用这些代码库在 Amazon Q 开发者中进行定制。

您的数据源应包含 2 MB 到 20 GB 的支持语言的源代码文件。Amazon CloudWatch 日志将指示定制训练过程中使用的所有代码库的总大小。在接下来的几节中,我们将在日志中强调这一点。文件数量没有限制,但请确保您希望支持的每种语言至少包含 10 个文件。如果使用 Amazon S3 作为数据源,请将所有源代码组织在一个目录中,避免放置在根级别,因为根级别的文件将被忽略。

支持的语言

目前,Amazon Q 开发者支持 Java、Python、JavaScript 和 TypeScript 编程语言的定制,并且只能从 VS Code 和 JetBrains IDE 中使用。请关注新版本,可能包含更多选项。

现在,让我们学习如何在 Amazon Q 开发者中创建定制。

在 Amazon Q 中创建定制

要开始定制,首先在 Amazon Q 开发者控制台中设置它们。我们假设您已经遵循了设置 Pro 级别的步骤。

下面的截图显示了 Amazon Q 开发者控制台中的定制设置。要访问 Amazon Q 开发者控制台,在 AWS 控制台中搜索服务名称,然后点击设置按钮,即可到达以下屏幕。

图 10.1 – Amazon Q 定制设置

图 10.1 – Amazon Q 定制设置

然后,点击定制链接,在定制页面内遵循简单的三步流程:连接到代码库、创建定制和激活它。以下截图显示了该过程。

图 10.2 – Amazon Q 定制 – 创建过程

图 10.2 – Amazon Q 定制 – 创建过程

让我们逐一查看这些步骤。

连接到代码库

一旦你在控制台中点击创建定制按钮,你将看到一个页面,你可以在这里提供定制的名称和描述,以及与源代码库的连接,如下面的截图所示。

图 10.3 – Amazon Q 自定义 – 创建连接

图 10.3 – Amazon Q 自定义 – 创建连接

总是尽量在这里给出有意义的名称和清晰的描述,因为开发人员可以从 IDE 中看到这些信息。

在前面的截图中的重要方面是源连接。有两种方式可以使您的源代码对 Amazon Q 可用以创建自定义。您可以将组织中的所有源代码上传到 Amazon S3 存储桶,并提供 S3 URI 作为源连接。许多将大量企业代码存储在代码仓库中作为 DevOps 流程一部分的组织不太可能使用此选项。另一种选项确实是连接到代码存储库。

如果您的数据源位于 GitHub、GitLab 或 Bitbucket,您需要使用 AWS CodeConnections 与其建立连接。为了展示本章中的自定义功能,我将连接到我的 GitHub 仓库,我将利用一些公共仓库,我将为使此功能工作而将其分叉。有关如何创建到您的仓库的连接的详细步骤,我在本章末尾的参考文献部分提供了链接,以便您可以一步一步地创建连接并将连接放入 Amazon Q 自定义创建页面。

以下截图显示了同一自定义创建页面的底部部分,该页面允许您将在此过程中生成的日志输出到日志交付选项之一。在这种情况下,我选择了 AWS CloudWatch,在后续步骤中,我将向您展示日志在此过程中的重要性。

图 10.4 – Amazon Q 自定义 – 日志交付选项

图 10.4 – Amazon Q 自定义 – 日志交付选项

一旦点击创建自定义按钮,它就开始了训练过程。根据代码库的总大小,可能需要几分钟到几小时甚至更长时间。

准备自定义

在此步骤中,Amazon Q 将连接到您的代码仓库,并根据您组织的编码实践训练一个自定义模型,以便它可以利用您的内容提供针对您组织开发人员偏好的定制建议。

安全注意事项

AWS 不会在任何不直接有利于您的企业的背景下存储或利用您的内容。此外,AWS 不会利用您的内容向其他客户提供代码建议,当然,Amazon Q 也不会参考为其他客户进行的网络安全扫描。

在此过程中,Amazon Q 从代码仓库检索源代码,并在进行合理性检查和质量检查,如重复文件检查和不支持的文件格式后,尝试确定它是否有足够的上下文来创建一个对所有组织开发人员都有益的自定义。

运行了一段时间后,定制创建页面失败了,并给我提供了一个错误信息,说代码大小不足以训练一个有效的模型。这个问题在以下截图中得到了突出。

图 10.5 – Amazon Q 定制 – 创建定制失败

图 10.5 – Amazon Q 定制 – 创建定制失败

这个错误并没有确切地告诉我什么是不充分的,以及它是如何在我们的代码库中低于最低阈值的。这就是 CloudWatch 日志派上用场的地方。对于许多可能的故障排除错误消息,你可以通过参考部分中的链接进行查看,但我会介绍我在这个过程中遇到的一个错误。

如果你导航到定制设置期间提供的 CloudWatch 日志组链接,如图 10.4 中的日志投递部分所示,你将能够看到这个错误的确切原因。例如,在我的情况下,错误日志,如以下截图所示,表明在质量清理过程之后,Amazon Q 只能收集大约 1 MB 的代码。这个限制低于引擎进行定制训练过程所需的最低阈值 2 MB。

图 10.6 – Amazon Q 定制 – AWS CloudWatch 中的失败详情

图 10.6 – Amazon Q 定制 – AWS CloudWatch 中的失败详情

这种数据不足错误的原因是,我从 AWS 在 GitHub 上提供的公共代码示例中 fork 了一个流行的代码仓库,位于https://github.com/aws-samples.

实际上,作为组织的一部分,你的管理员会将 Amazon Q 定制连接到你的私有企业仓库,以便 Amazon Q 可以根据你组织内部使用的海量代码来训练定制。为了展示本书中的定制,我无法使用任何私有代码,所以我所能做的就是通过连接到一个允许任何人以任何方式使用代码的公共仓库来展示这个功能。

此外,在代码仓库中找到的公共代码可能已经被用来训练 Amazon Q 开发者,所以从技术上讲,我并不会得到真正的定制。然而,为了展示它的工作步骤,这应该足以达到目的。

在收到那个失败信息后,我意识到我需要提供更多的代码示例,可能还需要更多样化的内容,以便训练一开始就能正常工作。因此,我继续在我的 GitHub 账户中 fork 了几个更多的仓库,这样 Amazon Q 就能跳过那个错误步骤。我重新运行了定制创建过程,过了一会儿,我又查看了一次 CloudWatch 日志,看看添加更多的代码仓库是否有助于它越过最低阈值。

以下截图显示,它勉强越过了所需的 2 MB 最低阈值。

图 10.7 – Amazon Q 定制 – 修改后重新运行后的 AWS CloudWatch 日志

图 10.7 – Amazon Q 定制 – 修改后重新运行后的 AWS CloudWatch 日志

因此,即使添加了 5 到 6 个存储库,代码大小仍然只有 2 MB 多一点。建议至少有 2 MB,这可以扩展到 20 GB 的代码库。所以,很明显定制过程将完成,但我并不期望得到一个很高的评估分数。

以下截图显示定制已成功完成;然而,它给了我一个令人难以置信的评估分数为 1。换句话说,它告诉我最好不要将此定制功能推广到我们组织中的所有开发者,因为它会产生较差的结果。

图 10.8 – Amazon Q 定制 – 定制创建已完成

图 10.8 – Amazon Q 定制 – 定制创建已完成

我们将在下一节讨论分数评估以及如何改进它,但让我们完成创建过程中的第三步,即激活创建的定制。

激活和停用定制

定制创建完成后,需要激活。由于这是我们第一个版本,即使评估分数不高,我们也会激活它。然而,在现实中,你可以通过定制创建过程不断迭代,直到得到一个良好的评估分数,然后激活你想要用作最终版本的版本。

以下截图显示了定制创建完成后出现的激活选项。一旦激活,状态将显示为已激活。你也可以通过从操作下拉菜单中选择停用选项来停用任何定制版本。这对于只保留得分最高的版本以供使用非常有用。

图 10.9 – Amazon Q 定制 – 激活定制的一个版本

图 10.9 – Amazon Q 定制 – 激活定制的一个版本

现在,让我们了解分数评估过程以及如何改进它。

评估和优化定制

当定制过程完成后,它会给出一个评估分数,并在旁边提供详细的分数范围及其含义的描述。让我们详细讨论一下。

分数评估

根据你的评估分数,你现在应该决定是否激活你的定制。考虑以下因素:

  • 非常好(8-10):Amazon Q 建议激活此定制。

  • 公平(5-7):Amazon Q 建议激活此定制。如果你没有看到显著的改进,请考虑以下优化建议。如果那些不起作用,请考虑切换到不同的代码源。

  • 差(1-4):这种自定义设置可能不太有用。考虑下一节中关于优化自定义设置的优化建议。如果这些建议不有效,考虑切换到不同的代码源。

此评估矩阵在 AWS 文档中建议,其链接也包含在本章末尾的参考文献部分。

以下屏幕截图突出了我们自定义设置的此评估分数,并在旁边突出显示了每个评分范围的含义。

图 10.10 – 亚马逊 Q 自定义设置 – 评分评估标准

图 10.10 – 亚马逊 Q 自定义设置 – 评分评估标准

那么,我们如何提高这个分数呢?让我们看看。

优化自定义设置

让我们突出一些可能提高您评估分数的建议。

为了针对您组织中使用的特定语言进行优化,考虑扩大您的数据源,包括更多的代码仓库。如果您的数据集仅限于几种编程语言,尝试包含更广泛的语言种类。此外,排除自动生成的文件和从模板创建的仓库,因为为这类文件进行培训通常添加的价值很小,并引入了噪声。

评估您的代码库是否经常使用内部库。如果不使用,亚马逊 Q 的核心模型可能已经表现最佳。为了针对特定语言进行微调,确保为每种语言至少包含 20 个数据文件,总大小至少为 10 MB。本质上,通过增加和改进用于培训自定义设置的代码的多样性、质量和数量,评估分数可能会提高。更高的评估分数将有助于生成更好的自定义代码建议。一旦您确定了如何优化自定义设置,您就可以创建它的多个版本。

创建多个自定义设置版本

随着组织创建新的代码仓库和建立新的编码标准,可能需要保留亚马逊 Q 开发者的自定义设置,以整合额外的自定义设置并提高现有自定义设置的评估分数。这就是自定义设置的版本控制派上用场的地方,它允许您根据培训保留不同版本的自定义设置。

在亚马逊 Q 开发者中创建多个自定义设置版本很容易。从您可以看到当前版本的创建自定义设置页面,您可以从操作下拉菜单中选择创建新版本,并开始构建新版本,如以下屏幕截图所示。

图 10.11 – 亚马逊 Q 自定义设置 – 创建自定义设置的新版本

图 10.11 – 亚马逊 Q 自定义设置 – 创建自定义设置的新版本

Amazon Q 管理员可以为每个定制化访问最多三个版本:最新版本、当前正在使用的版本以及最近使用但不再使用的版本。

一旦定制化版本获得可接受的评估分数,管理员就可以将其提供给用户或组。

将用户和组添加到定制化中

添加用户或组非常简单。此步骤将允许开发者在开始使用 VS Code 或 JetBrains IDE 编码时访问定制化,这两个 IDE 都已安装了 Amazon Q 扩展。

以下截图显示了 Amazon Q 控制台中的“添加用户/组”选项卡。

图 10.12 – Amazon Q 定制化 – 添加用户/组

图 10.12 – Amazon Q 定制化 – 添加用户/组

在此情况下,如以下截图所示,我正在添加自己,以便我开始在 VS Code IDE 中使用定制化。请记住,这是我们使用第二章中列出的步骤配置的 AWS IAM Identity Center 用户。

图 10.13 – Amazon Q 定制化 – 添加用户

图 10.13 – Amazon Q 定制化 – 添加用户

现在,我们已经准备好开始从 IDE 使用定制化了。

在 IDE 中使用定制化

一旦管理员批准开始使用特定的定制化,从 IDE 开始使用它就非常简单。

提醒一下,定制化仅在专业版中可用,这意味着您必须使用 IAM Identity Center 凭据登录 IDE。以下截图突出显示了这一点,当我使用 IAM Identity Center 凭据登录 VS Code IDE 时,它通知我有权访问新的 Amazon Q 定制化。

图 10.14 – Amazon Q 定制化 – VS Code IDE 中的新定制化通知

图 10.14 – Amazon Q 定制化 – VS Code IDE 中的新定制化通知

一旦选择,我可以看到之前创建的定制化名称。以下截图在 VS Code IDE 中突出了这一点。

图 10.15 – Amazon Q 定制化 – 在 VS Code IDE 中选择定制化

图 10.15 – Amazon Q 定制化 – 在 VS Code IDE 中选择定制化

一旦选择,恭喜,您将收到通知,所有新的 Amazon Q 代码建议都将来自所选的定制化。以下截图突出了这一点。

图 10.16 – Amazon Q 定制化 – VS Code IDE 中的定制化选择确认

图 10.16 – Amazon Q 定制化 – VS Code IDE 中的定制化选择确认

现在,请记住,Amazon Q 将尝试在它找到的任何由自定义训练数据创建的代码逻辑处为你提供定制建议。如果它无法关联到定制模型,Amazon Q 将提供默认模型的建议。

您可以通过内联提示或使用 Amazon Q 开发者的聊天功能来获取定制代码建议。例如,想象您正在一家大型电子商务公司工作,该公司拥有许多面向客户的购物应用程序,作为新应用程序的开发者,您被分配了一个构建向客户推荐商品的功能的任务。这个功能的逻辑可能已经在您的组织中存在。在您的 IDE 中,您只需简单地插入一个内联提示或使用适当的函数名,例如 shoppingRecommendationEngine(customerId: String),Amazon Q 将尝试根据它在定制训练过程中从您的组织私有仓库中学到的示例提供逻辑。函数中的所有复杂逻辑,可能在您的组织中已经建立为黄金标准,都可以立即使用,而无需您手动理解和创建所有代码。

Amazon Q 开发者还可以使用聊天功能回答您关于组织自定义代码的问题。您只需要求聊天根据用例生成或解释代码,Q 将尝试从它从组织的代码库中学到的内容中推断,以提供最接近的匹配输出。例如,您可以要求 Amazon Q 聊天生成一个使用 k-means 聚类算法的购物推荐引擎实现,它将尝试根据它在定制训练过程中从您的组织代码库中学到的其他类似示例提供代码建议。

这就结束了本章的内容。如果您已订阅了专业版,或者您的组织需要设置此功能,请随意尝试。

摘要

在本章中,我们介绍了 Amazon Q 开发者中的代码定制是什么。我们首先概述了 Amazon Q 定制的先决条件。然后,我们探讨了如何在 Amazon Q 中创建定制。在创建过程之后,需要对分数进行评估,并实施优化技术,以便在后续的定制创建过程中提高分数。

我们还研究了如何创建和维护多个版本的定制。一旦定制创建完成,管理员会将其分配给用户或组。最后,用户可以使用他们的 IAM 身份中心凭证登录 VS Code 或 JetBrains IDE,以选择并开始使用这些定制。

在下一章中,我们将探讨理解代码建议引用的方法,以便采取适当的行动。

参考资料

第十一章:理解代码引用

在本章中,我们将探讨以下关键主题:

  • 什么是代码引用?

  • 启用、禁用和退出代码引用

  • 代码引用示例

本章将是一个简短的章节,但这个主题值得拥有自己的章节,以免被跳过。因此,让我们直接进入正题。

什么是代码引用?

开发引入了创新解决方案;然而,它也带来了遵守许可要求并确保适当归属的责任。未能遵守开源许可证可能导致法律和道德问题,可能损害整个项目的完整性。因此,对于开发者来说,准确识别和管理他们在项目中使用的任何开源代码至关重要。

开源软件许可证

开源许可的主题相当广泛,开源软件在多种许可证下分发,每种许可证都有不同的要求和权限。在本章中,我们不会深入探讨开源许可证的类型及其法律问题。我们鼓励所有开源软件用户在理解和遵守适用许可证方面进行尽职调查。

在其学习过程中,亚马逊 Q 开发者有时会使用开源项目进行训练。偶尔,其建议可能与训练数据中的特定部分非常相似。亚马逊 Q 标记出可能与公开可用代码相似的代码建议。这使得开发者能够查看开源项目仓库的 URL 及其许可证,通过适当添加必要的许可证归属,确保开源代码的负责任集成。

使用参考日志,您可以查看与训练数据相似的代码建议。此外,您还可以更新和编辑亚马逊 Q 提供的代码建议。

在我们通过示例了解代码引用之前,让我们快速看一下如何启用或禁用代码引用,如果需要,完全退出它们。

启用、禁用和退出代码引用

打开和关闭代码引用非常简单。不同的 IDE 或工具在亚马逊 Q 设置中都有一个启用/禁用标志。例如,如果您使用 VS Code,您可以从屏幕底部的亚马逊 Q 首选项选项中点击打开设置页面。

以下截图在 VS Code IDE 中突出了这一点。

图 11.1 – 亚马逊 Q 开发者 – 设置

图 11.1 – 亚马逊 Q 开发者 – 设置

一旦您打开设置页面,您就可以找到允许您启用和禁用带有代码引用选项的代码建议的复选框,如以下截图所示。

图 11.2 – 亚马逊 Q 开发者 – 启用/禁用代码引用

图 11.2 – 亚马逊 Q 开发者 – 启用/禁用代码引用

类似地,启用/禁用代码引用的选项也适用于其他 IDE 和 AWS 工具,其中可以集成 Amazon Q。例如,下面的屏幕截图显示了 AWS Glue Studio 笔记本中可用的带引用的代码切换开关。

图 11.3 – Amazon Q Developer – 在 AWS Glue Studio 笔记本中启用/禁用代码引用

图 11.3 – Amazon Q Developer – 在 AWS Glue Studio 笔记本中启用/禁用代码引用

如屏幕截图所示,CodeWhisperer 是其重新命名为 Amazon Q Developer 之前的旧名称。如果您想了解如何为其他 IDE 或工具启用和禁用它,例如我们在第二章中讨论过的,请参阅本章末尾的参考文献部分提供的链接。

有时,组织的管理员可能希望所有开发者都退出代码引用。这可以通过 Amazon Q 控制台设置页面完成,只有管理员才有权限在企业级别退出此设置。

下面的屏幕截图突出了 Amazon Q 控制台设置页面中的退出设置。要再次为所有开发者启用,只需将标志设置为True

图 11.4 – Amazon Q Developer – 从所有中退出代码引用

图 11.4 – Amazon Q Developer – 从所有中退出代码引用

现在我们通过 VS Code IDE 中的示例来查看代码引用的实际应用。

代码引用示例

考虑到您正在构建一个使用 Amazon DynamoDB 作为 NoSQL 数据库的项目。在整个项目过程中,您需要使用 Python 创建一个 DynamoDB 表。因此,您打开了一个支持 Amazon Q Developer 的 IDE;在我们的例子中,我们使用的是 VS Code。

在 IDE 中,我们输入一个提示来创建一个函数,允许 Amazon Q 为我们自动生成创建 DynamoDB 表的代码。当我们开始键入函数时,Amazon Q Developer 的自动建议不仅为我们提供代码建议,还提供了代码引用,顶部指示这个代码样本来自 MIT 许可的训练数据。

在下面的屏幕截图中,我们突出显示了 Amazon Q 提供的这个代码引用。

图 11.5 – Amazon Q Developer – 代码引用

图 11.5 – Amazon Q Developer – 代码引用

现在,请记住,代码引用并不经常出现。它们仅在 Amazon Q 在其学习期间使用的特定代码建议来自训练数据时才会出现。因此,每次都很难复制它,因为不同的推荐实例可能不会总是基于训练中使用的来选择。

为了便于理解项目中所使用的所有代码引用,代码引用日志将进行统计,以便您可以基于其适当的使用进行分析并采取明智的行动。IDE 中的代码引用日志面板将显示所有代码引用。

以下截图在 VS Code IDE 中突出了这一点。

图 11.6 – Amazon Q 开发者 – VS Code IDE 中的代码引用日志

图 11.6 – Amazon Q 开发者 – VS Code IDE 中的代码引用日志

其他 IDE 和 AWS 工具也有类似的机制来跟踪代码引用。有关如何在其他工具中查看 Amazon Q 开发者提供的代码引用的完整列表,可以在参考文献部分的链接中找到。

这标志着关于代码引用的简短但重要章节的结束。

摘要

在本章中,我们介绍了代码引用是什么以及为什么它们很重要。然后我们探讨了如何从支持 Amazon Q 开发者的不同 IDE 和工具中启用和禁用代码引用。AWS 账户的管理员也可以选择退出代码引用,这样组织就可以控制是否希望开发者在其代码中查看和应用代码引用。

最后,通过一个示例,我们展示了代码引用如何在 IDE 中显示,因为 Amazon Q 开发者提出了一个在训练过程中意外使用的代码建议。所有代码引用也记录在代码引用日志中,以便于分析。

在下一章中,我们将向您介绍 Amazon Q 开发者的一些其他非常重要的功能,这些功能可以显著节省时间并提高开发者的生产力。

参考文献

Amazon Q 开发者代码引用:docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/code-reference.html

第十二章:简化代码解释、优化、转换和功能开发

在本章中,我们将探讨以下关键主题:

  • 解释和更新代码

  • 转换代码

  • 开发代码功能

第二部分中,我们深入探讨了Amazon Q Developer如何通过帮助他们根据不同的提示技术自动生成代码来帮助开发者提高效率。在本章中,我们将扩展 Amazon Q Developer 的一些其他关键功能。

首先,我们将探讨 Q 如何为开发者提供现有代码的解释,即使他们没有关于他们试图理解的代码的先验知识。接下来,我们将检查 Q 如何帮助将现有代码库从编程语言的较低版本转换为所需的较高版本。在我们的案例中,我们将专注于 Q 如何转换 Java 代码。最后,我们将探讨 Q 如何帮助开发新的代码功能或对现有项目进行更改。这也是一个强大的组件,您可以用普通语言指导 Q 关于您希望代码构建的功能,Q 将首先绘制一个计划,然后根据该计划帮助生成代码。

因此,让我们直接深入探讨 Amazon Q Developer 的这三个功能。

解释和更新代码

使用 Amazon Q Developer,您可以通过请求对特定行或代码块的更改来轻松更新您的代码库。然后,该工具将生成反映所需修改的新代码,您可以无缝地将其合并到原始文件中。这种无缝集成确保了流畅和高效的编码体验,让您能够专注于编写高质量的代码,而无需手动进行复杂的更改。

为了更好地理解这个功能,让我们检查一些现有代码,以亲身体验 Amazon Q Developer 的力量。我已从公共 GitHub 仓库github.com/jassics/learning-python中选择了一个用于学习的 Python 代码库。如果您有任何代码,请随意实验。此仓库包含简单的 Python 示例,这将使您更容易掌握 Amazon Q Developer 的功能。

为了演示这个功能,我们将使用 VS Code IDE 将此 Git 仓库克隆到 IDE 工作区。我们在 VS Code 中打开了two_sum_index.py文件。以下截图显示了代码。

图 12.1 – 在 VS Code IDE 中打开的 Python 代码示例

图 12.1 – 在 VS Code IDE 中打开的 Python 代码示例

我们假设您已遵循第二章中提供的说明来安装 VS Code 的 Amazon Q 扩展。

要开始使用解释功能,您可以选择全部代码或其中一部分,具体取决于您想理解并更改的内容。以下截图显示了使用 Amazon Q 为所选代码提供的不同选项。

图 12.2 – Amazon Q – 解释功能菜单

图 12.2 – Amazon Q – 解释功能菜单

让我们逐一查看它们,看看它们具体做了什么。

解释代码

当你点击带有代码选择的解释选项时,Amazon Q 会尝试为你总结代码中的逻辑功能。这对于开发者来说非常有用,尤其是在打开由他人开发的大型代码文件时,尤其是如果与代码相关的文档不多。因此,本质上,只需点击一下按钮,Q 就能立即向你解释代码的内容。

一旦你点击解释选项,Q 会首先显示你选择的用于解释的代码部分,如下面的截图所示。

图 12.3 – Amazon Q – 解释功能菜单

图 12.3 – Amazon Q – 解释功能菜单

如果你稍微向下滚动一下AMAZON Q: CHAT窗口,你首先会注意到 Q 试图为你提供一个关于逻辑大致内容的概要。在这种情况下,它识别出这个逻辑解决了两个数之和的问题。以下截图显示了初始解释。

图 12.4 – Amazon Q – 代码的高级解释

图 12.4 – Amazon Q – 代码的高级解释

然后,它进一步分解了代码,解释了代码的每一个主要元素,如下面的截图所示。

图 12.5 – Amazon Q – 代码分解

图 12.5 – Amazon Q – 代码分解

最后,它还提供了解决方案的关键方面,如下面的截图所示。

图 12.6 – Amazon Q – 解决方案的关键方面

图 12.6 – Amazon Q – 解决方案的关键方面

如你所见,理解他人代码的任务,有时可能需要几天甚至几周,现在通过 Amazon Q 开发者只需几秒钟就能完成。

代码重构

许多开发者在赶工满足截止日期的压力下,并没有遵循所有最佳编码实践——尤其是代码的可读性和效率。Amazon Q 中的重构选项可以立即实现这一点,而无需开发者投入太多精力。

当我们选择在解释部分为重构选择的相同代码时,这就是我们在AMAZON Q: CHAT窗口中收到的响应。

图 12.7 – Amazon Q – 重构后的代码

图 12.7 – Amazon Q – 重构后的代码

它会为你提供一个重构后的代码版本。请注意,它可能并不总是符合你设定的标准或你所在组织设定的标准。对于开发者来说,要么接受整个重构后的代码,要么挑选他们认为能设定高标准的内容。

如果你向下滚动 AMAZON Q: CHAT 窗口,为了使开发者的生活更轻松,它还详细提供了它对重构代码所做的所有更改,以便他们能够很好地理解为什么它提出了这些更改。以下截图显示了 Q 对其重构代码版本所做的更改列表。

图 12.8 – Amazon Q – 代码重构变更列表

图 12.8 – Amazon Q – 代码重构变更列表

下一个可用的选项对许多开发者来说都是救命稻草。

修复代码

在软件开发领域,代码和错误是相伴而生的,开发者经常花费大量时间试图识别和修复代码中的错误。Amazon Q 开发者提供了一个选项,只需点击一下按钮,就可以在 IDE 中直接修复错误。

在本章迄今为止使用的代码中,让我们引入一个小错误。在看到 while index < length 的代码中,让我们将其更改为 while index > length。现在,如果在 IDE 内部的 Q 菜单中点击 修复 选项,就像往常一样,首先,Q 会显示你要求查找和修复错误的代码片段。以下截图显示了引入错误后的我们的代码。

图 12.9 – Amazon Q – 选定的错误代码

图 12.9 – Amazon Q – 选定的错误代码

Amazon Q 将分析代码并查找逻辑问题。请记住,语法错误很容易捕捉,因为 IDE 本身会突出显示并提示你更改语法。然而,在我们的情况下,我们引入了一个逻辑错误,这可能更难捕捉,你可能需要经历整个调试过程。

以下截图显示 Q 捕获了逻辑错误,并为你提供了可能的问题所在。

图 12.10 – Amazon Q – 错误解释

图 12.10 – Amazon Q – 错误解释

在它提供了问题所在之后,它继续提供修复后的代码。以下截图显示了 Q 提供的新代码。

图 12.11 – Amazon Q – 固定代码

图 12.11 – Amazon Q – 固定代码

在修复的代码中,还有一些需要注意的事项:它还做了一些其他推荐更改,如下面的截图所示。

图 12.12 – Amazon Q – 固定代码解释

图 12.12 – Amazon Q – 固定代码解释

再次提醒:作为开发者,你应该仔细阅读变更摘要,并且只接受与你所寻找的内容相符的建议。并非每个更改或建议都适合你的情况,因此了解并承认 Q 正在尝试使开发者的生活更轻松,而不是取代开发者的工作,这一点很重要。

优化代码

开发者编写的代码解决了特定的用例;这并不意味着这是解决问题的最优化方式。换句话说,可能还有其他方式来编写特定的逻辑,这可以在执行时提高性能。为此,Q 菜单中还有一个优化选项。因此,在我们接受上一节中修复的代码后,我们运行了优化选项,看看是否有更好的方式来编写相同的问题。

以下截图显示,Q 发现了一些可以进一步增强我们代码性能的调整。请注意,你可能希望或不希望接受所有建议。

图 12.13 – Amazon Q – 代码优化建议

图 12.13 – Amazon Q – 代码优化建议

在解释之后,Q 将为你提供新的优化代码以供审查。以下截图显示了 Q 为你提供的版本供你考虑。

图 12.14 – Amazon Q – 优化代码

图 12.14 – Amazon Q – 优化代码

如往常一样,它将继续解释为什么做出这些代码更改,以便开发者能够更好地掌握,而不是试图自己解析新的逻辑。

以下截图突出了那些优化的原因。

图 12.15 – Amazon Q – 优化代码解释

图 12.15 – Amazon Q – 优化代码解释

菜单中可用的最后一个选项是发送到提示

发送代码到提示

for 循环从我们的代码中询问 Q 它在做什么,Q 能够解释逻辑。当然,你可以继续聊天过程,让它更有意义。

图 12.16 – Amazon Q – 发送到提示

图 12.16 – Amazon Q – 发送到提示

在本节中,我们能够看到 Amazon Q 开发者如何轻松地从 IDE 内部解释和更新代码。这个功能在帮助开发者节省时间方面发挥了重要作用。

在我们结束本节之前,最近发布了一个新功能,使开发者能够在 IDE 中轻松地就整个项目提出问题。让我们快速了解一下这个与工作空间相关的功能。

工作空间上下文代码意识

到目前为止,在本节中,我们一直在使用有助于我们在 IDE 中打开的特定文件内解释、优化、重构和修复代码的功能。然而,在 Amazon Q 开发者内部的新功能中,IDE 中的聊天可以回答与整个工作空间相关的问题,而不仅仅是 IDE 中打开的文件。

Q 开发者无缝地摄取和索引所有代码文件、配置和项目结构,使聊天在 IDE 中对您的整个应用程序有彻底的了解。当您首先打开 @workspace 时,与项目相关的索引被创建并本地存储。最初,创建索引可能需要长达 20 分钟。之后,索引会随着工作空间添加新文件或更新现有代码文件而增量更新。

在聊天中询问工作空间相关的问题之前,您还可以在 IDE 中配置特定的工作空间设置。以下图示强调了导航到 VS Code IDE 中的 Q 开发者设置。

图 12.17 – Amazon Q 开发者 – VS Code IDE 中的设置

图 12.17 – Amazon Q 开发者 – VS Code IDE 中的设置

一旦打开设置,您可以选择启用工作空间索引标志,启用 GPU 标志,并为索引提供特定的线程,如图所示。

图 12.18 – Amazon Q 开发者 – VS Code IDE 中的工作空间相关设置

图 12.18 – Amazon Q 开发者 – VS Code IDE 中的工作空间相关设置

一旦索引完成,您就可以开始提出跨越整个工作空间的更广泛的问题。对于本节中我们使用的关于 Python 基础的项目示例,我们想了解这个项目中还包含什么。以下屏幕截图突出显示了工作空间级别聊天的使用。

图 12.19 – Amazon Q 开发者 – 聊天标签中的工作空间相关问题

图 12.19 – Amazon Q 开发者 – 聊天标签中的工作空间相关问题

您还可以就整个项目中任何文件中可能存在的任何实现提出具体问题,Q 开发者会找到它并详细解释代码存在的地方以及它的功能。以下屏幕截图突出显示了我们在一个工作空间级别提出的一个此类特定问题,Q 开发者搜索了项目并提供了我们所需的信息。

图 12.20 – Amazon Q 开发者 – 聊天标签中的工作空间相关特定问题

图 12.20 – Amazon Q 开发者 – 聊天标签中的工作空间相关特定问题

这个强大的功能可以通过扫描整个项目并提供上下文感知的答案来提高开发者的生产力。您可以想象它在包含数百个模块和数千个代码文件的大型项目中的有用性。

现在,让我们转向 Amazon Q 的另一个关键特性,它可以帮助开发者将整个项目从代码库的一个版本转换到更新版本。

代码转换

亚马逊 Q 开发者最强大的功能之一就是能够将您的整个项目转换成用于构建项目的编程语言的升级版本。原因很简单。想象一下,在您的组织中有一个使用较旧版本的编程语言构建的大型、重要项目。在软件工程中,有一句流行的话:如果它没有坏,就别修它。许多项目倾向于延长升级项目的时间,因为它们在预期的商业目的上运行得很好。

然而,随着编程语言新版本的发布,对旧 API 的支持开始变得过时。有时,组织在升级方面落后太多,以至于他们必须花费大量时间、金钱和资源来创建一个中间升级路径,才能达到最终版本。

现在,想象一下,如果你不是花几个月时间来升级一个项目,而是只需几分钟就能完成。这就是亚马逊 Q 开发者的力量,我们将在本节中通过一个示例向您展示整个转换过程。

当您安装 Q 扩展时,亚马逊 Q 开发者提供了一种代码转换代理,在 IDE 内部使用。这个代理被称为亚马逊 Q 代码转换开发代理,我们将在 VS Code IDE 中看到它的实际应用。

但首先,让我们确保我们理解了它所需的先决条件之一。

使用亚马逊 Q 进行代码转换的先决条件

在撰写本书时,只有使用 Maven 构建的 Java 8 或 11 编写的 Java 项目支持升级到 Java 17。然而,我们正处于生成式 AI 助手发展的初期阶段,所以请关注未来,因为其他编程语言、版本和构建类型也可能随之而来。AWS 还宣布.NET 转换即将推出,这将使从 Windows 迁移到 Linux 的速度更快。参考文献部分中的链接捕捉了这一公告。

关于当前版本的亚马逊 Q 代码转换开发代理能做什么和不能做什么,还有一些其他的细微差别。由于这是一个不断发展的主题,而不是在这里列出,我在最后的参考文献部分添加了一个链接。在使用任何服务之前,请务必确保您理解其先决条件和其它限制。

亚马逊 Q 代码转换的工作原理

亚马逊 Q 代码转换开发代理通过生成一个转换计划来升级您项目的代码语言版本。这个计划包括新的依赖版本、主要代码更改和已弃用代码的替换。这个过程涉及在本地构建您的项目以创建一个构建工件,该工件必须小于 1 GB。然后亚马逊 Q 使用这个工件在安全环境中生成一个定制的转换计划。

转换过程包括将流行的库和框架升级到与 Java 17 兼容的版本,更新已弃用的代码组件,并通过运行现有单元测试迭代修复错误。转换后,Amazon Q 提供了一份总结,详细说明了所做的更改、最终构建的状态以及遇到的任何问题。

在接受之前,您可以通过查看文件差异来查看建议的更改。转换后的代码在转换完成后最多可用 24 小时。

现在,让我们看看 Amazon Q 的代码转换魔法是如何发挥作用的。

代码转换示例

让我们选择一个托管在 GitHub 上的示例公共项目。您可以使用以下链接找到该项目:github.com/aws-samples/qct-sample-java-8-app。该项目是用 Java 8 构建的,并满足使用 Amazon Q 开发者将其转换为 Java 17 的所有先决条件。

我们首先将使用受支持的 IDE。在我的情况下,我使用 VS Code 将此存储库克隆到我的本地文件夹。如果您计划在您的项目上尝试此功能,这也会是一个很好的学习曲线。

这个特定的项目包含一个 Maven 包装器(macOS 上的 mvnw 或 Windows 上的 mvnw.cmd)。在这种情况下,Amazon Q 将使用此包装器来继续转换过程,而无需担心其他 Maven 依赖项。但是,如果您有一个使用 Maven 构建的 Java 项目,请确保您的 pom.xml 文件位于项目的根目录中,并且所有 .java 文件都位于项目目录中。

此外,请注意,确保您在本地系统中使用的 IDE 中安装了正确的 Java 和 Maven 版本非常重要。由于许多问题是由不正确的版本或所需软件的不正确路径引起的。由于我在 macOS 上构建此项目,我直接将 Java 路径导出到 mvnw 包装文件中,并使用 clean install 命令测试了构建过程,如以下截图所示。

图 12.21 – Amazon Q 代码转换 – 导出 Java 路径并运行 Maven 构建

图 12.21 – Amazon Q 代码转换 – 导出 Java 路径并运行 Maven 构建

在我们开始转换之前,始终确保您能够成功构建现有项目。以下截图显示我成功构建了此项目。如果出现构建错误,请参阅 参考资料 部分提供的故障排除链接,其中列出了常见的失败原因以及如何修复这些问题。

图 12.22 – Amazon Q 代码转换 – 构建项目

图 12.22 – Amazon Q 代码转换 – 构建项目

之后,打开 /transform 以便您可以选择要转换的项目。以下截图显示了AMAZON Q: CHAT选项以及由红色方框突出显示的转换命令。

图 12.23 – 亚马逊 Q 代码转换 – 转换

图 12.23 – 亚马逊 Q 代码转换 – 转换

在下一屏幕中,它将要求您选择要转换的项目,以及代码的源版本和目标版本。以下截图显示了我们对项目的选择。

图 12.24 – 亚马逊 Q 代码转换 – 源代码和目标版本

图 12.24 – 亚马逊 Q 代码转换 – 源代码和目标版本

一旦您点击确认按钮,它将开始分析项目,如下面的截图所示。

图 12.25 – 亚马逊 Q 代码转换 – 分析阶段

图 12.25 – 亚马逊 Q 代码转换 – 分析阶段

如果您查看窗口中的说明,它告诉您可以在转换中心面板中监控进度。根据您使用的 IDE,可以打开中心面板。对于 VS Code,它是在底部面板的其他输出窗口之一。

以下截图显示了亚马逊 Q 开发者代理进行代码转换时的转换分析进度。

图 12.26 – 亚马逊 Q 代码转换 – 在转换中心面板中监控进度

图 12.26 – 亚马逊 Q 代码转换 – 在转换中心面板中监控进度

一旦分析完成,中心将显示完成状态,并允许您下载项目中的建议更改,以便将项目从 Java 8 升级到 17。以下截图突出了此步骤。

图 12.27 – 亚马逊 Q 代码转换 – 建议更改完成

图 12.27 – 亚马逊 Q 代码转换 – 建议更改完成

当您点击下载建议更改按钮时,亚马逊 Q 将总结其所有发现,并以计划的形式呈现。计划的预览摘要将在主窗口中打开供您审查。首先,它将向您展示其发现的一些统计数据,例如项目中的代码行数、更改的文件数、依赖关系等。它还将提供一个很好的目录表,以便您可以系统地浏览整个计划。以下截图突出了 Q 的这个方面。

图 12.28 – 亚马逊 Q 代码转换 – 转换计划摘要的第一页

图 12.28 – 亚马逊 Q 代码转换 – 转换计划摘要的第一页

在摘要之后,您可以先查看构建日志摘要,其中还提供了一个到日志文件的链接,以便您可以查看代理为提出转换建议所做的一切的完整日志。以下截图突出了这个方面。

图 12.29 – 亚马逊 Q 代码转换 – 转换计划构建日志摘要

图 12.29 – 亚马逊 Q 代码转换 – 转换计划构建日志摘要

如果您继续滚动此报告,您将找到所有计划依赖项的列表,以及其他依赖项。它将显示它将对这些依赖项采取什么操作以及将更新到哪个版本。开发者可以证实解决所有构建依赖项可能会令人沮丧。然而,Q 能够自行处理所有这些。

下面的截图突出了 Q 的这一方面,其中列出了我们项目的所有依赖关系更改。

图 12.30 – 亚马逊 Q 代码转换 – 转换计划依赖关系更改

图 12.30 – 亚马逊 Q 代码转换 – 转换计划依赖关系更改

最后,此计划将列出所有将进行更改的文件,并提供链接以便您可以快速可视化这些拟议的更改。当然,亚马逊 Q 也足够友好地提出了下一步操作。

下面的截图突出了计划的这一方面。

图 12.31 – 亚马逊 Q 代码转换 – 更改的文件和下一步操作

图 12.31 – 亚马逊 Q 代码转换 – 更改的文件和下一步操作

此外,您还可以在 IDE 的底部面板中看到拟议的文件更改列表,包括接受拒绝按钮。下面的截图显示了该面板的实际操作。

图 12.32 – 亚马逊 Q 代码转换 – 接受或拒绝更改

图 12.32 – 亚马逊 Q 代码转换 – 接受或拒绝更改

总是打开每个文件并理解亚马逊 Q 提出的更改是一个好习惯。为了便于视觉比较,当您从提案面板打开更改的文件时,IDE 将显示旧文件和新文件并排,以便您比较更改。

下面的截图突出了转换过程中的这个重要方面。您可以轻松地找到 Q 提议升级此项目到 Java 17 的所有代码更改。

图 12.33 – 亚马逊 Q 代码转换 – 比较代码更改

图 12.33 – 亚马逊 Q 代码转换 – 比较代码更改

如果您打开 Maven pom.xml 文件,您将观察到 Q 如何更新依赖项,包括 Maven 和 Java 版本。

图 12.34 – 亚马逊 Q 代码转换 – 比较依赖关系更改

图 12.34 – 亚马逊 Q 代码转换 – 比较依赖关系更改

一旦您接受所有更改,您就可以最终提交更改并将项目推回存储库的主分支。以下截图进行了突出显示。

图 12.35 – 亚马逊 Q 代码转换 – 提交更改

图 12.35 – 亚马逊 Q 代码转换 – 提交更改

我们已经完成了 Amazon Q 开发者的转换功能,希望你现在对它能为你的组织在转换更大、更复杂的项目时提供的生产力提升有了一个良好的认识。

让我们继续讨论 Amazon Q 开发者本章计划涵盖的另一个关键组件:功能开发。

开发代码功能

Amazon Q 开发者代理协助在 IDE 内开发代码功能或对项目进行更改。通过描述你想要创建的功能,Amazon Q 使用你当前项目的上下文来生成实现计划和必要的代码。它支持构建 AWS 项目或你自己的应用程序。

要开始,在你的 IDE 中打开一个新项目或现有项目。Amazon Q 使用你工作区根目录下的所有文件作为上下文。在AMAZON Q: CHAT面板中输入/dev以打开一个新的聊天标签页,在那里你可以与 Amazon Q 互动以生成实现计划和为新功能生成新代码。理解这一点最好的方式是通过一个示例。

在我们之前的章节中,我们将基于 Java 8 的项目转换成了 Java 17 代码。现在,假设组织决定在升级推广的同时添加一些新功能到项目中是一个好时机。为了完成这项工作,你可以遵循传统的完整 SDLC 流程,或者直接调用 Amazon Q 开发者来协助。

因此,让我们假设在转换部分中我们之前升级的 Java 项目中,我们被要求添加一个基于 OAuth 的新认证页面,用户将看到一个新逻辑页面,认证将在后端通过 REST API 端点触发。这个功能的目标是实现一个基于令牌的认证模块以提供额外的保护。

开发者真正了解这项任务的难度;首先,他们必须理解项目中所有会受到这个新功能影响的地方。之后,他们需要知道他们必须创建的所有新逻辑以及如何在项目中布局这些逻辑。在开始编码之前,需要采取一个漫长但系统的方法来确保所有部件都到位。

使用 Amazon Q 开发者,当你将 Q 扩展安装到 IDE 中时,就会有一个代理可用。这个代理被称为Amazon Q 开发者软件开发代理。代理的唯一目的是承担在项目中添加新功能的繁琐任务,只需几分钟而不是几周或几个月。

让我们看看如何在 VS Code IDE 中使用我们之前用于代码转换的相同 Java 项目开始这项任务。输入/dev后跟你想构建的功能的描述。

以下截图突出了这一方面。

图 12.36 – Amazon Q 功能开发 – 询问 Q 你想构建什么

图 12.36 – Amazon Q 功能开发 – 询问 Q 你想构建什么

为了最大限度地发挥 Amazon Q 功能开发能力的好处,需要遵循一些最佳实践。首先,提供您想要实施的新功能或代码更改的详细描述,包括具体目标和结果。这有助于 Amazon Q 生成全面的实施计划和必要的代码更改。此外,将您的功能限制在每次更新不超过五个文件。请求 Amazon Q 处理更大的更改可能会影响功能实施的质量和管理性。如果文件差异显示对多个文件进行了修改,请考虑缩小功能描述的范围。

一旦您请求想要开发的功能,Q 将创建一个非常详细的计划,列出所有步骤,包括逻辑将被创建的文件、逻辑将执行的操作、将添加的功能、不同的导入操作、类文件将是新的还是对现有文件的修改,并且还将提供测试用例生成。

接下来的几组截图将向您展示 Amazon Q 软件开发代理提出的计划。以下截图突出了创建一个新的类文件以实现用户模型和认证服务。

图 12.37 – Amazon Q 功能开发 – 计划步骤 1 和 2

图 12.37 – Amazon Q 功能开发 – 计划步骤 1 和 2

下一张截图显示了添加新的认证控制器文件的计划。此外,还添加了一个新文件以更新安全配置。

图 12.38 – Amazon Q 功能开发 – 计划步骤 3 和 4

图 12.38 – Amazon Q 功能开发 – 计划步骤 3 和 4

下一张截图显示现有的下载控制器文件被更新以启用认证机制。它还表明代理将为新的逻辑创建单元测试用例。

图 12.39 – Amazon Q 功能开发 – 计划步骤 5 和 6

图 12.39 – Amazon Q 功能开发 – 计划步骤 5 和 6

最后,以下截图显示了计划的最后一步,甚至建议添加集成测试逻辑。正如您从计划中看到的,Q 在遵循构建软件的最佳实践方面做了彻底的工作。开发者不用花费数周时间来制定这个计划,Q 只需几分钟就能完成。

图 12.40 – Amazon Q 功能开发 – 计划步骤 7 和 8

图 12.40 – Amazon Q 功能开发 – 计划步骤 7 和 8

计划的创建本身就很有趣,但更酷的是,Q 代理可以自己自动生成所有这些逻辑并将其放置在项目中供您审查和接受。以下截图显示了在AMAZON Q: CHAT窗口计划末尾提供的生成代码按钮。

图 12.41 – Amazon Q 功能开发 – 生成代码的选项

图 12.41 – Amazon Q 功能开发 – 生成代码的选项

一旦点击此按钮,Q 将提供相应文件中所有代码更改的摘要。以下截图突出了这一方面。

图 12.42 – Amazon Q 功能开发 – 汇总代码更改

图 12.42 – Amazon Q 功能开发 – 汇总代码更改

在本总结的末尾,你将看到一个插入代码按钮,它将指示 Q 将所有这些代码放回项目中。以下截图显示了AMAZON Q: CHAT窗口中的插入代码选项。

图 12.43 – Amazon Q 功能开发 – 插入代码更改

图 12.43 – Amazon Q 功能开发 – 插入代码更改

一旦代码被插入到项目中,你将看到一个所有更改的列表,准备进行审查和提交,如下面的截图所示。

图 12.44 – Amazon Q 功能开发 – 提交代码更改

图 12.44 – Amazon Q 功能开发 – 提交代码更改

然而,就像往常一样,在提交更改之前进行审查是个好习惯。当你打开代码文件时,IDE 会将更改前后的内容并排显示,让你可以比较它们。在这个过程中,一些文件作为全新的文件被添加,因此代理根据功能开发请求生成了整个类文件。

以下截图显示了更改前后代码的并排比较。这给你一个在提交并将其推送到代码仓库之前审查的机会。

图 12.45 – Amazon Q 功能开发 – 比较代码更改

图 12.45 – Amazon Q 功能开发 – 比较代码更改

这只是 Amazon Q 开发者功能开发组件如何提高开发者生产效率的一个例子。尝试一下,为您的组织中的实际项目生成更多功能。

通过这种方式,我们来到了这个重要章节的结尾。

摘要

在本章中,我们介绍了 Amazon Q 开发者的重要三个组成部分:代码解释和更新、代码转换和功能开发。

代码解释功能允许开发者通过提供解释来理解代码中的逻辑。这使得他们更容易理解代码并进行必要的更新。此外,此功能还允许开发者在 IDE 中直接重构、优化和修复代码。我们还探讨了 Amazon Q 开发者如何利用工作区上下文感知功能为整个项目回答问题。

接下来,我们探讨了代码转换功能,该功能使 Q 能够在几分钟内将 Java 项目从版本 8 或 11 升级到版本 17。负责转换分析的代理生成详细的转换计划,并在代码库中实施必要的更改,以便开发者接受和提交。

最后,我们检查了 Q 的功能开发组件,开发者可以通过在聊天中描述用例来请求 Q 在项目中构建新功能。Q 中的软件开发代理分析并制定详细计划,以更新现有项目以包含新功能。

所有这些 Amazon Q 开发者功能极大地提高了开发者的生产力。在下一章中,我们将探讨软件开发的一个关键方面:代码扫描,用于识别和修复代码中的安全漏洞。

参考文献

第十三章:简化代码中的扫描和修复安全漏洞

在本章中,我们将探讨以下关键主题:

  • 代码安全扫描的重要性

  • 使用 Amazon Q 进行的代码扫描类型

  • 启动安全扫描

  • 解决漏洞发现

本章篇幅虽短,但可以争论的是,与软件安全相关的内容永远不会简短,并且比其他任何事情都更重要。在我们探索使用 Amazon Q Developer 进行代码安全扫描的相关功能之前,让我们重申这一主题的重要性。

代码安全扫描的重要性

代码安全扫描是软件开发中的一个关键实践,旨在在代码库中的潜在安全漏洞被利用之前识别和减轻这些漏洞。以下是代码安全扫描之所以至关重要的几个原因:

  • 预防安全漏洞:定期的代码安全扫描有助于识别攻击者可能利用的漏洞。通过在开发早期阶段捕捉这些问题,组织可以预防数据泄露、财务损失和声誉损害。

  • 遵守法规:许多行业都受到严格的数据保护和安全法规的约束,例如通用数据保护条例GDPR)、健康保险可携带性和问责法案HIPAA)和支付卡行业数据安全标准PCI-DSS)。代码安全扫描确保软件符合这些法规,从而避免法律处罚并确保客户信任。

  • 保护敏感信息:应用程序经常处理敏感信息,如个人数据、财务记录和专有商业信息。代码中的安全漏洞可能导致对这些数据的未授权访问。定期扫描有助于通过识别和解决安全缺陷来保护这些敏感信息。

  • 降低成本:在开发周期早期修复安全漏洞比部署后解决它们要便宜得多。部署后的修复不仅涉及代码更改,还包括补偿、法律费用和损害控制措施。

  • 维护软件完整性:代码安全扫描通过确保不存在恶意代码或后门来帮助维护软件的完整性。这对于分发给最终用户的软件尤为重要,因为它有助于保持产品在信任和可靠性方面的声誉。

  • 促进持续改进:通过将代码安全扫描集成到开发过程中,组织可以持续改进其安全态势。扫描工具可以提供反馈和建议,使开发者能够从过去的错误中学习,并避免在未来引入类似漏洞。

  • 支持安全开发实践: 定期安全扫描强化了安全编码实践在开发者中的重要性。它鼓励以安全为首要考虑的心态,使开发者更加意识到常见的安全陷阱和避免它们的最佳实践。

  • 增强客户信心: 客户和客户越来越意识到网络安全威胁。通过定期代码扫描展示对安全的承诺可以增强客户对组织产品和服务的信心和信任。

对漏洞进行代码安全扫描是一种主动措施,在软件开发组织的整体安全策略中发挥着至关重要的作用。通过早期识别和解决安全问题,公司可以保护敏感数据,遵守法规,降低成本,并保持其软件产品的完整性和可信度。

现在,让我们将重点转向 Amazon Q 开发者工具在代码扫描和修复代码漏洞方面的辅助作用。

使用 Amazon Q 的代码扫描类型

Amazon Q 扫描利用基于多年亚马逊标准和安全最佳实践的检测器。随着安全政策的演变和新检测器的引入,扫描会自动集成这些更新,以确保您的代码始终符合最新的政策。

安全检测器由 Amazon CodeGuru 提供支持,这是一个分析代码并提供智能建议以增强代码安全和质量的开发者工具。在本书末尾的 参考文献 部分提供了一个链接,列出了不同编程语言的各个不同检测器库。请注意,检测器涵盖了每个受支持编程语言的数百个代码建议。为了理解 Amazon Q 开发者工具的安全扫描功能,我们将在下一节中仅选择几个在示例代码中检测到的漏洞。

Amazon Q 通过识别策略违规和漏洞来确保代码的安全性,这些漏洞是通过 静态应用安全测试SAST)、秘密检测和 基础设施即代码IaC)扫描来识别的。AWS 文档也突出了这个列表,其链接在 参考文献 部分提供。这个列表可能会在未来扩展到其他类型的扫描,因此请密切关注官方文档以获取更新:

  • SAST 扫描: 这种扫描在代码混淆阶段之前进行,并由应用安全团队使用,以捕获源代码本身中的漏洞。它也被称为白盒测试。Amazon Q 检测源代码中的问题,例如资源泄露、SQL 注入和跨站脚本。

  • 秘密扫描:保护代码库中敏感信息免受泄露。Amazon Q 会检查你的代码和文本文件,寻找如硬编码密码、数据库连接字符串和用户名等秘密,并提供关于漏洞和安全加固的建议。

  • IaC 扫描:评估你的基础设施文件的安全性。Amazon Q 会审查你的 IaC 文件,以识别配置错误、合规性问题以及安全漏洞。

现在让我们来看看如何开始使用 Amazon Q 的安全扫描功能。

启动安全扫描

Amazon Q Developer 提供了两种代码安全扫描的变体。

编码时扫描

一些开发者更喜欢在编写代码时,IDE 能够提醒他们代码中存在的任何安全漏洞。Amazon Q 的自动扫描功能会持续监控你正在积极工作的文件,一旦在代码中检测到问题,就会立即生成发现结果。

注意

此功能仅适用于 Pro 级别,并在使用 Amazon Q Developer 时默认启用。如果你已订阅 Amazon Q Developer 的 Pro 级别,则自动扫描功能将出现在 Amazon Q 菜单选项中,你甚至可以暂停它,如果你更喜欢在项目级别一次性运行整个扫描。

下面的截图展示了在 VS Code IDE 中的此功能。

图 13.1 – Amazon Q 安全扫描 – 自动扫描设置

图 13.1 – Amazon Q 安全扫描 – 自动扫描设置

如果自动扫描功能正在运行,一旦你编写了可能被视为安全漏洞的代码,Q 会立即标记它,并告知你问题,并提供解释。

下面的截图显示了我们在代码中引入的一个明显的安全违规,Q 立即标记了它,并立即提供了原因。

图 13.2 – Amazon Q 安全扫描 – 自动扫描检测到问题

图 13.2 – Amazon Q 安全扫描 – 自动扫描检测到问题

现在让我们看看 Amazon Q 提供的开放扫描选项。

扫描整个项目

如果开发者希望在项目完成后进行扫描,那么他们可以使用 Amazon Q 提供的此选项,该选项会扫描整个项目,并一次性提供所有安全漏洞。此选项在 Amazon Q Developer 的两个级别中均可用。

要启动此操作,请打开项目,然后运行 Amazon Q 的运行项目扫描选项,如图下所示。

图 13.3 – Amazon Q 安全扫描 – 扫描整个项目

图 13.3 – Amazon Q 安全扫描 – 扫描整个项目

一旦扫描完成,Amazon Q 将为开发者提供一个所有安全问题的摘要,以便他们审查并采取行动解决这些问题。以下截图显示了我们在第十二章中使用的 Python 项目中找到的所有问题。如果你跳过了那一章,以下是项目的 GitHub 链接,你可以尝试在本章中再次运行它:github.com/jassics/learning-python

图 13.4 – Amazon Q 安全扫描 – 安全扫描发现

图 13.4 – Amazon Q 安全扫描 – 安全扫描发现

获取代码中的问题报告是一回事,但采取适当的行动来解决问题是我们最初发现它们的主要原因。Amazon Q 开发者也可以帮助解决漏洞发现,让我们看看我们有哪些选项。

解决漏洞发现

一旦 Amazon Q 识别出问题,它将提供一些选项。它要么提供有关问题的更多详细信息,或者你可以使用 Q 聊天功能来解释发现,并提供修复建议。有时,当 Q 能够自行解决时,你也会看到自动修复选项。

以下截图显示了我们在上一节的项目中讨论的问题可以采取的行动。当然,在这种情况下,打印密码是故意为之,以展示密码生成功能,但 Q 的扫描能够检测到问题,并展示你可以采取的行动。

图 13.5 – Amazon Q 安全扫描 – 处理发现的选项

图 13.5 – Amazon Q 安全扫描 – 处理发现的选项

详细查看安全发现

查看图 13.5,如果你选择查看详情选项,Amazon Q 将详细描述问题是什么以及你可以如何找到解决方案。它基本上让你能够做出明智的决定来改进你的代码。以下截图显示了此选项。

图 13.6 – Amazon Q 安全扫描 – 发现的详细视图

图 13.6 – Amazon Q 安全扫描 – 发现的详细视图

现在我们来看看你可以选择的 Q 解释选项。

寻求对问题的解释

再次查看图 13.5,如果你选择解释选项,Amazon Q 将允许你寻求对问题的交互式解释,其中 Q 将调用其聊天功能,并提供解释以及你可以将其插入代码中的推荐修复方案。以下截图显示了我们在上一节中查看的相同问题的解释。

图 13.7 – Amazon Q 安全扫描 – 解释发现

图 13.7 – Amazon Q 安全扫描 – 解释发现

这就带我们来到了本章的重要结尾。请随意在自己的项目中尝试这个功能,看看你发现了什么。使用亚马逊 Q 开发者检测和查看问题的机制,以及寻求解释和修复,对所有类型的安全问题都是相同的,因此我们将保持本章简短。

摘要

在本章中,我们讨论了为什么代码安全扫描对每个项目都是至关重要的。没有明确的策略来发现并解决代码中的安全问题,任何软件项目都不能投入生产。

我们随后探讨了亚马逊 Q 开发者提供的不同类型扫描。我们还研究了如何在亚马逊 Q 中启动安全扫描,无论是使用自动扫描选项还是通过项目级别进行扫描。最后,我们检查了亚马逊 Q 如何帮助解决所有发现的问题。

在下一章中,我们将转向使用亚马逊 Q 开发者来在 AWS 环境中创建解决方案。

参考文献

第四部分:在 AWS 上加速构建

在本部分中,我们将探讨亚马逊 Q 开发者如何帮助在 AWS 上更快地构建应用程序。亚马逊 Q 与各种 AWS 服务和工具集成,提供全面的辅助体验。亚马逊 Q 不仅提高了 AWS 构建者的生产力,还提供了集成和无缝的工作体验。

本部分包含以下章节:

  • 第十四章在 AWS 上加速数据工程

  • 第十五章在 AWS 上加速构建解决方案

  • 第十六章在 AWS 上加速 DevOps 流程

第十四章:加速 AWS 上的数据工程

在本章中,我们将探讨以下关键主题:

  • 与 AWS 服务的代码辅助选项

  • 与 AWS Glue 的代码辅助集成

  • 与 Amazon EMR 的代码辅助集成

  • 与 AWS Lambda 的代码辅助集成

  • 与 Amazon SageMaker 的代码辅助集成

  • 与 Amazon Redshift 的代码辅助集成

在本书的前一部分,我们探讨了自动代码生成技术以及代码伴侣与集成开发环境IDEs)的集成,并提供了使用 JetBrains PyCharm IDE 和 Amazon Q Developer 对不同语言进行示例的例子。在本章中,我们将特别关注 Amazon 如何通过与其核心 AWS 服务的集成来扩展其在辅助代码开发者领域的努力。

与 AWS 服务的代码辅助选项

AWS 用户会根据他们项目的独特需求、用例、开发者的技术需求、开发者偏好以及 AWS 服务的特点来选择多样化的服务。为了满足各种开发者角色,例如数据工程师、数据科学家、应用开发者等,AWS 已经将其代码服务与代码辅助功能集成。如果你是使用 AWS 服务的应用构建者、软件开发者、数据工程师或数据科学家,你将经常使用 Amazon SageMaker 作为构建 AI/机器学习ML)项目的平台,Amazon EMR 作为构建大数据处理项目的平台,AWS Glue 用于构建提取、转换和加载ETL)管道,AWS Lambda 作为应用开发的无服务器计算服务。所有这些服务都提供了帮助构建者和开发者编写代码的工具。

图 14.1 – 与 AWS 服务相关的代码辅助选项

图 14.1 – 与 AWS 服务相关的代码辅助选项

截至本书编写时,AWS 已经将 Amazon Q Developer 与 AWS Glue、Amazon EMR、AWS Lambda、Amazon SageMaker 和 Amazon Redshift 集成。然而,我们预计受益于代码辅助的服务列表,如 Amazon Q Developer,将在未来继续扩展。

在以下章节中,我们将深入探讨这些服务的每一个,详细检查它们与 Amazon Q 的集成情况。我们将提供有助于数据工程师在 AWS 上加速开发的示例。

注意

大型语言模型LLMs)本质上是非确定性的,因此你可能不会得到代码快照中显示的相同代码块。然而,从逻辑上讲,生成的代码应该满足要求。

CodeWhisperer是合并到 Amazon Q Developer 服务中的一个旧名称。截至本书编写时,AWS 控制台中的一些集成仍然被称为 CodeWhisperer,这可能在将来发生变化。

与 AWS Glue 的代码辅助集成

在我们深入探讨 AWS Glue 服务的代码辅助支持之前,让我们快速浏览 AWS Glue 的概述。AWS Glue是一个无服务器数据集成服务,旨在简化从各种来源发现、准备、移动和集成数据的过程,满足分析、机器学习和应用开发的需求。在非常高的层面上,AWS Glue 具有以下主要组件,每个组件都有多个功能来支持数据工程师:

  • Glue 数据目录:它是一个集中的技术元数据存储库。它存储有关数据源、转换和目标的数据,提供了一个统一的数据视图。

  • Glue Studio:AWS Glue Studio 提供了一个图形界面,它简化了在 AWS Glue 中创建、执行和监控数据集成作业的过程。此外,它还为高级开发者提供了 Jupyter 笔记本。

AWS Glue Studio 无缝集成到 Amazon Q Developer。让我们通过考虑数据丰富化的一个非常常见的用例来探索其进一步的功能。

AWS Glue 的应用场景

当我们有用例要解决时,我们才能最好地理解任何服务或工具的功能和特性。因此,让我们从一个简单且广泛使用的使用查找表进行数据丰富化的用例开始。

使用查找表进行数据丰富化:在典型场景中,业务分析师通常需要通过查找表将列中找到的代码/ID 的相关细节合并到数据中,以实现数据丰富化。期望的结果是在同一行中包含代码和相应的详细信息,形成一个全面且去规范化(denormalized)的记录。为了解决这个特定的用例,数据工程师开发 ETL 作业来连接表,创建包含去规范化数据集的最终结构。

为了说明这个用例,我们将使用包含诸如接车和下车的日期和时间、接车和下车的位置、行程距离、详细的费用分解、各种费率类型、使用的支付方式和司机报告的乘客数量等详细信息的黄色出租车行程记录。此外,行程信息还包括接车和下车的乘客位置代码。

业务目标是根据接车位置代码增强数据集的区域信息。

为了满足这一需求,数据工程师必须开发一个 PySpark ETL 脚本。此脚本应执行查找与接车位置代码对应的区域信息。随后,工程师通过将黄色出租车行程数据与详细的接车区域信息合并来创建去规范化/丰富化的数据,并将结果保存为文件。

作为代码开发者/数据工程师,您需要将前面的业务目标转换为技术需求。

解决方案蓝图

  1. 编写 PySpark 代码以处理技术需求。

  2. 从 S3 位置读取yellow_tripdata_2023-01.parquet文件到 DataFrame 中,并显示 10 条记录的样本。

  3. 从 S3 位置读取taxi+_zone_lookup.csv文件到 DataFrame 中,并显示 10 条记录的样本。

  4. PULocationID = LocationID上对yellow_tripdata_2023-01.parquettaxi+_zone_lookup.csv执行左外连接,以收集接车区域信息。

  5. 将前面提到的数据集作为 CSV 文件保存在前面的 Amazon S3 桶中的新glue_notebook_yellow_pick_up_zone_output文件夹中。

  6. 为验证,从glue_notebook_yellow_pick_up_zone_output文件夹下载并检查文件。

现在我们已经定义了一个 use case,让我们逐步通过它的解决方案。

数据准备

第一步将是准备数据。为了说明其功能,在接下来的章节中,我们将利用公开的 NY 出租车数据集(TLC 行程记录数据)。www.nyc.gov/site/tlc/about/tlc-trip-record-data.page

首先,我们将在本地机器上下载所需的文件,然后上传到 Amazon 的一个 S3 桶中:

  1. d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2023-01.parquet下载 2023 年 1 月的 Yellow Taxi 行程记录数据 Parquet 文件(yellow_tripdata_2023-01.parquet)到本地机器。

图 14.2 – 2023 年 1 月 Parquet 文件的 Yellow Taxi 行程记录数据

图 14.2 – 2023 年 1 月 Parquet 文件的 Yellow Taxi 行程记录数据

  1. d37ci6vzurychx.cloudfront.net/misc/taxi+_zone_lookup.csv下载 Taxi Zone Lookup Table CSV 文件(taxi+_zone_lookup.csv)到本地机器。

图 14.3 – Zone Lookup Table CSV 文件

图 14.3 – Zone Lookup Table CSV 文件

  1. 在 Amazon S3 中创建两个yellow_taxi_trip_recordszone_lookup文件夹,我们可以在我们的 Glue 笔记本作业中引用它们。

图 14.4 – S3 文件夹结构

图 14.4 – S3 文件夹结构

  1. yellow_tripdata_2023-01.parquet文件上传到yellow_taxi_trip_records文件夹。

图 14.5 – yellow_taxi_tripdata_record 文件

图 14.5 – yellow_taxi_tripdata_record 文件

  1. taxi+_zone_lookup.csv文件上传到zone_lookup文件夹。

图 14.6 – zone_lookup 文件

图 14.6 – zone_lookup 文件

注意

我们将使用相同的 dataset 和 use case,通过 AWS Glue 和 Amazon EMR 来发现解决方案。为了说明目的,我们已经手动准备了数据。然而,在生产环境中,可以通过利用各种 AWS 服务和/或第三方软件来自动化文件传输。

现在,让我们深入探讨使用 Amazon Q 开发者与 AWS Glue Studio 笔记本集成来解决前面用例的详细解决方案。

解决方案 – 使用 AWS Glue Studio 笔记本的 Amazon Q 开发者

让我们首先启用 Amazon Q Developer 与 AWS Glue Studio 笔记本。

启用 AWS Glue Studio 笔记本以使用 Amazon Q Developer 的先决条件

开发者需要修改与 IAM 用户或角色关联的 身份和访问管理IAM)策略,以授予 Amazon Q Developer 在 Glue Studio 笔记本中启动建议的权限。参考 第二章 了解启用 Amazon Q Developer 与 AWS Glue Studio 笔记本的相关细节。

为了实现之前提到的解决方案蓝图,我们将使用在 第三章 中讨论的各种自动代码生成技术。主要,我们将专注于单行提示、多行提示和思维链提示用于自动代码生成。

让我们使用 Amazon Q Developer 在 AWS Glue Studio 笔记本中自动生成端到端脚本。以下是之前定义的解决方案蓝图的逐步解决方案说明。

要求 1

首先,你需要编写一些 PySpark 代码。

在创建 Glue Studio 笔记本时,选择 Spark (Python) 引擎和附加了 Amazon Q Developer 策略的角色。

图 14.7 – 使用 PySpark 创建 Glue Studio 笔记本

图 14.7 – 使用 PySpark 创建 Glue Studio 笔记本

一旦创建笔记本,观察名为 Glue PySpark 的内核。

图 14.8 – 带有 Glue PySpark 内核的 Glue Studio 笔记本

图 14.8 – 带有 Glue PySpark 内核的 Glue Studio 笔记本

要求 2

从 S3 位置读取 yellow_tripdata_2023-01.parquet 文件到 DataFrame 中,并显示 10 条记录的样本。

让我们使用一系列思维提示技术,在多个单元格中使用多个单行提示来实现前面的要求:

Prompt # 1:
# Read s3://<your-bucket-name-here>/yellow_taxi_trip_records/yellow_tripdata_2023-01.parquet file in a dataframe
Prompt # 2:
# display a sample of 10 records from dataframe

图 14.9 – 使用单行提示读取 Yellow Taxi Trip Records 数据的 PySpark 代码

图 14.9 – 使用单行提示读取 Yellow Taxi Trip Records 数据的 PySpark 代码

注意,当输入启用 Amazon Q Developer 的 Glue Studio 笔记本提示时,它将启动代码建议。Q Developer 识别文件格式为 Parquet,并建议使用 spark.read.parquet 方法。你可以直接从笔记本中执行每个单元格/代码。此外,当你移动到下一个单元格时,Q Developer 使用“逐行建议”来建议显示模式。

图 14.10 – 显示模式的逐行建议

图 14.10 – 显示模式的逐行建议

要求 3

从 S3 位置读取 taxi+_zone_lookup.csv 文件到 DataFrame 中,并显示 10 条记录的样本。

我们已经探讨了使用多个单行提示的思维链提示技术来满足 要求 2。现在,让我们尝试使用多行提示来实现前面的要求,并且我们将尝试为 DataFrame 名称定制代码:

Prompt:
"""
Read s3://<your-bucket-name-here>/zone_lookup/taxi+_zone_lookup.csv in a dataframe name zone_df.
Show sample 10 records from zone_df.
"""

图 14.11 – 使用多行提示读取区域查找文件的 PySpark 代码

图 14.11 – 使用多行提示读取区域查找文件的 PySpark 代码

注意,Amazon Q 开发者理解了多行提示背后的上下文,以及提示中指定的特定 DataFrame 名称。它自动生成了多行代码,DataFrame 名称作为 zone_df,文件格式为 CSV,建议使用 spark.read.csv 方法读取 CSV 文件。您可以直接从笔记本中执行每个单元格/代码。

要求 4

pulocationid = LocationID 上对 yellow_tripdata_2023-01.parquettaxi+_zone_lookup.csv 执行左外连接以收集取货区域信息。

我们将继续使用多行提示和一些代码定制来实现前面的要求:

Prompt:
"""
Perform a left outer join on dataframe df and dataframe zone_df on PULocationID = LocationID to save in dataframe name yellow_pu_zone_df.
Show sample 10 records from yellow_pu_zone_df and show schema.
"""

图 14.12 – 左外连接 df 和 dataframe zone_df – 多行提示

图 14.12 – 左外连接 df 和 dataframe zone_df – 多行提示

现在,让我们回顾代码执行返回的 DataFrame 的模式。

图 14.13 – 左外连接 df 和 dataframe zone_df – 显示模式

图 14.13 – 左外连接 df 和 dataframe zone_df – 显示模式

注意,正如多行提示中所述,Amazon Q 开发者理解了上下文,并自动生成了无错误的代码,与我们提供的有关 yellow_pu_zone_df DataFrame 名称的精确规格完全一致。您可以直接从笔记本中执行每个单元格/代码。

要求 5

将前面的数据集保存为 CSV 文件,在前面 Amazon S3 桶中的新文件夹 glue_notebook_yellow_pick_up_zone_output 中。

由于前面的要求很简单,可以封装在单个句子中,我们将使用单行提示来生成代码,并且我们还将包括标题以方便验证:

Prompt:
# Save dataframe yellow_pu_zone_df as CSV file at location s3://<your-bucket-name-here>/tlc-dataset-ny-taxi/glue_notebook_yellow_pick_up_zone_output/ with header information

图 14.14 – 保存包含丰富取货位置数据的 CSV 文件

图 14.14 – 保存包含丰富取货位置数据的 CSV 文件

要求 6

为了验证,从 glue_notebook_yellow_pick_up_zone_output 文件夹下载并检查文件。

让我们去 Amazon S3 控制台验证文件。选择其中一个文件并点击 下载

图 14.15 – 保存包含丰富取货位置数据的 CSV 文件

图 14.15 – 保存包含丰富取货位置数据的 CSV 文件

下载文件后,您可以使用任何文本编辑器来查看文件内容。

图 14.16 – 验证包含丰富取货位置数据的 CSV 文件

图 14.16 – 验证包含丰富取货位置数据的 CSV 文件

注意到 CSV 文件根据取货位置 ID 有额外的区域信息列。在下一节中,我们将探索 Amazon Q 开发者与 AWS Glue 的集成,并使用聊天助手技术。

挑战思考

为了满足要求 6,如果你感兴趣,尝试使用相同的 Glue Studio 笔记本来读取 CSV 文件,显示样本记录,并添加标题。

提示:使用多行提示技术,类似于我们在读取区域查找文件时使用的技术。

解决方案 – Amazon Q 开发者与 AWS Glue

Amazon Q 开发者提供了 AWS Glue 控制台中的聊天式界面。现在,让我们探索 Amazon Q 开发者与 AWS Glue 之间的集成,以及我们使用 Amazon Q 开发者和 AWS Glue Studio 笔记本集成所处理的相同用例和解决方案蓝图。

现在,让我们看看启用 Amazon Q 与 AWS Glue 的先决条件。

要启用 Amazon Q 开发者与 AWS Glue 的集成,我们需要更新 IAM 策略。请参阅第二章以获取在 AWS Glue 中启动与 Amazon Q 交互的更多详细信息。

现在,让我们深入探讨 Amazon Q 开发者与 AWS Glue Studio 集成的前述用例。

为了满足提到的要求,我们将主要使用在第第三章中讨论的聊天伴侣。

这里是一个逐步的解决方案演示,我们将使用它作为前面所有要求的提示:

Instruction to Amazon Q:
Write a Glue ETL job.
Read the 's3://<your bucket name>/yellow_taxi_trip_records/yellow_tripdata_2023-01.parquet' file in a dataframe and display a sample of 10 records.
Read the 's3://<your bucket name>/zone_lookup/taxi+_zone_lookup.csv' file in a dataframe and display a sample of 10 records.
Perform a left outer join on 'yellow_tripdata_2023-01.parquet' and 'taxi+_zone_lookup.csv' on DOLocationID = LocationID to gather pick-up zone information.
Save the above dataset as a CSV file in above Amazon S3 bucket in a new folder 'glue_notebook_yellow_drop_off_zone_output'.

图 14.17 – Amazon Q 开发者建议的 AWS Glue ETL 代码 – 第一部分

图 14.17 – Amazon Q 开发者建议的 AWS Glue ETL 代码 – 第一部分

你可以看到,根据提供给 Amazon Q 的指令,它生成了 ETL 代码的框架。它生成了使用 Glue-PySpark 库的代码结构,一个创建动态 dataframe 以读取 parquet 文件的 s3node,以及一个写入动态 dataframe 以写入 CSV 文件的 s3node。

图 14.18 – Amazon Q 开发者建议的 AWS Glue ETL 代码 – 第二部分

图 14.18 – Amazon Q 开发者建议的 AWS Glue ETL 代码 – 第二部分

注意到 Amazon Q 还提供了技术细节来解释脚本流程。这也可以用来满足脚本中的文档需求。

图 14.19 – Amazon Q 开发者建议的 AWS Glue ETL 代码 – 脚本摘要

图 14.19 – Amazon Q 开发者建议的 AWS Glue ETL 代码 – 脚本摘要

具有编码经验的数据工程师可以轻松地参考脚本摘要和脚本框架来编写端到端的脚本以满足解决方案蓝图。由于 LLMs 本质上是非确定性的,所以你可能不会得到代码快照中显示的相同代码块。

根据前面的用例说明,AWS Glue 与 Amazon Q 开发者集成并使用提示技术可以由经验相对较低的数据工程师使用,而使用聊天助手与 AWS Glue 集成的 Amazon Q 开发者可以由经验相对较多的 ETL 开发者利用。

摘要 – Amazon Q 开发者与 AWS Glue Studio 笔记本

如上图所示,我们只需提供具有特定要求的提示,就可以自动生成端到端、无错误且可执行的代码。Amazon Q 开发者与 AWS Glue Studio 笔记本集成,理解上下文并自动生成可以直接从笔记本中运行的 PySpark 代码,无需预先配置任何硬件。这对许多数据工程师来说是一个重大的进步,使他们摆脱了与 PySpark 库、方法和语法相关的技术复杂性。

接下来,我们将探讨与 Amazon EMR 的代码辅助集成。

与 Amazon EMR 的代码辅助集成

在我们深入探讨 Amazon EMR 的代码辅助支持的细节之前,让我们快速浏览一下 Amazon EMR 的概述。Amazon EMR 是一个基于云的大数据平台,简化了各种大数据框架(如 Apache Hadoop、Apache Spark、Apache Hive 和 Apache HBase)的部署、管理和扩展。在较高层次上,Amazon EMR 包含以下主要组件,每个组件都有多个功能来支持数据工程师和数据科学家:

  • EMR on EC2/EKS:Amazon EMR 服务提供了两种选项,即 EMR on EC2 和 EMR on EKS,允许客户配置集群。Amazon EMR 简化了数据分析师和工程师执行批量作业和交互式工作负载的过程。

  • EMR Serverless:Amazon EMR Serverless 是 Amazon EMR 内的一个无服务器替代方案。使用 Amazon EMR Serverless,用户可以访问 Amazon EMR 提供的完整功能集和优势,而无需对集群规划和管理工作具有专业知识。

  • EMR Studio:EMR Studio 支持数据工程师和数据科学家在 IDE 内开发、可视化和调试应用程序。它还提供了一个 Jupyter Notebook 环境用于交互式编码。

Amazon EMR Studio 的用例

为了简单和便于跟踪 Amazon Q 开发者与 Amazon EMR 的集成,我们将使用本章在 代码辅助集成与 AWS Glue 部分中使用的相同用例和数据。请参阅 AWS Glue 的用例 部分,该部分涵盖了有关解决方案蓝图和数据准备的相关细节。

解决方案 – Amazon Q 开发者与 Amazon EMR Studio

让我们先启用 Amazon Q 开发者与 Amazon EMR Studio。要启用 Amazon Q 开发者与 Amazon EMR Studio 的集成,我们需要更新 IAM 策略。

启用 Amazon Q 开发者与 Amazon EMR Studio 的先决条件

开发者需要修改与该角色关联的 IAM 策略,以授予 Amazon Q 开发者在 EMR Studio 中发起推荐的权限。请参考第二章以获取有关在 Amazon EMR Studio 中与 Amazon Q 开发者进行交互的更多详细信息。

为了满足提到的需求,我们将使用在 第三章 中讨论的各种自动代码生成技术。主要,我们将重点关注单行提示、多行提示和思考链提示用于自动代码生成技术。

让我们使用 Amazon Q 开发者来自动生成端到端脚本,这些脚本可以在 Amazon EMR Studio 中实现以下需求。以下是解决方案的逐步解决方案概述。

备注

当涉及到 Amazon Q 开发者推荐代码时,你可以观察到 Glue Studio 笔记本和 EMR Studio 笔记本之间有很多相似之处。

需求 1

你将需要编写 PySpark 代码来处理技术需求。

一旦你打开 Amazon EMR Studio,使用 启动器笔记本 部分选择 PySpark

图 14.20 – 使用 PySpark 创建 EMR Studio 笔记本

图 14.20 – 使用 PySpark 创建 EMR Studio 笔记本

一旦创建笔记本,你将看到一个名为 PySpark 的内核。内核是一个在后台运行的独立进程,它执行你在笔记本中编写的代码。有关更多信息,请参阅本章末尾的 参考文献 部分。

图 14.21 – 带有 PySpark 内核的 EMR Studio 笔记本

图 14.21 – 带有 PySpark 内核的 EMR Studio 笔记本

我已经将一个集群附加到我的笔记本上了,但你可以在 AWS 文档中探索不同的选项来将计算附加到 EMR Studio,请参阅docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-create-use-clusters.html

需求 2

从 S3 位置读取 yellow_tripdata_2023-01.parquet 文件到 DataFrame 中,并显示 10 条记录的样本。

让我们使用一个在不同单元格中包含多个单行提示的思考链提示技术来实现这个需求:

Prompt # 1:
# Read s3://<your-bucket-name-here>/yellow_taxi_trip_records/yellow_tripdata_2023-01.parquet file in a dataframe
Prompt # 2:
# Display a sample of 10 records from dataframe

图 14.22 – 使用单行提示读取 Yellow Taxi Trip Records 数据的 PySpark 代码

图 14.22 – 使用单行提示读取 Yellow Taxi Trip Records 数据的 PySpark 代码

注意,当输入 Amazon Q 开发者启用的 EMR Studio 笔记本提示时,它将启动代码推荐。Amazon Q 开发者识别文件格式为 Parquet,并建议使用 spark.read.parquet 方法。你可以直接从笔记本中执行每个单元格/代码。此外,当你移动到下一个单元格时,Amazon Q 开发者利用“逐行推荐”来建议显示模式。

需求 3

从 S3 位置读取 taxi+_zone_lookup.csv 文件到 DataFrame 中,并显示 10 条记录的样本。

我们已经探讨了使用多个单行提示的思考链提示技术来处理 需求 2。现在,让我们尝试一个多行提示来实现这个需求,并且我们将尝试为 DataFrame 名称定制代码:

Prompt:
"""
Read s3://<your-bucket-name-here>/zone_lookup/taxi+_zone_lookup.csv in a dataframe name zone_df. Show sample 10 records from zone_df.
"""

图 14.23 – 使用多行提示读取区域查找文件的 PySpark 代码

图 14.23 – 使用多行提示读取区域查找文件的 PySpark 代码

观察到 Amazon Q Developer 理解了多行提示背后的上下文,以及提示中指定的特定 DataFrame 名称。它自动生成了多行代码,DataFrame 名称为zone_df,文件格式为 CSV,建议使用spark.read.csv方法读取 CSV 文件。您可以直接从笔记本中执行每个单元格/代码。

需求 4

yellow_tripdata_2023-01.parquettaxi+_zone_lookup.csv上执行左外连接,基于pulocationid = LocationID来收集接车区域信息。

我们将继续使用多行提示和一些代码定制来实现上述需求:

Prompt:
"""
Perform a left outer join on dataframe df and dataframe zone_df on PULocationID = LocationID to save in dataframe name yellow_pu_zone_df.
Show sample 10 records from yellow_pu_zone_df and show schema.
"""

图 14.24 – 左外连接 df 和 dataframe zone_df – 多行提示

图 14.24 – 左外连接 df 和 dataframe zone_df – 多行提示

现在,让我们回顾一下代码打印出的 DataFrame 的架构。

图 14.25 – 左外连接 df 和 dataframe zone_df – 显示架构

图 14.25 – 左外连接 df 和 dataframe zone_df – 显示架构

观察到,正如多行提示中所述,Amazon Q Developer 理解了上下文,并自动生成了无错误的代码,这些代码与我们提供的有关名为yellow_pu_zone_df的 DataFrame 的精确规格完全一致。您可以直接从笔记本中执行每个单元格/代码。

需求 5

将上述数据集保存为 CSV 文件,存放在之前 Amazon S3 桶中的新文件夹glue_notebook_yellow_pick_up_zone_output中。

由于这个需求很简单,可以封装在单个句子中,我们将使用单行提示来生成代码,并且我们还将包括一个标题以方便验证:

Prompt:
# Save dataframe yellow_pu_zone_df as CSV file at location s3://<your-bucket-name-here>/tlc-dataset-ny-taxi/glue_notebook_yellow_pick_up_zone_output/ with header information

图 14.26 – 保存包含丰富接车位置数据的 CSV 文件

图 14.26 – 保存包含丰富接车位置数据的 CSV 文件

需求 6

为了验证,从glue_notebook_yellow_pick_up_zone_output文件夹下载并检查文件。

让我们去 Amazon S3 控制台验证文件。选择其中一个文件,然后点击下载

图 14.27 – 验证最终结果集 – Amazon Q Developer 与 Amazon EMR Studio

图 14.27 – 验证最终结果集 – Amazon Q Developer 与 Amazon EMR Studio

下载后,您可以使用文本编辑器来查看文件内容。

图 14.28 – 验证 Amazon Q Developer 与 Amazon EMR Studio 的 CSV 文件内容

图 14.28 – 验证 Amazon Q Developer 与 Amazon EMR Studio 的 CSV 文件内容

观察到 CSV 文件有基于接车位置 ID 的额外区域信息列。

摘要 – Amazon Q Developer 与 Amazon EMR Studio

如所示,我们只需提供具有特定要求的提示,就可以自动生成端到端、无错误且可执行的代码。Amazon Q 开发者,与 Amazon EMR Studio 笔记本集成,理解上下文并自动生成可以直接从笔记本运行的 PySpark 代码。这对许多数据工程师来说是一个重大进步,使他们免于担心与 PySpark 库、方法和语法相关的技术复杂性。

挑战思考

要满足 要求 6,如果您感兴趣,尝试利用相同的 EMR Studio 笔记本读取 CSV 文件、显示样本记录并添加标题。

提示:使用多行提示技术,类似于我们在读取 Zone Lookup 文件时使用的技术。

在下一节中,我们将考虑应用程序开发人员的角色,以探索 AWS Lambda 与代码辅助的集成。

AWS Lambda 与代码辅助的集成

在我们深入探讨 AWS Lambda 服务代码辅助支持之前,让我们快速了解一下 AWS Lambda 的概述。AWS Lambda 是一种无服务器计算服务,允许用户在不配置或管理服务器的情况下运行代码。使用 Lambda,您可以从 Lambda 控制台上传您的代码或使用可用的编辑器。在代码运行期间,根据提供的配置,服务会自动处理执行所需的计算资源。它旨在高度可扩展、成本效益高,且适用于事件驱动型应用。

AWS Lambda 支持多种编程语言,包括 Node.js、Python、Java、Go 和 .NET Core,允许您选择最适合您应用程序的语言。Lambda 可以轻松集成到其他 AWS 服务中,使您能够构建复杂且可扩展的架构。它与 Amazon S3、DynamoDB 和 API Gateway 等服务无缝协作。

AWS Lambda 控制台与 Amazon Q 开发者集成,使开发者能够轻松获得编码辅助/建议。

AWS Lambda 的用例

让我们从转换文件格式的一个简单且广泛使用的用例开始。

文件格式转换:在典型场景中,一旦从外部团队和/或来源收到文件,它可能不在目标位置,也不具有应用程序期望的所需名称。在这种情况下,可以使用 AWS Lambda 快速将文件从源位置复制到目标位置,并在目标位置重命名文件。

为了说明这个用例,让我们将 NY Taxi Zone 查找文件从源位置 (s3://<your-bucket-name>/zone_lookup/) 复制到目标位置 (s3://<your-bucket-name>/source_lookup_file/)。同时,从文件名中删除特殊字符 (+),将其保存为 taxi_zone_lookup.csv

为了满足这一要求,应用程序开发者必须开发一个 Python 脚本。此脚本应将区域查找文件从源位置复制并重命名到目标位置。

作为代码开发者/数据工程师,您需要将前面的业务目标转换为解决方案蓝图。

解决方案蓝图

  1. 编写一个 Python 脚本来处理技术需求。

  2. taxi+_zone_lookup.csv 文件从 S3 复制到 zone_lookup 文件夹,然后到 source_lookup_file 文件夹。

  3. 在复制过程中,将目标 source_lookup_file 文件夹中的 taxi+_zone_lookup.csv 改为 taxi_zone_lookup.csv

  4. 为了验证,检查 source_lookup_file/taxi_zone_lookup.csv 文件的内容。

既然我们已经定义了用例,让我们逐步分析其解决方案。

数据准备

我们正在使用本章在“与 AWS Glue 集成的代码辅助”部分中配置的相同查找文件。请参阅“AWS Glue 用例”部分,该部分涵盖了与数据准备相关的详细信息。

解决方案 – Amazon Q 开发者与 AWS Lambda

让我们先启用 AWS Lambda 控制台中的 Amazon Q 开发者。为了启用 AWS Lambda 与 Amazon Q 开发者的集成,我们需要更新 IAM 策略。

启用 Amazon Q 开发者与 AWS Lambda 的先决条件

开发者需要修改与 IAM 用户或角色关联的 IAM 策略,以授予 Amazon Q 开发者通过 AWS Lambda 控制台发起推荐的权限。请参考第二章以获取有关在 AWS Lambda 中与 Amazon Q 开发者进行交互的更多详细信息。

要让 Amazon Q 开发者开始代码建议,请确保选择工具 | Amazon CodeWhisperer 代码建议

图 14.29 – AWS Lambda 控制台中的 Amazon Q 开发者用于 Python 运行时

图 14.29 – AWS Lambda 控制台中的 Amazon Q 开发者用于 Python 运行时

为了满足提到的要求,我们将使用在第 第三章 中讨论的自动代码生成技术。主要,我们将关注多行提示自动代码生成。让我们使用 Amazon Q 开发者来自动生成一个端到端脚本,该脚本可以在 AWS Lambda 控制台和 EMR Studio 中实现以下要求。以下是解决方案的逐步解决方案概述。

需求 1

您需要编写一个 Python 脚本来处理技术需求。

一旦打开 AWS Lambda 控制台,使用启动器选择一个 Python 运行时。

图 14.30 – 从 AWS Lambda 创建 Python 运行时

图 14.30 – 从 AWS Lambda 创建 Python 运行时

一旦成功创建 Lambda 函数,您会注意到 AWS Lambda 创建了一个包含一些示例代码的 lambda_function.py 文件。对于这个练习,我们可以安全地删除示例代码,因为我们将会使用 Amazon Q 开发者来生成端到端代码。

图 14.31 – AWS Lambda 控制台与 Python 运行时的 Amazon Q 开发者

图 14.31 – AWS Lambda 控制台与 Python 运行时的 Amazon Q 开发者

让我们将 要求 23 结合起来,因为我们计划使用多行提示。

要求 2 和 3

taxi+_zone_lookup.csv 文件从 S3 复制到 source_lookup_file 文件夹中的 zone_lookup 文件夹。

在复制过程中,将目标 source_lookup_file 文件夹中的文件名从 taxi+_zone_lookup.csv 更改为 taxi_zone_lookup.csv

让我们使用多行提示来自动生成代码:

Prompt:
"""
write a lambda function.
copy s3://<your-bucket-name>/zone_lookup/taxi+_zone_lookup.csv
as s3://<your-bucket-name>/source_lookup_file/taxi_zone_lookup.csv
"""

图 14.32 – Amazon Q 开发者为 AWS Lambda 控制台生成的代码

图 14.32 – Amazon Q 开发者为 AWS Lambda 控制台生成的代码

观察到 Amazon Q 开发者创建了一个 lambda_handler 函数,并添加了 返回代码 200 和成功消息。

要求 4

为了验证,请检查 source_lookup_file/taxi_zone_lookup.csv 文件的内容。

让我们部署并使用测试事件来运行 Amazon Q 开发者生成的 Lambda 代码。

图 14.33 – 部署 AWS Lambda 代码

图 14.33 – 部署 AWS Lambda 代码

现在,让我们通过转到 测试 选项卡并点击 测试 按钮来测试代码。由于我们没有向此 Lambda 函数传递任何值,因此 测试 选项卡中的 JSON 事件值在我们的情况下并不重要。

图 14.34 – 测试 AWS Lambda 代码

图 14.34 – 测试 AWS Lambda 代码

一旦 Lambda 代码成功执行,它将为您提供执行详情。观察代码执行成功,并显示带有成功消息的返回代码。

图 14.35 – AWS Lambda 代码执行

图 14.35 – AWS Lambda 代码执行

让我们使用 Amazon S3 控制台下载并验证 s3://<your-bucket-name>/source_lookup_file/taxi_zone_lookup.csv

图 14.36 – 来自 Amazon S3 的目标查找文件

图 14.36 – 来自 Amazon S3 的目标查找文件

图 14.37 – 区域查找文件

图 14.37 – 区域查找文件

摘要 – Amazon Q 开发者与 AWS Lambda

如上图所示,我们只需提供具有特定要求的提示,就可以自动生成端到端、无错误且可执行的代码。Amazon Q 开发者,与 AWS Lambda 集成,根据所选的 Lambda 运行时环境自动生成基于返回代码的 lambda_handle() 函数。这种集成可以帮助那些编码经验相对有限的开发者自动生成 Lambda 函数,且代码更改最小或无更改。

继续以应用程序开发者的身份,接下来,我们将探索数据科学家角色,以研究代码辅助与 Amazon SageMaker 的集成。

与 Amazon SageMaker 的代码辅助集成

在我们开始深入研究 Amazon SageMaker 服务的代码辅助支持之前,让我们快速浏览一下 Amazon SageMaker 的概述。Amazon SageMaker是一个完全托管的服务,简化了在规模上构建、训练和部署机器学习模型的过程。它旨在使开发人员和数据科学家更容易构建、训练和部署机器学习模型,而无需在机器学习或深度学习方面具有广泛的专长。它具有多个功能,如端到端工作流程、内置算法、自定义模型训练、自动模型调优、真实数据、边缘管理器、增强人工智能和托管笔记本等,仅举几例。Amazon SageMaker 与其他 AWS 服务集成,例如 Amazon S3 用于数据存储、AWS Lambda 用于无服务器推理和 Amazon CloudWatch 用于监控。

Amazon SageMaker Studio 托管托管笔记本,这些笔记本与 Amazon Q Developer 集成。

Amazon SageMaker 的应用场景

让我们使用一个与客户流失预测相关的非常常见的商业用例,数据科学家使用 XGBoost 算法。

客户流失预测在商业中涉及利用数据和算法来预测哪些客户有风险停止使用产品或服务。术语“流失”通常表示客户结束订阅、停止购买或停止服务使用。客户流失预测的主要目标是识别这些客户在流失之前,使企业能够实施主动措施以保留客户。

我们将使用公开可用的直接营销银行数据来展示 Amazon Q Developer 对数据收集、特征工程、模型训练和模型部署等里程碑步骤的支持。

通常,数据科学家需要编写一个复杂的脚本,从 Amazon SageMaker Studio 笔记本中执行所有上述里程碑步骤。

解决方案蓝图

  1. 设置一个包含所需库集合的环境。

  2. 数据收集:从sagemaker-sample-data-us-west-2.s3-us-west-2.amazonaws.com/autopilot/direct_marketing/bank-additional.zip下载并解压缩直接营销银行数据。

  3. 特征工程:为了展示功能,我们将执行以下常用的特征工程步骤:

    • 使用默认值操纵列数据

    • 删除额外列

    • 执行独热编码

  4. 模型训练:让我们使用 XGBoost 算法:

    • 重新排列数据以创建训练、验证和测试数据集/文件

    • 使用 XGBoost 算法使用训练数据集训练模型

  5. 模型部署:将模型作为端点部署以允许推理。

在前面的解决方案蓝图示例中,我们展示了通过处理常用里程碑步骤来集成 Amazon Q 开发者与 Amazon SageMaker。然而,根据您数据和企业需求的不同复杂度,可能需要额外的步骤。

数据准备

我们将利用公开托管在 AWS 上的直接营销银行数据集。完整数据集可在 sagemaker-sample-data-us-west-2.s3-us-west-2.amazonaws.com/autopilot/direct_marketing/bank-additional.zip 获取。所有数据准备步骤都将作为数据收集要求的一部分在 SageMaker Studio 笔记本中执行。

解决方案 – Amazon Q 与 Amazon SageMaker Studio

首先,让我们启用 Amazon Q 开发者与 Amazon SageMaker Studio。以下先决条件是必需的,以便允许 Amazon Q 开发者在 Amazon SageMaker Studio 内自动生成代码。

启用 Amazon Q 开发者与 Amazon SageMaker Studio 的先决条件

开发者需要修改与 IAM 用户或角色关联的 IAM 策略,以授予 Amazon Q 开发者在 Amazon SageMaker Studio 笔记本中启动推荐的权限。请参阅 第二章 了解启用 Amazon Q 开发者与 Amazon SageMaker Studio 笔记本的详细信息。

一旦 Amazon Q 开发者为 Amazon SageMaker Studio 笔记本激活,从 启动器中选择 创建笔记本以验证 Amazon Q 开发者是否已启用。

图 14.38 – SageMaker Studio 中启用了 Amazon Q 开发者的笔记本

图 14.38 – SageMaker Studio 中启用了 Amazon Q 开发者的笔记本

为了满足上述要求,我们将使用在第 第四章 中讨论的自动代码生成技术。主要,我们将关注单行提示、多行提示和思维链提示,以实现自动代码生成技术。

要求 1

设置包含所需库的环境。

让我们使用单行提示:

Prompt 1:
# Fetch this data by importing the SageMaker library
Prompt 2:
# Defining global variables BUCKET and ROLE that point to the bucket associated with the Domain and it's execution role

图 14.39 – Amazon Q 开发者 – SageMaker Studio 设置环境

图 14.39 – Amazon Q 开发者 – SageMaker Studio 设置环境

注意,根据我们的提示,Amazon Q 开发者生成了带有默认库和变量的代码。然而,根据您的需求和账户设置,您可能需要更新/添加代码。

要求 2

对于数据收集,从 sagemaker-sample-data-us-west-2.s3-us-west-2.amazonaws.com/autopilot/direct_marketing/bank-additional.zip 下载并解压直接营销银行数据。

我们将专注于多行提示来实现这一要求:

Prompt:
'''Using the requests library download the ZIP file from
the url "https://sagemaker-sample-data-us-west-2.s3-us-west-2.amazonaws.com/autopilot/direct_marketing/bank-additional.zip"
and save it to current directory and unzip the archive
'''

图 14.40 – Amazon Q 开发者 – SageMaker Studio 数据收集

图 14.40 –亚马逊 Q 开发者 – SageMaker Studio 数据收集

要求 3

为了展示特征工程的功能,我们将执行以下常用的特征工程步骤,这将帮助我们提高模型精度:

  1. 使用默认值操纵列数据。

  2. 删除额外列。

  3. 执行独热编码。

我们将专注于多行提示来实现这一要求:

Prompt #1:
'''
Create a new dataframe with column no_previous_contact and populates from existing dataframe column pdays using numpy when the condition equals to 999, 1, 0 and show the table
'''
Prompt # 2:
# do one hot encoding for full_data
Prompt # 3:
'''
Drop the columns 'duration', emp.var.rate', 'cons.price.idx', 'cons.conf.idx', 'euribor3m' and 'nr.employed'
from the dataframe and create a new dataframe with name model_data
'''

我们得到以下屏幕。

图 14.41 –亚马逊 Q 开发者 – SageMaker Studio 特征工程

图 14.41 –亚马逊 Q 开发者 – SageMaker Studio 特征工程

现在,让我们继续使用生成的代码进行模型训练、测试和验证:

Prompt # 4:
#split model_data for train, validation, and test
Prompt # 5:
'''
for train_data move y_yes as first column.
Drop y_no and y_yes columns from train_data.
save file as train.csv
'''
Prompt # 6:
'''
for validation_data move y_yes as first column.
Drop y_no and y_yes columns from validation_data.
save file as validation.csv
'''

图 14.42 –亚马逊 Q 开发者 – SageMaker Studio 特征工程

图 14.42 –亚马逊 Q 开发者 – SageMaker Studio 特征工程

注意,对于单行和多行提示,我们需要提供更多具体的细节来生成预期的代码。

要求 4

模型训练:让我们使用 XGBoost 算法:

  • 重新排列数据以创建训练、验证和测试数据集/文件

  • 使用 XGBOOST 算法使用训练数据集训练模型

我们将专注于多行提示来实现这一要求,以启动模型训练活动:

Prompt #1:
''' upload train.csv to S3 Bucket train/train.csv prefix.
upload validation.csv to S3 Bucket validation/validation.csv prefix '''
Prompt #2:
# pull latest xgboost model as a CONTAINER
Prompt #3:
# create TrainingInput from s3 train/train.csv and validation/validation.csv
Prompt #3:
# create training job with hyper paramers max_depth=5, eta=0.2, gamma=4, min_child_weight=6, subsample=0.8, objective='binary:logistic', num_round=100

图 14.43 –亚马逊 Q 开发者 – SageMaker Studio 模型训练

图 14.43 –亚马逊 Q 开发者 – SageMaker Studio 模型训练

要求 5

将模型部署为端点以允许推理。

我们将专注于单行提示来实现这一要求:

Prompt #1:
# Deploy a model that's hosted behind a real-time endpoint

图 14.44 –亚马逊 Q 开发者 -SageMaker studio 模型训练

图 14.44 –亚马逊 Q 开发者 -SageMaker studio 模型训练

注意到亚马逊 Q 开发者使用默认配置的instance_typeinitial_instance_count。您可以通过点击亚马逊 SageMaker 控制台中的推理下拉菜单并选择端点选项来检查托管模型。

在前面的示例中,我们广泛使用了单行提示、多行提示和思维链提示技术。如果您想使用聊天式界面,可以利用以下截图所示的亚马逊 Q 开发者聊天式界面。

图 14.45 –亚马逊 Q 开发者 -SageMaker studio 聊天式界面

图 14.45 –亚马逊 Q 开发者 -SageMaker studio 聊天式界面

摘要 – 亚马逊 Q 开发者与亚马逊 SageMaker

如所示,亚马逊 Q 开发者与亚马逊 SageMaker Studio 笔记本 IDE 无缝集成,能够自动生成端到端、无错误且可执行的代码。通过提供具有特定要求的提示,Q 开发者可以在 SageMaker Studio 笔记本中自动生成代码,包括数据收集、特征工程、模型训练和模型部署等关键里程碑步骤。

虽然数据科学家可以利用此集成来生成代码块,但可能需要进行定制。必须在提示中提供特定细节以调整代码。在某些情况下,可能需要调整以符合企业标准、业务需求和配置。用户应具备提示工程的专业知识、熟悉脚本编写,并在部署到生产之前进行彻底测试,以确保脚本满足业务需求。

现在,让我们深入探讨数据分析师如何在处理 Amazon Redshift 时使用代码辅助。

与 Amazon Redshift 的代码辅助集成

在我们深入探讨 Amazon Redshift 服务的代码辅助支持之前,让我们快速浏览一下 AWS Redshift 的概述。Amazon Redshift是一个由人工智能驱动的、完全托管、基于云的数据仓库服务。它旨在使用标准 SQL 查询进行高性能分析和处理大量数据集。

Amazon Redshift 针对数据仓库进行了优化,提供了一种快速且可扩展的解决方案,用于处理和分析大量结构化数据。它使用列式存储和大规模并行处理MPP)架构,将数据和查询分布在多个节点上,以提供复杂查询的高性能。这种架构允许它轻松地从几百吉字节扩展到拍字节的数据,使组织能够随着需求的变化扩展其数据仓库。它集成了各种数据源,允许您从多个来源加载数据,包括 Amazon S3、Amazon DynamoDB 和 Amazon EMR。

注意

为了查询数据,Amazon Redshift 还提供了一个查询编辑器。Redshift 查询编辑器 v2 有两种与数据库交互的模式:编辑器笔记本。代码辅助集成在 Redshift 查询编辑器 v2 的笔记本模式下。

Amazon Redshift 的用例

让我们从转换文件格式的一个简单且广泛使用的用例开始。

识别顶尖表现者:在典型的业务用例中,分析师对根据某些标准识别顶尖表现者感兴趣。

为了说明这个用例,我们将使用公开可用的tickit数据库,该数据库与 Amazon Redshift 一起提供。有关tickit数据库的更多信息,请参阅本章末尾的参考文献部分。

分析师希望识别大多数场馆所在的最顶级州。

为了满足这一需求,分析师开发者必须开发 SQL 查询来与tickit数据库中的不同表进行交互。

解决方案蓝图

由于我们正在考虑数据分析师的角色并使用代码辅助来生成代码,我们不需要进一步将业务需求分解为解决方案蓝图。这使得分析师能够与数据库交互,而无需涉及表结构和关系细节:

  • 编写 SQL 语句以识别大多数场馆所在的顶级州

数据准备

我们将使用公开可用的 tickit 数据库,该数据库随 Amazon Redshift 一起提供。让我们使用 Redshift 查询编辑器 v2 导入数据:

  1. 从 Redshift 查询编辑器 2 连接到您的 Amazon Redshift 集群或无服务器端点。

  2. 然后,选择 sample_data_dev 并点击 tickit

图 14.46 – 使用 Amazon Redshift 导入 tickit 数据库

图 14.46 – 使用 Amazon Redshift 导入 tickit 数据库

解决方案 – Amazon Q 与 Amazon Redshift

首先,让我们启用 Amazon Q 与 Amazon Redshift。为了允许 Amazon Q 在 Amazon Redshift 内生成 SQL,管理员需要在 Redshift 查询编辑器 v2 的 笔记本 中启用 生成 SQL 选项。请参考 第三章 获取有关在 Amazon Redshift 中启动与 Amazon Q 交互的更多详细信息。

启用 Amazon Q 与 Amazon Redshift 的先决条件

让我们了解启用 Redshift 查询编辑器 v2 中 笔记本 内的 生成 SQL 选项所需的步骤。

  1. 使用管理员权限登录以连接到您的 Amazon Redshift 集群或无服务器端点。

  2. 选择 笔记本

图 14.47 – 使用 Redshift 查询编辑器 v2 的笔记本

图 14.47 – 使用 Redshift 查询编辑器 v2 的笔记本

  1. 选择 生成 SQL,然后勾选 生成 SQL 复选框,并点击 保存

图 14.48 – 使用 Redshift 查询编辑器 v2 启用生成 SQL

图 14.48 – 使用 Redshift 查询编辑器 v2 启用生成 SQL

为了满足上述要求,我们将使用在第 第四章 中讨论的自动代码生成技术。主要,我们将关注自动代码生成的聊天伴侣。

要求 1

编写 SQL 语句以识别大多数场馆所在的顶级州。

使用 Amazon Q 的交互会话提出以下问题:

Q:Which state has most venues?

注意,我们没有向 Amazon Q 开发者提供数据库详细信息,但它仍然能够识别所需的表,tickit.venue。它生成了包含 Group byOrder byLimit 的完整可执行端到端查询以满足要求。为了使分析师更容易运行查询,代码辅助已集成到笔记本中。只需点击 添加到笔记本,SQL 代码就会在用户可以直接运行的笔记本单元格中可用。

图 14.49 – 使用 Amazon Redshift 代码辅助进行交互

图 14.49 – 使用 Amazon Redshift 代码辅助进行交互

摘要 – Amazon Q 与 Amazon Redshift

如演示所示,我们可以通过聊天式界面与 Amazon Q 交互,轻松生成端到端、无错误且可执行的 SQL。Amazon Q 与 Amazon Redshift 查询编辑器 v2 中的笔记本无缝集成。用户无需向代码助手提供数据库和/或表详情。它自动识别必要的表并生成满足提示中指定要求的 SQL 代码。此外,为了方便分析师运行查询,它直接集成到笔记本中。Amazon Q 与 Amazon Redshift 结合,证明是数据分析师的有价值资产。在许多情况下,数据分析师无需将业务需求转换为技术步骤。他们可以利用自动生成 SQL 的功能,无需深入了解数据库和表详情。

摘要

在本章中,我们最初介绍了不同 AWS 服务与代码伴侣的集成,以帮助用户自动生成代码。然后,我们探讨了 Amazon Q 开发者与一些核心服务的集成,例如 AWS Glue、Amazon EMR、AWS Lambda、Amazon Redshift 和 Amazon SageMaker,这些服务通常被应用开发者、数据工程师和数据科学家使用。

然后,我们在先决条件中讨论了与示例常见用例的深入集成以及各种集成的相应解决方案讲解。

AWS Glue 与 Amazon Q 开发者集成,帮助数据工程师在 AWS Glue Studio 笔记本环境中生成和执行 ETL 脚本。这包括使用 AWS Glue Studio 的一个完整的端到端 Glue ETL 作业的骨架概要。

AWS EMR 与 Amazon Q 开发者集成,帮助数据工程师在 AWS EMR Studio 笔记本环境中生成和执行 ETL 脚本。

AWS Lambda 控制台 IDE 与 Amazon Q 开发者集成,支持应用工程师生成和执行基于 Python 的端到端应用程序,用于文件移动。

Amazon SageMaker Studio 笔记本与 Amazon Q 开发者集成,帮助数据科学家使用不同的提示技术实现数据收集、特征工程、模型训练和模型部署的重大里程碑步骤。

Amazon Redshift 与 Amazon Q 集成,帮助业务分析师通过简单地提供业务需求来生成 SQL 查询。用户无需向代码助手提供数据库和/或表详情。

在下一章中,我们将探讨如何使用 Amazon Q 开发者获取 AWS 特定的指导和推荐,无论是从 AWS 控制台还是从有关架构和最佳实践支持的文档等各个主题的文档中。

参考文献

第十五章:在 AWS 上加速构建解决方案

在本章中,我们将探讨以下关键主题:

  • 在 AWS 上构建解决方案的关键步骤

  • 在 AWS 上构建过程中的 Amazon Q 功能用例

  • 了解 AWS 账户资源

此时,组织正在以快速的速度将 IT 基础设施迁移到云端,AWS 在提供云计算服务以构建其技术堆栈方面是市场领导者。当将现有应用程序迁移到 AWS 或使用许多 AWS 服务原生创建新应用程序时,所有构建者都需要采取某些步骤。构建者是每个组织的关键角色,那些利用 AWS 服务满足其 IT 需求的人使用 AWS 构建者来解决他们的业务用例。

AWS 构建者是一个使用 AWS 设计、开发、部署和管理 AWS 云平台上的应用程序和解决方案的个人。这些人可能是开发者、工程师、架构师、数据科学家或其他与 AWS 服务合作以为其组织或客户构建创新和可扩展解决方案的专业人士。AWS 构建者利用 AWS 提供的广泛工具和服务来创建强大且高效的应用程序,以满足其项目的特定需求和要求。他们负责理解 AWS 服务、实施最佳实践,并不断改进他们的技能,以推动项目中的创新和成功。

不可否认,与本地环境相比,云计算加速了 IT 构建过程。然而,大型和复杂的项目在进入生产环境之前仍然需要大量的时间和努力。

让我们快速看一下构建者在 AWS 上构建项目时需要采取的一些关键步骤。

在 AWS 上构建解决方案的关键步骤

构建者通常通过以下步骤使用 AWS 服务来解决用例:涉及几个步骤:

  1. 理解需求:构建者首先需要理解用例的需求,包括要解决的问题、期望的结果以及任何约束或限制。

  2. 选择 AWS 服务:根据需求,构建者选择最适合用例的 AWS 服务。这可能涉及研究和评估各种 AWS 服务,以确定哪些服务提供所需的功能和能力。

  3. 设计解决方案架构:构建者设计解决方案的架构,包括整体系统设计、数据流、集成点和可扩展性考虑。这涉及到创建图表,例如架构图或数据流图,以可视化解决方案。

  4. 设置 AWS 资源:构建者配置必要的 AWS 资源以实现解决方案。这可能包括设置计算实例(例如,EC2)、存储(例如,S3)、数据库(例如,RDS)、网络(例如,VPC)和其他所需服务。

  5. 开发应用程序代码:构建者开发实现解决方案所需的应用程序代码或脚本。这可能涉及使用 Python、Java 或 Node.js 等编程语言编写代码,以及为基础设施即代码IaC)工具(如 AWS CloudFormation 或 AWS 云开发 套件CDK))创建配置文件或脚本。

  6. 测试和调试:构建者测试解决方案以确保其按预期工作并满足要求。这包括单元测试、集成测试和端到端测试,以验证解决方案的功能和性能。构建者还会调试测试过程中出现的任何问题或错误。

  7. 部署和推广:一旦测试完成,构建者将解决方案部署到生产环境。这可能涉及将应用程序代码部署到计算实例,配置负载均衡器和自动扩展组,以及配置 DNS 设置。构建者会仔细规划和执行部署,以最小化停机时间和对用户的影响。

  8. 监控和优化:部署后,构建者监控解决方案以确保其继续平稳运行并满足性能目标。这涉及使用 AWS CloudWatch 和其他监控工具监控指标、日志和警报。构建者根据需要优化解决方案以降低成本、提高性能和可扩展性。

  9. 文档和知识共享:构建者记录解决方案架构、配置和部署过程,以促进知识共享和未来的维护。这些文档有助于其他团队成员了解解决方案的工作原理以及如何解决可能出现的问题。

如您所见,使用许多 AWS 专用服务构建特定用例的解决方案涉及许多步骤。每个步骤都提出了自己的挑战,每位构建者都有自己通过这些步骤的方法。关键点是,构建复杂解决方案通常需要时间,其中很大一部分时间用于研究。这项研究可能包括研究之前解决的类似用例,权衡特定 AWS 服务的利弊,探索设计模式和其实施,以及很可能在构建过程中遇到的问题和错误的调试。

让我们直接探讨如何使用 Amazon Q 加速在 AWS 上构建解决方案的过程,Amazon Q 专注于构建者经常花费大量时间的领域——研究。

在 AWS 构建过程中的构建阶段利用 Amazon Q 功能的用例

为了更好地了解 Amazon Q 如何帮助加速在 AWS 上的构建过程,我们将介绍一个用例,然后通过解决它的步骤。在这个过程中,我们将突出 Amazon Q 的许多功能,这些功能可以减少构建者本应花费的时间。

请记住,为了简单起见,我们在这里展示的是一个可以用许多不同方式解决的简单用例。然而,一旦你通过了用例的流程,它将帮助你理解 Amazon Q 在构建使用 AWS 服务解决方案时的各种功能。这些功能可以应用于 AWS 构建者在他们的组织中可能遇到的任何其他复杂用例。关键是要理解这些功能如何节省时间并提高生产力,最终增强 AWS 构建者的体验。跟我重复一遍——没有 AWS 构建者应该不高兴。让我们直接进入用例。

一家公司希望构建一个网络应用程序,用户可以上传图像用于各种目的,例如个人资料图片、产品图片或内容插图。为了确保最佳性能和用户体验,该公司旨在实施一个可扩展且高效的图像处理管道,在将这些图像存储到后端存储系统之前对其进行调整大小和优化。

由于 AWS 是他们首选的云服务提供商,该业务希望 IT 团队在短时间内使用 AWS 服务创建一个简单且成本效益高的解决方案。

虽然这里的用例可能很简单,但通常,组织中的 AWS 构建者会从业务那里收到复杂的需求,这些需求需要周密的规划、研究和执行。假设是 AWS 构建者对许多 AWS 服务、其功能和它们如何帮助解决用例有一个大致的了解。然而,并非每个构建者都一样,也不是每个人的专业知识水平都相同。有些人可能是入门级构建者,他们严重依赖资深构建者的研究和指导,而其他人可能知道如何解决用例,但可能不熟悉所有最佳实践和替代设计模式。

重要提醒:基于 LLM 的解决方案并不总是返回相同的结果

LLM 在部署到应用程序中时并不天生产生幂等结果。这有几个原因:

随机性:大多数 LLM 在生成输出时都会使用一些随机元素,例如从概率分布中进行采样。这意味着每次调用都会产生略微不同的结果。

持续学习:许多部署的 LLM 会继续在新数据上训练,不断更新其参数。模型本质上是在不断变化的,因此结果会演变。

交互性:基于 LLM 的对话式 AI 系统会积累上下文和历史,这会影响后续的响应。结果取决于之前的交互。

外部依赖:应用程序可能会引入影响 LLM 输出的外部数据。如果这些数据发生变化,输出也会随之变化。

多模态输入:对于处理图像、音频等内容的 LLM,除了文本外,这些输入的变化会导致不同的输出。

由于 Amazon Q 也是一个基于 LLM 的服务,因此对于这个用例以及你解决的任何用例,结果可能并不总是返回相同的输出。因此,在将解决方案部署到生产环境中之前,有一个人类参与适当提示并测试验证是很重要的。

希望你没有跳过前面的提醒笔记!现在,让我们直接进入 Amazon Q 如何帮助加速解决这个用例。

对话式问答能力

Amazon Q 的对话能力将帮助我们更好地理解用例的初始步骤。你可以向 Amazon Q 提出不同的问题,它会尝试理解你想要做什么。如果你是一个对 AWS 服务有一定了解的 AWS 构建者,并且与解决这个用例相关,你可以从向 Amazon Q 提出一个广泛的问题开始,然后通过提示缩小选项。例如,在以下截图中,我们请求一个解决方案,而没有过多地详细说明它应该在 AWS 上看起来是什么样子。

图 15.1 – Amazon Q 对话能力 – 一般问题

图 15.1 – Amazon Q 对话能力 – 一般问题

由于问题中没有具体的指令,Amazon Q 提供了一个可能的解决方案的一般概述。这就是你可以进一步提示系统缩小可能解决方案的地方。由于用例要求我们构建和托管一个简单的网站,我们提示 Amazon Q 进一步细化其推荐。以下截图显示了此提示和 Q 的响应。

图 15.2 – Amazon Q 对话能力 – 提示 1

图 15.2 – Amazon Q 对话能力 – 提示 1

Q 理解了提示,并建议使用AWS Amplify服务作为托管网站的一种简单方式。正如你通过这个简单的例子所看到的,提示系统是获得针对你试图解决的问题定制的结果的 crucial 步骤。由于用例要求我们构建一个网站,并且它不会只是一个静态网页,以下截图中的提示进一步细化了 Q 的输出。

图 15.3 – Amazon Q 对话能力 – 提示 2

图 15.3 – Amazon Q 对话能力 – 提示 2

你可以继续沿着这个提示路径,直到你收到足够的建议来帮助解决特定的用例。Amazon Q 还提供了信息来源,以便你可以了解更多关于它。

如果您已经有了关于您想用于此用例的 AWS 服务的想法,您可以直接构建您要问 Amazon Q 的第一个问题,包括系统在提出推荐解决方案时应考虑的所有相关因素。例如,在我们的用例中,如果我们知道我们可以将网站托管在 EC2 上,然后使用 S3 作为存储来存储原始和调整大小的图像,那么我们可以一次性提示系统,如下面的截图所示。

图 15.4 – Amazon Q 对话能力 – 明确的需求

图 15.4 – Amazon Q 对话能力 – 明确的需求

如您从推荐中看到的,Amazon Q 能够提出一个解决方案,使用您想用于解决此用例的一些 AWS 服务。

为了清晰起见,让我们假设在 Amazon Q 的帮助下,我们能够将解决方案的流程确定如下:

  1. 用户通过 Web 应用程序界面上传图像。

  2. 网络应用程序将上传的图像发送到 Amazon S3 存储桶。

  3. 一个 S3 事件通知触发一个 AWS Lambda 函数。

  4. Lambda 函数从 S3 存储桶检索上传的图像并直接启动图像处理。

  5. 图像处理任务,如调整大小和压缩,在 Lambda 函数中使用 OpenCV 或 PIL 等库执行。

  6. 一旦图像处理完成,Lambda 函数将处理后的图像保存回 S3 存储桶或指定位置。

  7. 可选地,处理后的图像的元数据可以存储在数据库或日志系统中,用于监控和分析目的。

  8. 处理后的图像现在可以用于在 Web 应用程序或任何其他下游系统中检索和显示。

下面的图示显示了此特定用例的解决方案架构。

图 15.5 – 图像处理管道 – 解决方案架构

图 15.5 – 图像处理管道 – 解决方案架构

由于我们在这里强调的是 Amazon Q 的功能,这些功能有助于快速构建 AWS 上的解决方案,因此并非所有步骤都会在这里详细说明。此外,您从 Q 收到的响应可能与我们所得到的有所不同,因此我们可能无法在此章节中展示所有逐步说明,以便您构建此用例。这里的目的是向您展示您如何利用 Q 的这些功能来满足自己的用例,并且在整个流程结束时,您将能够根据您所采取的所有步骤(包括设计、开发、构建、测试、调试、部署和文档)来量化 Amazon Q 在整个过程中为您节省了多少时间。

我们现在理解了 Q 的对话功能是如何帮助缩小解决方案的一般流程及其架构的。让我们了解 Amazon Q 的下一个功能:根据用例最优选择正确的 EC2 实例 – 构建者通常需要根据用例来决定,同时考虑每个此类实例的优缺点。

选择最优的 Amazon EC2 实例

要托管网站,我们需要启动一个带有 Apache HTTP 服务器的 Amazon EC2 实例。构建者接下来要问的问题是应该选择哪种 EC2 实例?让我们看看 Amazon Q 如何帮助。

当您前往 EC2 控制台启动 EC2 实例时,现在在实例类型部分有一个顾问链接。以下截图显示了获取建议链接。

图 15.6 – Amazon Q – EC2 实例选择顾问

图 15.6 – Amazon Q – EC2 实例选择顾问

对于我们的用例,我们需要一个低成本的 EC2 实例来托管网站。我们将选择适当的使用案例选项,如下面的截图所示。

图 15.7 – Amazon Q – EC2 实例选择用于网站托管

图 15.7 – Amazon Q – EC2 实例选择用于网站托管

根据我们的标准,Q 会响应最优的 EC2 实例,我们可以从这些实例开始我们的用例。Q 只是帮助缩小选择范围;实际的成本/性能基准测试仍需要作为过程的一部分来完成。

以下截图显示了用于网站托管的推荐 EC2 实例,同时保持低成本。

图 15.8 – Amazon Q – EC2 实例类型推荐用于网站托管

图 15.8 – Amazon Q – EC2 实例类型推荐用于网站托管

在本节中,我们展示了 Amazon Q 如何根据用例选择正确的 EC2 实例类型。在 EC2 实例上启用网站的剩余设置可能因 HTTP 服务器的设置方式而异。Web 服务器可以在启动 EC2 实例时启动,或者,在许多情况下,使用已经完成所有必要设置的Amazon 机器镜像AMI)来启动 Web 服务器。实现细节超出了本书的范围,因为它们可能因个别用例而异。

Amazon Q 的下一个功能解决了一个让构建者最头疼的问题:网络问题。构建者热衷于构建应用程序。当他们准备测试或部署某些内容时,网络问题可能会出现并阻碍进度。关于网络最令人沮丧的部分是,通常,仅根据错误信息很难知道确切的问题。找到问题的根本原因需要网络知识和故障排除技能。这个过程有时会花费很多时间。

为了帮助这个主题,亚马逊 Q 提供了一个网络故障排除功能,允许在 AWS 管理控制台中快速解决此类问题。让我们深入了解这个功能。

网络故障排除协助

大多数时候,尤其是在生产环境中,项目所需的所有基础设施都是通过 IaC(基础设施即代码)配置和维护的。如果开发者负责自行设置网络,最好是使用开发账户,那么他们可以从询问亚马逊 Q 关于为我们的用例设置网络所需的步骤开始。

以下屏幕截图显示了 Q 列出的为公开网站设置网络的步骤。

图 15.9 – 亚马逊 Q – 网络推荐用于网站托管

图 15.9 – 亚马逊 Q – 网站托管网络推荐

一旦你设置了所有网络元素,如 VPC、子网、路由表等,然后你可以验证设置是否正确。对于特定的网络分析,亚马逊 Q 依赖于 VPC 可达性分析器来提供解释和详细的路径分析。

在以下屏幕截图中,亚马逊 Q 的网络故障排除功能检查了我们设置的网络是否可以连接到互联网。

图 15.10 – 亚马逊 Q – 网络推荐用于网站托管

图 15.10 – 亚马逊 Q – 网络推荐用于网站托管

亚马逊 Q 与 VPC 可达性分析器的协同工作能力可以节省无数用于尝试解决网络配置中出现问题的时间。一旦修复了问题,你也可以通过向亚马逊 Q 提出简单的问题来确认是否达到了所需的网络状态。

例如,以下屏幕截图显示了构建者正在检查 EC2 实例是否可以连接到互联网,Q 将提供结果以及网络路径详细信息。

图 15.11 – 亚马逊 Q – 网站托管互联网连接检查

图 15.11 – 亚马逊 Q – 网站托管互联网连接检查

我们只展示了几个问题来展示亚马逊 Q 的能力;然而,在实际场景中,你可以提出更多关于网络的疑问,例如以下问题:

  • 你能帮我弄清楚为什么我无法从堡垒主机连接到应用子网中的私有实例吗?

  • 哪些安全组阻止了对我的亚马逊 Aurora 数据库的访问?

  • 为什么我无法 SSH 进入 i-xxxx EC2 实例?

有时问题不容易解决,或者你可能在使用的服务中遇到其他问题。在这种情况下,你还可以使用亚马逊 Q 快速向 AWS 提出支持案例。让我们快速看一下这个方面。

与 AWS 支持聊天

如果在任何时候您无法解决问题,您可以要求 Amazon Q 帮助您与支持人员交谈,通过要求 Q 直接参与支持。以下截图显示了如果您只有基本支持计划时提供的选项。如果您有高级计划,它将允许您从 Q 控制台直接创建支持案例。在本书末尾的参考文献部分提供了不同 AWS 支持计划的链接。

图 15.12 – Amazon Q –支持案例

图 15.12 – Amazon Q –支持案例

另一个选项是首先看看 Q 是否可以帮助解决问题。如果 Q 提供的响应似乎没有帮助,您也可以在 Q 中点击不喜欢图标,它将帮助您创建支持案例,如以下截图所示。

图 15.13 – Amazon Q –通过点击不喜欢图标创建支持案例

图 15.13 – Amazon Q –通过点击不喜欢图标创建支持案例

这样,它还将允许您从 Q 聊天本身创建支持案例,问题上下文将自动填充支持案例字段。这节省了时间,因为您不需要离开屏幕来填写单独的支持案例。

我们的使用案例现在可以继续前进到下一个构建块。让我们继续前进,在解决我们用例的下一个部分的同时,我们还将介绍 Amazon Q 的另一个关键功能。

使用 Amazon Q 解决控制台错误

为了演示 Amazon Q 的下一个功能,让我们继续到解决方案的下一步,这涉及到创建一个 Lambda 函数。此函数将在从网站上传图像到 S3 存储桶时触发。Lambda 函数将使用图像处理库来调整图像大小,并将其放置在另一个 S3 存储桶中。此外,Lambda 函数还将更新数据库中调整大小后的图像的元数据,使网站能够引用它并从 S3 存储桶检索正确的图像以显示在某些网页上。

在上一章中,我们展示了 Amazon Q 如何加速 AWS Lambda 代码生成。使用相同的技巧,你也可以为这个用例自动生成 Lambda 函数逻辑。以下是我们用例的示例 Lambda 函数。它突出了核心图像处理部分,而没有所有必要的附加功能。代码仅供参考,您可以使用 Amazon Q 帮助您生成代码。如果尝试重新生成,输出可能会变化,因此应仔细验证其正确性:

import boto3
from PIL import Image
import io
def lambda_handler(event, context):
    # Get the S3 bucket and key from the event
    s3 = boto3.client('s3')
    source_bucket = event['Records'][0]['s3']['bucket']['name']
    source_key = event['Records'][0]['s3']['object']['key']
    # Download the original image from S3
    response = s3.get_object(Bucket=source_bucket, Key=source_key)
    image_content = response['Body'].read()
    # Open the image using PIL
    image = Image.open(io.BytesIO(image_content))
    # Resize the image
    resized_image = image.resize((200, 200))  # Adjust the size as needed
    # Upload the resized image to a new S3 bucket
    destination_bucket = 'your-destination-bucket-name'
    destination_key = f"resized/{source_key}"
    # Save the resized image to a BytesIO object
    resized_image_io = io.BytesIO()
    resized_image.save(resized_image_io, format='JPEG')  # Change the format if needed
    resized_image_io.seek(0)
    # Upload the resized image to S3
    s3.put_object(Bucket=destination_bucket, Key=destination_key, 
        Body=resized_image_io)
    return {
        'statusCode': 200,
        'body': 'Image resized and uploaded successfully!'
    }

我们将设置此 Lambda 函数,并为在源 S3 存储桶中创建对象时添加一个触发调用。因此,每次网站将图像上传到该存储桶时,S3 中的“创建对象”事件将触发 Lambda 函数。

以下截图显示了我们所添加的 Lambda 触发器。

图 15.14 – AWS Lambda 函数 – 事件触发

图 15.14 – AWS Lambda 函数 – 事件触发

在构建生命周期中,构建者通常会在调试和修复测试期间遇到的问题上花费大量时间。在 Amazon Q 之前,构建者必须自己进行研究来了解错误是什么以及如何修复它。但现在,有了 Amazon Q,构建者可以直接从 AWS 管理控制台进行故障排除。让我们探索这个功能,了解我们如何使用它来解决我们的用例中的问题。

使用 Amazon Q 故障排除 Lambda 错误

在 AWS 管理控制台中,Amazon Q 可以诊断并解决使用 AWS 服务时遇到的问题,包括权限不足、配置错误和超出服务限制的情况。此功能适用于 Amazon EC2、Amazon ECS、Amazon S3 和 AWS Lambda 等服务中发生的错误。虽然 Amazon Q 可以解决许多常见的控制台错误,但它不处理基本的验证错误,并且不保留之前的故障排除会话记录。

让我们了解我们如何使用此功能来满足我们的用例。现在,为了测试我们的 Lambda 函数是否正常工作,我们将在 AWS Lambda 控制台中使用测试选项。对于测试,我们将在源存储桶中预先上传一个样本图像,然后执行以下测试:

{
  "Records": [
    {
      "eventVersion": "2.0",
      "eventSource": "aws:s3",
      "awsRegion": "us-west-2",
      "eventTime": "2022-02-18T10:05:09.775Z",
      "eventName": "ObjectCreated:Put",
      "userIdentity": {
        "principalId": "EXAMPLE"
      },
      "requestParameters": {
        "sourceIPAddress": "127.0.0.1"
      },
      "responseElements": {
        "x-amz-request-id": "EXAMPLE123456789",
        "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH"
      },
      "s3": {
        "s3SchemaVersion": "1.0",
        "configurationId": "testConfigRule",
        "bucket": {
          "name": "image-processing-tvxgdfh",
          "ownerIdentity": {
            "principalId": "EXAMPLE"
          },
          "arn": "arn:aws:s3:::image-processing-tvxgdfh"
        },
        "object": {
          "key": "example.jpg",
          "size": 1024,
          "eTag": "0123456789abcdef0123456789abcdef",
          "sequencer": "0A1B2C3D4E5F678901"
        }
      }
    }
  ]
}

此测试只是模拟 Lambda 函数在图像上传到源存储桶时接收的事件消息。Lambda 控制台中的测试功能允许构建者在代码投入生产之前验证 lambda 是否按预期工作。

当我们在 AWS Lambda 控制台中点击测试按钮时,我们会立即遇到错误,如下面的截图所示。

图 15.15 – AWS Lambda 函数 – 测试期间错误

图 15.15 – AWS Lambda 函数 – 测试期间错误

从这个错误中可以看出,似乎 PIL 模块没有被识别。错误旁边的使用 Amazon Q 故障排除选项出现。当你点击该选项时,Amazon Q 将首先分析问题,并提供问题的分析,如以下截图所示。

图 15.16 – Amazon Q – 故障排除 AWS Lambda 错误

图 15.16 – Amazon Q – 故障排除 AWS Lambda 错误

当你选择帮助我解决问题选项时,Amazon Q 将提供可能的解决方案。这样,构建者就不必进行外部研究来了解如何修复错误。以下截图显示了我们的 Lambda 函数错误解决步骤。

图 15.17 – Amazon Q – AWS Lambda 错误的解决方案

图 15.17 – Amazon Q – AWS Lambda 错误的解决方案

所以基本上,Python Imaging Library 缺失了,Amazon Q 建议将库添加到 Lambda 函数中。在这个用例的开始,我添加了一个关于 LLM(大型语言模型)助手如 Amazon Q 提供的解决方案的重要备注。提供的解决方案可能因 Amazon Q 的不同调用而异。为了说明这一点,我关闭了解决方案窗口,并要求 Q 再次对同一问题进行故障排除。这次,Amazon Q 提出了不同的建议来解决此问题。

图 15.18 – Amazon Q – AWS Lambda 错误解决 – 变体 1

图 15.18 – Amazon Q – AWS Lambda 错误解决 – 变体 1

如果我寻求另一个故障排除实例,这次,我收到了另一个解决相同问题的建议,如下面的截图所示。

图 15.19 – Amazon Q – AWS Lambda 错误解决 – 变体 2

图 15.19 – Amazon Q – AWS Lambda 错误解决 – 变体 2

现在,你可能想知道为什么这种情况会发生。首先,一个问题可能有多个解决方案,每个解决方案都有自己的步骤。哪个解决方案最适合我们的问题取决于构建者去尝试和决定。并非每个解决方案都可能是最佳选择,因为 Amazon Q 可能不了解您的团队或项目的特定实现可能具有的任何外部依赖。构建者需要在实施最终解决方案时进行尽职调查。Amazon Q 只是帮助您缩小可能需要您自己花费更多时间研究的研究选项。

为了继续前进,我采纳了图 15.14 中提供的 Amazon Q 建议。为了快速解决库问题,我在 Lambda 函数层部分添加了一个外部 ARN,'arn:aws:lambda:us-west-2:770693421928:layer:Klayers-p312-Pillow:1',作为 PIL 库的参考。

我重新运行了测试,看看是否解决了我的问题。但是,立即,我遇到了另一个错误,如下面的截图所示。

图 15.20 – Amazon Q – 另一个 AWS Lambda 错误

图 15.20 – Amazon Q – 另一个 AWS Lambda 错误

看起来库的问题已经解决了,但函数超时了。为了找出这个问题的原因,我没有逐行检查日志,而是再次点击了使用 Amazon Q 进行故障排除按钮。下面的截图显示了 Amazon Q 提供的错误分析和解决方案。

图 15.21 – Amazon Q – AWS Lambda 超时错误的分析和解决

图 15.21 – Amazon Q – AWS Lambda 超时错误的分析和解决

有时,简单的问题会导致挫败感,并浪费时间去试图找出原因。Amazon Q 理解了这个问题,并在几秒钟内提供了解决问题的确切步骤。这个例子可能很简单,但它突出了所有开始利用 Amazon Q 在 AWS 管理控制台中解决问题的 AWS 构建者将体验到的生产力提升。

最后,在增加超时时间后,Lambda 测试成功完成,以下截图确认了图像已被调整大小。

图 15.22 – Amazon Q – AWS Lambda 函数成功执行

图 15.22 – Amazon Q – AWS Lambda 函数成功执行

您可以检查目标 S3 存储桶,以找到其中的调整大小后的图像。

这使我们的用例结束;然而,Q 的另一个功能可以帮助您了解账户中存在哪些资源。换句话说,Amazon Q 也了解您账户中正在使用的 AWS 资源。

了解 AWS 账户资源

到目前为止,在本章中,我们已经看到 Amazon Q 如何通过生成架构模式、最佳实践以及代码来帮助构建者在 AWS 上创建解决方案。但如果构建者需要帮助处理他们 AWS 账户中已经构建的 AWS 资源,并希望了解更多细节,而无需单独查找这些信息呢?现在,Amazon Q 不仅了解您账户中的 AWS 资源,还可以回答有关成本的问题,帮助您更好地理解和创建优化策略。让我们快速查看这些功能。

使用 Amazon Q 分析资源

在您要求 Q 分析您的资源之前,请确保为 Q 要执行的操作授予了 IAM 权限。例如,如果您要求 Q 列出您账户中的所有 S3 存储桶,那么必须授予s3:ListAllMyBuckets IAM 权限。

以下截图显示了我在我的用例中使用的所有 EC2 实例。

图 15.23 – Amazon Q – AWS 资源分析

图 15.23 – Amazon Q – AWS 资源分析

您可以提出更精确的问题,以获得对您已配置的 AWS 资源的许多此类洞察。在以下截图中,我们正在检查我们为本章中的用例配置的存储桶的加密设置。

图 15.24 – Amazon Q – AWS 资源设置分析

图 15.24 – Amazon Q – AWS 资源设置分析

在我们结束本章之前,我们肯定想了解与用例相关的成本。实际上,所有使用 AWS 处理其工作负载的团队都会探索成本及其管理,以确保由于不必要的操作而导致支出激增。Amazon Q 也可以在这方面提供帮助。

使用 Amazon Q 分析成本

Amazon Q 通过检索、解释和分析您的成本数据,实现了无缝的成本管理,使您能够了解您的支出。

当你查询你的成本时,Amazon Q 提供详细的响应,包括具体的成本数字、相关指标、时间段以及细粒度细节,以及任何应用的组或过滤器。此外,它还提供了一个链接到具有相同规范的 AWS Cost Explorer 视图,使你能够可视化或下载数据以进行进一步分析。

以下是一个简单的例子,说明如何询问 Q 为我们特定月份的 EC2 实例的成本。

图 15.25 – Amazon Q – AWS 成本分析

图 15.25 – Amazon Q – AWS 成本分析

为了让 Amazon Q 分析成本,需要启用 AWS Cost Explorer。之后,你可以与 Q 聊天并询问任何成本探索问题的变体,如下所示:

  • 我们在 2024 年在 EC2 上花费了多少钱?

  • 过去 6 个月中,我的 EC2 成本按实例类型如何?

  • 哪些链接账户在上个月花费在 Redshift 上的最多?

这使我们到达了本章的结尾;然而,在 Amazon Q 能做什么方面,我们只是触及了表面。随着生成式 AI 的快速发展,预计 Amazon Q 将会有更多的新功能和能力,涉及解决 AWS 中的用例。

摘要

在本章中,我们介绍了如何使用 Amazon Q 在 AWS 上构建解决方案。Amazon Q 在构建过程的许多方面提供帮助,包括提供架构模式和最佳实践、诊断 AWS 控制台错误、解决网络问题、创建支持案例以及理解所有已配置的 AWS 资源及其成本。

在下一章和最后一章中,我们将探讨 DevOps 构建者的另一个关键方面,以及 Amazon Q 如何帮助快速推进其许多方面。

参考文献

AWS 支持计划:aws.amazon.com/premiumsupport/plans/

第十六章:加速 AWS 上的 DevOps 流程

在本章中,我们将探讨以下关键主题:

  • DevOps 过程中的挑战

  • Amazon CodeCatalyst 简介

  • 探索 Amazon Q 在 Amazon CodeCatalyst 中的能力

  • Amazon Q 在 Amazon CodeCatalyst 中的功能开发能力

  • Amazon Q 在 Amazon CodeCatalyst 中的总结能力

在任何组织中,软件开发不仅仅是编写代码。软件工程过程还涉及一种称为 DevOps 的东西。它结合了“开发”和“运营”,涉及一系列旨在改善软件开发Dev)和 IT运营Ops)团队之间协作和沟通的实践。它侧重于自动化流程,提高效率,并更快、更可靠地交付高质量的软件产品。

DevOps 强调协作文化、持续集成和持续交付CI/CD)、基础设施和工作流程的自动化,以及监控和反馈循环,以实现更快的开发周期、提高部署频率和更稳定的运行环境。

市场上有许多工具可供选择,用于 DevOps 生命周期的各种目的,包括版本控制、持续集成、持续交付、配置管理、基础设施即代码、监控和协作。AWS 还提供了一种名为 Amazon CodeCatalyst 的服务,有助于这一过程。但首先,我们需要了解在 DevOps 过程中面临的挑战。

DevOps 过程中的挑战

尽管 DevOps 工具在软件开发过程的许多方面都提供了帮助,但在这一过程中仍存在一些挑战。让我们了解一些挑战,以便您能够欣赏到 Amazon Q 在 CodeCatalyst 的 DevOps 过程中带来的价值:

  • 复杂性:许多 DevOps 工具在设置、配置和维护方面可能很复杂,需要专业知识和技术技能。例如,使用 Jenkins 设置 CI/CD 管道涉及多个步骤:在服务器上安装和配置 Jenkins,将其与版本控制系统(如 Git)集成,设置构建脚本,配置管道各个阶段的插件,管理用户权限,并确保服务器安全且定期更新。这个过程可能耗时且需要深入理解 Jenkins 及其底层基础设施。

  • 集成问题:将多个 DevOps 工具集成到一个统一的管道中可能具有挑战性,导致兼容性问题和数据孤岛。

  • 自动化有限:虽然自动化是 DevOps 的一个关键原则,但并非所有工具都提供强大的自动化功能,导致手动解决方案和低效。例如,考虑一个团队使用缺乏自动化回滚功能的部署工具的场景。如果部署失败,团队成员必须手动干预以将系统恢复到先前的稳定状态。这个过程可能耗时且容易出错,并会打断 DevOps 力求实现的流畅工作流程。因此,工具中缺乏强大的自动化功能会导致低效和运营成本增加。

  • 学习曲线:DevOps 工具通常具有陡峭的学习曲线,需要时间和资源让团队熟练使用,这可能会减缓采用和实施的速度。

  • 缺乏协作:孤立的团队和部门可能会阻碍协作和沟通,导致 DevOps 流程中的低效和瓶颈。

  • 持续测试:实施全面的测试策略,包括单元测试、集成测试和自动化回归测试,可能具有挑战性,尤其是在频繁代码更改的复杂环境中。

  • 技能差距:在竞争激烈的就业市场中,寻找并留住具有自动化、云计算、容器化和其他相关技术专长的 DevOps 专业人员可能具有挑战性。

让我们快速了解亚马逊 CodeCatalyst 的基础知识,这样就可以轻松理解亚马逊 Q 如何加速 DevOps 流程。

亚马逊 CodeCatalyst 简介

亚马逊 CodeCatalyst 为采用持续集成和持续交付实践的团队简化了软件开发。通过整合关键工具,它简化了工作计划、代码协作和应用程序开发,内置 CI/CD 功能。通过直接连接 AWS 账户,可以无缝地将 AWS 资源集成到项目中。这个一站式工具管理应用程序生命周期的每个阶段和方面,实现快速和可靠的软件交付。

下图突出了 CodeCatalyst 帮助的软件开发的所有不同方面。

图 16.1 – 亚马逊 CodeCatalyst 功能

图 16.1 – 亚马逊 CodeCatalyst 功能

让我们浏览一下 CodeCatalyst 可以做的关键功能。这些内容也参考了 AWS 文档中的 CodeCatalyst 部分,相关链接在章节末尾的 参考文献 部分提供:

  • 代码协作:通过分支、合并、拉取请求和源代码仓库中的评论与团队无缝协作。快速创建开发环境,无需克隆或设置与仓库的连接即可进行代码工作。

  • 使用工作流构建、测试和部署应用程序:通过构建、测试和部署操作定义工作流,以管理您应用程序的 CI/CD。可以手动启动工作流或根据代码推送或拉取请求的创建或关闭等事件自动启动它们。

  • 使用问题跟踪优先处理工作:使用问题建立待办事项列表并使用看板跟踪正在进行中的任务的状态。维护一个健康的项目待办事项列表,以便您的团队能够处理,对于软件开发至关重要。

  • 监控和通知:监控团队活动和资源状态,并配置通知,以便了解重要更改。

Amazon CodeCatalyst 是一个具有多个功能和特性的综合服务。提供详细概述超出了本书的范围。然而,如果您对将 CodeCatalyst 作为 DevOps 工具进行探索感兴趣,请自由地查阅本章末尾参考部分列出的研讨会。

为了快速学习并看到 CodeCatalyst 的实际应用,服务内提供了多个蓝图。这些蓝图将创建实现特定用例端到端 DevOps 流程所需的所有基础设施。其中一个蓝图是用于实现现代三层 Web 应用程序的。您可以在参考部分提供的链接中找到它的逐步教程。

在介绍了 DevOps 之后,让我们直接进入本章的主题:Amazon Q 如何帮助在 Amazon CodeCatalyst 内部进行 DevOps 流程。

探索 Amazon Q 在 Amazon CodeCatalyst 中的功能

如果您的项目位于 Amazon CodeCatalyst、GitHub Cloud 或 Bitbucket Cloud 中的源代码库中,并且启用了 Amazon Q 功能,您可以利用 Q 的一些功能来加速 DevOps 流程。开发者经常面临时间限制,导致任务积压。因此,他们可能忽略在拉取请求中提供代码更改的详细解释,假设他们的同事可以独立解读。同样,拉取请求的创建者和审阅者可能缺乏足够的时间来彻底分析评论,尤其是在多次修订的情况下。

在现代软件开发中,工程师在 DevOps 流程中会遇到重大挑战,导致瓶颈和低效。一个突出的问题是代码审查和团队协作的耗时性质。软件工程师往往难以在拉取请求中提供对代码更改的全面解释,而审查者则面临全面分析和理解更改的困难,尤其是在多次修订的情况下。这些低效导致延迟、生产力下降和错失创新机会。此外,向代码中添加新功能是一个耗时的过程;同时,审查者可能难以理解复杂更改,尤其是在处理大型代码库时。

通过与 Amazon CodeCatalyst 的集成,团队成员可以简化他们的工作流程,从而有更多时间专注于工作的关键方面。我们将 Amazon Q 整合到 DevOps 流程中仍处于起步阶段,但到目前为止,以下是 Amazon Q 与 Amazon CodeCatalyst 一起工作的关键功能:

  • 功能开发:允许开发者在一个问题中输入想法,并获取完全测试的应用程序代码,该代码已准备好在拉取请求中合并。只需几点击和自然语言输入,整个工作流程就简化了。

  • 自动生成拉取请求摘要:Amazon Q 可以分析拉取请求中留下的所有代码更改评论,并生成简洁的反馈摘要。

  • 自动生成拉取请求描述:Amazon Q 可以分析代码更改,并在拉取请求中生成更改的描述,使审查和批准更改更加容易。

在 CodeCatalyst 中,Q 还协助其他领域,例如自动选择蓝图和提供任务推荐。我们将在本章中详细讨论每个这些功能。但首先,像往常一样,再次提醒关于 LLM 生成输出的非确定性。

提醒

在我们开始展示 Amazon Q 与 CodeCatalyst 的能力之前,重要的是要记住一些事情。从 LLM 收到的响应通常不是幂等的。幂等性是指操作的一个属性,即多次应用该操作的效果与只应用一次相同。

在 LLM 的背景下,每个生成的响应都是基于当时提供的特定输入提示。虽然相同的提示可能在多次迭代中产生相似或相关的响应,但无法保证每次生成的响应都相同。模型初始化、随机化和提示的具体上下文等因素可能会影响生成响应的变化。

因此,即使在以下章节中我们将使用的示例中,如果您向 Amazon Q 发送相同的提示,您可能会每次都收到不同的响应,使得响应不具有幂等性。在尝试所有步骤之前,请根据自己的判断来决定接受什么作为准确的信息,以及需要再次提示系统以接收修订的方法。

现在,让我们从我们的 DevOps 服务 Amazon CodeCatalyst 中的功能开发能力开始,其中已经启用了 Amazon Q 的生成式 AI 能力。

Amazon CodeCatalyst 中 Amazon Q 的功能开发能力

Amazon Q 的功能开发能力使用户能够针对特定领域定制和增强 Q 的问答技能。关于使用 Amazon CodeCatalyst 的 DevOps 流程,功能开发可能包括对应用程序中识别出的错误进行修复、进行改进或添加新功能。对于所有这些任务,都需要修改代码库、测试、在过程中解决任何问题,然后将更改推回生产环境进行部署。虽然这看起来很简单,但在具有许多组件且注释不足的大型代码库中,特别是对于新加入的开发者来说,快速完成端到端任务很快就会变得具有挑战性。

让我们通过一个例子来看看 Amazon Q 如何协助在 Amazon CodeCatalyst 中进行功能开发。在这里,我们假设您对 CodeCatalyst 的不同组件有基本的了解。如果您是第一次使用此服务,我们鼓励您尝试本章末尾参考文献部分中链接的工作坊。完成这些后,您将能够更好地理解本节中讨论的一些方面。让我们直接进入用例。

利用 Amazon CodeCatalyst 中 Amazon Q 功能开发的用例

为了展示功能开发能力,我们将选择在创建项目时可用 AWS Glue ETL 蓝图。我们选择这个例子是为了提供一个全面的视角,展示开发者如何在 Glue 中加速他们的 ETL 代码。有关使用 Glue 加速编码的其他技术,请参阅第十四章

下面的截图显示了 CodeCatalyst 中的 AWS Glue ETL 蓝图。

图 16.2 – Amazon CodeCatalyst 中的 Glue ETL 蓝图

图 16.2 – Amazon CodeCatalyst 中的 Glue ETL 蓝图

在这个例子中,因为我们已经知道我们想要哪个蓝图,所以我们很容易阅读描述并选择它用于我们的项目。然而,某些用例可能需要我们在选择最合适的蓝图之前阅读多个可用蓝图的描述。现在,Amazon Q 通过根据您以自然语言提供的标准自动选择最佳匹配的蓝图来帮助您创建项目,从而为您节省宝贵的时间。Q 将分析所有蓝图的描述,并为您选择最佳的蓝图来创建项目,从而节省您的时间。

以下示例突出了使用 Amazon Q 建立项目的过程,Amazon Q 根据我们在聊天中提供的标准建议 Glue 蓝图。

图 16.3 – Amazon Q 建议的 Glue ETL 蓝图

图 16.3 – Amazon Q 建议的 Glue ETL 蓝图

完成步骤后,源代码库将设置好,并通过工作流程完成 CI/CD 管道。该管道本质上使用存储在库中的 AWS 云开发工具包CDK)代码启动 AWS CloudFormation 堆栈。

以下截图展示了在 CodeCatalyst 中设置后的 Glue ETL 蓝图。此 ETL 项目的架构也在概述中进行了说明。这是一个简单的项目,其中输入数据使用 AWS Glue 处理,并以 Parquet 文件格式存储在 Amazon S3 中,以便由 Amazon Athena 进行查询。屏幕底部的流程状态指示完成,这意味着 CloudFormation 堆栈已成功部署了架构的所有组件。您可以通过 AWS 中的 AWS Lambda 和 AWS Glue 服务控制台导航以检查工件。

图 16.4 – 使用 Amazon CodeCatalyst 部署的 Glue ETL 蓝图

图 16.4 – 使用 Amazon CodeCatalyst 部署的 Glue ETL 蓝图

注意到 使用 Amazon Q 添加 选项(在上一个截图的右上角),它允许您通过根据您所需的建议其他蓝图来添加新组件。对于此用例,假设我们在单个蓝图中找到了我们想要的所有内容,因此我们将使用我们已有的内容。

现在,让我们假设我们在我们的 Glue ETL 管道中需要进行一些增强。对解决方案的持续增强和改进总是受到鼓励,因此我们也将做类似的事情。

Glue ETL 蓝图将最终输出存储在 Parquet 文件格式中,该格式广泛用于设置数据湖。然而,随着处理和存储的数据量的增加,存储成本也在增加。为了提高这些 Parquet 文件的存储效率,可以应用压缩算法以压缩格式存储它们。但是,对于开发者来说,确定平衡存储节省与性能的优化压缩算法可能具有挑战性。如果没有关于如何处理此任务和测试压缩到性能比率的明确指导,开发者可能需要在实施更改之前花费大量时间进行研究。或者,他们可以通过咨询集成到 CodeCatalyst 中的 Amazon Q 的功能开发能力来寻求快速解决方案。

以下图提供了一个很好的工作流程,展示了 Amazon Q 如何帮助进行功能开发。

图 16.5 – Amazon Q 功能开发工作流程

图 16.5 – Amazon Q 功能开发工作流程

让我们详细理解这些步骤,并看看 Amazon Q 如何加速我们在本章所选的 Glue 项目中的繁琐 DevOps 流程。

将问题分配给 Amazon Q

假设一个 ETL 开发者知道他们需要在代码中应用一些压缩逻辑,但不确定应该应用哪种算法。此外,开发者也不确定需要更改代码库中的哪些代码。这就是 Amazon Q 可以提供帮助的地方。开发者将在 CodeCatalyst 中创建一个问题,并尽可能详细地描述他们的问题。

以下截图显示了我们将创建的问题,包括标题和描述我们的最终目标。

图 16.6 – 在 Amazon CodeCatalyst 中创建问题并将其分配给 Amazon Q

图 16.6 – 在 Amazon CodeCatalyst 中创建问题并将其分配给 Amazon Q

我们现在可以保持状态为待办,并将优先级设置为无优先级作为默认选项。请注意,我们不是将此分配给用户,而是可以选择将其分配给 Amazon Q。

一旦分配给 Amazon Q,它希望我们指定它应该如何处理流程。首先,我们提供了这个问题应该与之工作的源仓库。然后,它询问用户是否希望在过程中审查代码更改建议。根据用户评论,Q 可以调整其方法一定次数。在绝大多数情况下,保持此选项启用总是好的,因为建议可能并不总是符合我们期望的代码。接下来,它还询问 Q 是否可以自行修改工作流程文件。在这种情况下,我们只是出于安全考虑禁用了此选项。现在,Q 还可以根据对问题的分析推荐任务。目前,我们将保持它关闭,但我们将在下一阶段再次考虑此选项。

以下截图显示了我们将问题分配给 Amazon Q 时的选择。

图 16.7 – 亚马逊为处理问题所需初始输入

图 16.7 – 亚马逊为处理问题所需初始输入

一旦我们确认选择并创建问题,亚马逊 Q 将问题移动到进行中通道,如下面的截图所示。

图 16.8 – 亚马逊 Q 在“进行中”通道中分析的问题

图 16.8 – 亚马逊 Q 在“进行中”通道中分析的问题

下一步是生成一个解决问题的方法,并给开发者提供通过提示提供任何反馈的选项。

生成方法和提供反馈

这个步骤是幕后所有真正神奇的事情发生的地点。Q 将首先评估任何先决条件,然后继续阅读你在上一步提供的代码库。

以下截图突出了 Q 将采取的方法以达到最终目标。注意,它在继续前进之前会等待用户的响应。

图 16.9 – 当问题分配给亚马逊 Q 在 CodeCatalyst 中的分析步骤

图 16.9 – 当问题分配给亚马逊 Q 在 CodeCatalyst 中的分析步骤

推荐任务按钮也显示在这个屏幕上,Q 可以分析问题并为用户提供更多可管理的任务以加快行动。在我们的用例中,我们不需要使用此功能,但请随意尝试它来解决你希望在办公场所创建的更复杂的问题。

根据它所学到的,它将生成一个关于它对项目理解的总背景。以下截图突出了为 AWS Glue ETL 项目生成的背景。

图 16.10 – 亚马逊 Q 在 CodeCatalyst 中的背景生成步骤

图 16.10 – 亚马逊 Q 在 CodeCatalyst 中的背景生成步骤

背景有助于总结代码库的主要内容。下一步是主要步骤,因为它展示了它将采取的方法来解决问题,该问题已在问题的描述中提供。

以下截图突出了我们向 Q 展示的压缩用例的方法。

图 16.11 – 亚马逊 Q 在 CodeCatalyst 中生成的方案 – 第一部分

图 16.11 – 亚马逊 Q 在 CodeCatalyst 中生成的方案 – 第一部分

在步骤结束时,一旦你理解了 Q 提出的更改,你有两个选择。在某些情况下,Q 会提供完美的选择,并且所提出的所有内容可能看起来 100%准确。在这种情况下,你可以直接继续。然而,重要的是要记住,正如我们一直被提醒的那样,基于 LLM 的解决方案可能并不总是你想要的,但 Q 愿意学习和提供更好的或替代的解决方案。这就是提示工程发挥作用的地方,亚马逊 Q 允许你通过评论部分提供提示,以便它可以修改其方法并提供不同的解决方案。

以下屏幕截图突出了 Q 为其生成的方案提供的选项。对于我们的用例,我们将接受 Q 提供的方案并继续下一步。

图 16.12 – CodeCatalyst 中由 Amazon Q 生成的方案 – 第二部分

图 16.12 – CodeCatalyst 中由 Amazon Q 生成的方案 – 第二部分

观察 Amazon Q 如何系统地列出可能的下一步。首先,它理解了我们的需求,并建议使用 Snappy 压缩,这将提供压缩和速度之间的良好平衡。然后,它提供了需要在每个源代码文件中添加或更改的代码片段,以使这成为可能。对于开发者来说,研究问题的可能解决方案和理解所有需要代码更改的地方可能需要大量的时间和精力。Amazon Q 代表我们在几分钟内完成了所有这些。

为了增加一些神秘感,方案中提供的代码片段之一似乎存在问题。我本可以提供额外的提示并尝试让 Amazon Q 提供确切的工作代码。然而,在现实生活中,有时问题会从缝隙中溜走。但不用担心;我们将在稍后的阶段有另一个机会修复这个问题。这也展示了 Q 如何在 CodeCatalyst 中提供其他功能,以朝着完美的最终解决方案迈进。

目前,我们接受方案并指示其继续进行。工作流程的下一步是生成拉取请求。

生成拉取请求

一旦 Q 收到我们继续使用批准的方案的命令,它将生成必要的代码并创建一个拉取请求。在这一步,工作流程进入审查阶段。开发者将再次欣赏这将为他们节省多少时间。

以下屏幕截图显示了 Amazon Q 在分支、创建必要的更改并在拉取请求中向审批者展示所有这些工作的全过程。

图 16.13 – Amazon Q 完成了方案并生成了一个拉取请求

图 16.13 – Amazon Q 完成了方法并生成了一个拉取请求

当你点击拉取请求时,方案将在概述中展开,使审查者更容易理解代码库中做出的更改。以下屏幕截图显示了拉取请求的概述页面,其中总结了更改。

图 16.14 – CodeCatalyst 中由 Amazon Q 生成的拉取请求概述

图 16.14 – CodeCatalyst 中由 Amazon Q 生成的拉取请求概述

生成拉取请求以及更改的详细描述,有助于工作流程的下一步,即审查和修改代码库中的建议更改。

审查和修改代码更改

审批者通常会想要在并排比较屏幕上比较建议的更改,这样就可以轻松理解不同代码文件中的所有更改。以下屏幕截图显示了突出显示 Amazon Q 提出的所有更改的屏幕。

图 16.15 – 在 CodeCatalyst 中 Amazon Q 生成的拉取请求代码比较

图 16.15 – 在 CodeCatalyst 中 Amazon Q 生成的拉取请求代码比较

回想一下,我们之前提到过,似乎在 Amazon Q 方法建议的一个代码片段中存在问题。由于我们在上一步中没有注意到它,所以在实际代码提交审查时,这个问题在拉取请求中显得尤为突出。没有团队希望错误的代码进入仓库,因此通常在代码合并到主分支之前,审查和批准拉取请求是一种最佳实践。

仔细检查后,观察到在 CDK 代码文件中,compression 不是 Glue 表的直接属性。因此,代码 compression:glue.Compression.SNAPPY 将在构建阶段编译失败。为了避免重复做同样的事情,CodeCatalyst 允许审查者在拉取请求屏幕内直接添加注释并请求修订。

在以下屏幕截图中,我们在错误代码行旁边添加了注释,要求系统使用不同的逻辑。

图 16.16 – 在 CodeCatalyst 的拉取请求中添加注释并请求修订

图 16.16 – 在 CodeCatalyst 的拉取请求中添加注释并请求修订

当你在拉取请求屏幕上点击创建修订按钮时,Amazon Q 会被再次调用。它将代码中的注释作为提示,并创建一个新的拉取请求修订,这次带有正确的逻辑。以下屏幕截图显示了修订 v2 能够返回正确代码的情况。

图 16.17 – 在 CodeCatalyst 修订的拉取请求中的新、更新后的代码

图 16.17 – 在 CodeCatalyst 修订的拉取请求中的新、更新后的代码

一旦审查者确认一切看起来都正确,他们就可以在 CodeCatalyst 中作为下一步批准拉取请求。以下屏幕截图显示了这一过程。

图 16.18 – 在 CodeCatalyst 修订的拉取请求中批准的新、更新后的代码

图 16.18 – 在 CodeCatalyst 修订的拉取请求中批准的新、更新后的代码

这将我们带到了工作流程的最终一步,即将批准的代码更改合并回仓库。

仓库中的代码更改合并

一旦完成审查和批准,代码就可以合并到主分支,如下一个屏幕截图所示。

图 16.19 – CodeCatalyst 中的代码合并过程

图 16.19 – CodeCatalyst 中的代码合并过程

合并请求触发工作流通过 CI/CD 流程重新编译、重建和重新部署代码。您始终可以前往 CI/CD 部分的工作流以确认构建和部署过程的成功完成。下面的截图显示了拉取请求合并后工作流的成功构建。

图 16.20 – CodeCatalyst 中的工作流

图 16.20 – CodeCatalyst 中的工作流

对于我们的 Glue ETL 用例,工作流将编译代码并通过 CDK 逻辑触发 AWS CloudFormation 堆栈。CloudFormation 堆栈反过来将重新创建/更新受代码更改影响的基础设施。在我们的案例中,您可以访问 Glue 控制台并检查包含压缩逻辑的更新 ETL 作业,准备触发下一次运行。

在我们结束使用 Amazon Q 在 CodeCatalyst 中的功能开发能力之前,我还想提供一个失败的替代场景。在软件工程的世界里,并非所有事情都按计划进行。如果在代码审查过程中,审查者没有发现代码问题,并且没有使用修订功能来修复它,会怎样呢?好吧,他们会批准请求,合并过程将触发工作流,最终导致失败。

下面的截图显示了如果在拉取请求过程中没有修订代码问题,将显示失败的工作流。

图 16.21 – 由于代码问题导致 CodeCatalyst 中的失败工作流

图 16.21 – 由于代码问题导致 CodeCatalyst 中的失败工作流

在这一点上,开发团队进入灭火模式,并从失败工作流中提供的日志中识别导致失败的错误。下面的截图显示了导致失败的错误。

图 16.22 – CodeCatalyst 中工作流日志中的失败工作流原因

图 16.22 – CodeCatalyst 中工作流日志中的失败工作流原因

在此之后的一个下一步将是创建另一个问题在 CodeCatalyst 中,提供描述中的错误详情,并将其分配回 Amazon Q 进行分析和故障排除。您可能需要参与快速工程并提供多个评论,以便 Amazon Q 得出正确的逻辑来修复问题。一旦您完成整个流程,新代码将再次包含在拉取请求中,以供批准和合并到主分支。

在我们结束本章之前,我们将快速查看 CodeCatalyst 中使用 Amazon Q 的几个其他酷炫功能,这些功能可以帮助开发者节省时间和精力。

Amazon Q 在 Amazon CodeCatalyst 中的总结能力

开发者会理解尝试理解拉取请求提交中变更的痛苦。通常,进行代码变更的人并不是批准他们的人。因此,其他人需要理解代码库中所有变更,分析其预期效果,并最终,如果它们符合标准,批准它们。

没有适当的注释,很难理解所有变更的细微差别。有时,即使有注释,也很难完全理解变更的意图。这就是 Amazon Q 介入,使开发者和审批者生活变得更轻松的地方。

让我们看看 Amazon Q 分析代码变更并在创建拉取请求时生成变更总结的能力,以及根据拉取请求中对代码变更的所有评论创建总结。

拉取请求评论摘要

在审查拉取请求时,用户经常就拟议的变更留下许多评论。随着多个审查者提供反馈,确定共同主题或确保对所有评论进行彻底审查可能变得具有挑战性。为了简化此过程,创建评论摘要功能利用 Amazon Q 分析拉取请求中留下的所有代码变更评论,并生成简洁的反馈摘要。

以下屏幕截图突出了 Amazon Q 为我们拉取请求中进行的压缩变更生成的摘要。

图 16.23 – 拉取请求内容摘要

图 16.23 – 拉取请求内容摘要

拉取请求描述

拉取请求作为代码变更审查的协作平台,无论是微小的修复、重大的功能添加,还是发布软件版本的更新。在拉取请求描述中包含代码变更的总结及其目的,有助于审查者理解变更并促进对代码演变的历史视角。然而,开发者经常依赖代码本身来传达信息,导致描述模糊或不够详细,从而阻碍审查者对变更或其潜在意图的理解。

这就是为我编写描述功能派上用场的地方,因为它能够生成拉取请求中变更的描述,使审查和批准变更变得更加容易。以下屏幕显示了拉取请求屏幕上的为我编写描述选项。

图 16.24 – CodeCatalyst 中的拉取请求描述生成功能

图 16.24 – CodeCatalyst 中的拉取请求描述生成功能

Amazon Q 检查包含代码修改的源分支和您打算合并这些变更的目标分支之间的差异。随后,它生成一个总结,概述这些修改的性质,并提供了对其目的和影响的最准确解释。

下面的屏幕截图突出了 Amazon Q 使用拉取请求中所有信息生成的描述。

图 16.25 – CodeCatalyst 拉取请求屏幕上的自动生成描述

图 16.25 – CodeCatalyst 拉取请求屏幕上的自动生成描述

CodeCatalyst 是一项具有众多自身功能的综合服务。我们只介绍了通过 Amazon Q 提供的部分下一代功能,Amazon Q 是一个由生成式 AI 驱动的助手。

摘要

在本章中,我们讨论了开发者在 DevOps 过程中面临的一些挑战。然后,我们介绍了 Amazon CodeCatalyst,这是一项为开发团队设计的综合软件开发服务,旨在快速构建、部署和扩展在 AWS 上运行的应用程序。

之后,我们利用一个用例来展示该服务不同的生成式 AI 功能。Amazon Q 允许开发者快速向软件添加新功能。开发者可以创建问题并将它们分配给 Amazon Q,以全面理解并针对提供的特定任务所需的不同方法提供建议。Q 还可以根据用户提供的评论提示提供修订的方法。然后,它生成代码并创建拉取请求,以便审阅者可以检查提议的更改,并在合并回主存储库之前批准或要求修订。

我们还探讨了 Amazon Q 如何提供拉取请求评论摘要和生成拉取请求描述。所有这些功能都提高了开发者的生产力,并在整个软件开发过程中节省了大量时间。

最后的想法

感谢您花时间与我们一同经历这本书中的旅程。尽管我们已经到达了关于 Amazon Q 开发者的书籍的结尾,并涵盖了众多主题,但我们仍处于生成式 AI 的初期阶段。全面创新正在各个领域迅速发生,因此在看到和探索新功能时,请保持开放的心态。我们描述的许多功能可能会得到更好的发展。编写这本书的目的是让您一窥使用 Amazon Q 开发者可能实现的技艺。

由生成式 AI 驱动的助手,如 Amazon Q 开发者,将改变当前软件工程师和可能缺乏资源或技能的渴望成为开发者的前景。对于经验丰富的工程师来说,AI 将通过生成代码片段、提供实时反馈以及自动化如调试和文档等繁琐任务(正如我们在本书中所见)来显著提高生产力。这使得他们能够专注于开发更复杂和更具创造性的方面。AI 还可以通过总结讨论和翻译语言障碍来促进团队内部更好的协作,营造一个更具包容性的工作环境。

对于有志于成为开发者的人来说,尤其是那些资源有限或接受过正规教育的人,AI 提供了个性化的学习体验,这些体验是根据他们的优势和劣势量身定制的。它提供即时反馈和学习支持,使获取新技能和理解复杂概念变得更加容易。AI 驱动的工具可以通过提供导师指导、职业路径推荐以及适应不断变化的行业趋势的资源,来民主化编码教育的获取途径。此外,AI 还可以通过语音激活编码和其他辅助功能帮助克服身体或学习障碍的人士的障碍。

因此,总结来说,如果你在信息技术领域的新知识学习上感到不知所措,那么拥抱由 Amazon Q Developer 等生成式 AI 助手正是你的时刻。你用得越多,就越能增强自己在职业生涯中达到更高成就的能力。

永远不要停止学习;你会对它为你打开多少新的大门感到惊讶。

参考文献

posted @ 2025-10-27 08:54  绝不原创的飞龙  阅读(4)  评论(0)    收藏  举报