
Amazon CodeWhisperer
Amazon CodeWhisperer 快速上手:安装、注释驱动生成与安全扫描
CodeWhisperer 是亚马逊推出的 AI 编程助手,以 IDE 插件形式提供实时代码建议、注释生成函数与安全扫描。本文整理它的前置条件、在 JetBrains 与 VS Code 中的安装与登录流程、常用快捷键、注释驱动的代码生成写法、安全扫描与引用跟踪的使用方式,并给出一个从注释到可运行函数的完整示例。
Amazon CodeWhisperer 是一款基于机器学习的代码生成工具,以 IDE 插件的形式工作。它会在你编写代码时持续读取光标位置、光标之前的代码、注释以及同一项目中其他文件的内容,据此给出从单行补全到完整函数的建议。除了生成代码,它还能扫描当前文件,标出潜在的安全问题并给出修改方向,另外带有引用跟踪能力,会在建议命中已知开源代码时提示对应的许可证信息。它适合正在使用 JetBrains 系列 IDE 或 VS Code 的开发者,尤其是需要频繁查阅 SDK 文档、写大量样板代码的人。想先了解它在站内的定位,可以看 CodeWhisperer 这一条目。
准备工作
在动手之前,先把下面几件事确认清楚,可以省掉后面反复登录的麻烦。
- 一个可用的 IDE:CodeWhisperer 目前以插件形式提供,主要面向 JetBrains 系列(IntelliJ IDEA、PyCharm 等)和 VS Code。素材中的演示集中在 IntelliJ IDEA、PyCharm 与 VS Code 三个环境。
- Amazon Toolkit 插件:CodeWhisperer 的功能挂在 Amazon Toolkit 这个插件里,不是单独安装的独立插件。搜索关键词是 “Amazon Toolkit”。
- 一个登录身份:可以使用个人邮箱注册 Amazon Builder ID 来登录,安装流程中会引导你完成注册。
- 一个可访问的邮箱:注册过程中会向邮箱发送验证码,需要能实时收信。
- 一个浏览器:授权环节会跳转到浏览器完成,IDE 与浏览器之间通过一段一次性代码传递身份。
关于是否收费、有哪些套餐、各地区是否可用、支持哪些语言与 IDE 版本,这些信息会随时间变化,请以官网当前公布的信息为准。本文只讲操作流程,不涉及价格与配额数字。
操作步骤
第一步:在 IDE 中安装 Amazon Toolkit 插件
不同 IDE 的入口位置不一样,但逻辑一致:打开插件市场,搜索插件名,安装,然后重启 IDE。
IntelliJ IDEA:打开配置窗口,选择 Plugins,在搜索框输入 “Amazon Toolkit”,点击 Install,再点 OK。安装完成后重启 IDEA。
PyCharm:进入设置菜单(macOS 上是 ⌘ + ,Windows 上是 文件 → 设置),点击左侧菜单的“插件”。在菜单顶部点击 Marketplace,在搜索栏输入 “Amazon Toolkit”,然后点击安装。安装完成后同样需要重启 IDE。
VS Code:在侧边栏的扩展面板中搜索并安装 Amazon Toolkit 插件。
第二步:打开 Amazon Toolkit 视图并启动 CodeWhisperer
IDE 重启后会出现一个新的 Amazon Toolkit 工具窗口。如果没看到,可以通过 视图 → 工具窗口 → Amazon Toolkit 打开。
在 Amazon Toolkit 视图中点击 “Developer Tools” 标签页,选择 “CodeWhisperer / Start”。
VS Code 的路径类似:侧边栏点击 AWS,展开 DEVELOPER TOOLS,找到 CodeWhisperer,点击 Start。
第三步:用 Amazon Builder ID 完成登录
弹出的窗口里选择 “Use a personal email to sign up and sign in with Amazon Builder ID”,然后点击 Connect。接下来的流程在 IDE 与浏览器之间来回切换:
- 在弹出的窗口中选择 “Open and Copy Code”,这段代码会被复制到剪贴板,同时浏览器会打开一个授权页面。
- 在浏览器页面中粘贴刚才复制的代码,点击 Next。
- 输入邮箱地址,点击 Next。
- 输入名字,点击 Next。此时 CodeWhisperer 会向该邮箱发送一个验证码。
- 打开邮箱找到验证码,复制并粘贴到输入框,点击 Verify。
- 设置密码,点击 “Create AWS Builder ID”。
- 在最后一个页面点击 Allow 完成授权。
看到成功提示后,说明 Amazon Builder ID 注册并授权完成。回到 IDE,在 Amazon Toolkit 视图的 Developer Tools 中就可以打开或关闭代码生成功能了。VS Code 中如果左下角的扩展图标显示为正常的对勾状态,说明连接成功。
如果浏览器上已经登录过,后续重复这一流程会简单很多,粘贴代码后直接点 Allow 即可。
第四步:熟悉快捷键
CodeWhisperer 的调用依赖快捷键,具体按键在不同 IDE 中略有差异,但作用是一致的:
- 接受建议:出现建议后按 Tab 键确认插入。素材中的演示统一使用 Tab。
- 切换多条建议:按 Alt+C 可以在多个候选之间切换选择。素材中在 PyCharm 与 IntelliJ 的演示里都使用了 Alt+C。
需要提醒的是,具体按键以你所使用的 IDE 当前设置为准,不同版本可能不同。
第五步:用注释驱动代码生成
这是 CodeWhisperer 最核心的用法。你写一段注释描述想要什么,它据此推断函数定义,再生成函数体。注释的描述性和准确性越高,推断结果越贴近预期。
一个实用技巧是让注释以 Function 开头,明确告诉它你要创建一个函数。例如:
# Function to open an S3 file
CodeWhisperer 会先给出函数定义,此时你可以修改参数名,让它更具可读性,然后再让它生成函数体。它也可能一次给出多个函数定义供你挑选。
生成结果不只是代码,通常还会带上文档字符串。例如上面那条注释可能得到:
# Function to open an S3 file
def open_s3_file(filename):
"""
:param filename:
:return:
"""
s3 = boto3.resource('s3')
return s3.Object(bucket, filename).get()['Body'].read()
它还会利用同一项目中已经存在的代码。比如接着写一条注释,要求从 S3 文件中返回前 n 行:
# Function to get first n lines from a file in S3
def get_first_n_lines_from_s3(filename, n):
"""
Get the first n lines of a file in S3
:param filename:
:param n:
:return:
"""
lines = []
for line in open_s3_file(filename):
lines.append(line)
if len(lines) >= n:
break
return lines
可以看到它复用了前面刚生成的 open_s3_file 辅助方法,而不是重新写一遍读取逻辑。
除了生成整个函数,它也能在函数内部插入代码片段,并在此过程中推断相关变量。例如在已有列表上写一句 # reverse the list order,它会补出:
lines.reverse()
注释用中文同样有效。素材中的实测里,用中文注释“写一个读取 csv 文件的函数”“创建一个简单的爬虫简单函数”“冒泡排序”“选择排序”等,都能得到对应的代码建议,并且往往一次给出多个候选,可以按 Tab 逐个确认。
第六步:运行安全扫描
CodeWhisperer 可以扫描代码,突出显示并定义安全问题。操作方式是打开想要扫描的文件,然后运行安全扫描(IDE 中会有对应的运行按钮)。
扫描完成后,问题会列在问题栏中。点击某一条可以定位到代码中对应的位置,把鼠标移到突出显示的代码上,就能看到建议的修复措施。
素材中的实测里,一次扫描在一个文件中发现了两个安全问题:一处是未加密的云服务凭证被记录在代码里,属于安全漏洞,建议重写代码修复;另一处建议把某个标识设置为 True。按建议修改后重新扫描,结果显示未找到问题。
第七步:留意引用跟踪提示
当生成的建议与已知的开源代码相似时,CodeWhisperer 会通过 Reference Log 给出提示。素材中的实测里,让 CodeWhisperer 实现一个创建 DynamoDB 表的函数,给出的建议被文件跟踪器标记为 MIT 许可证,并指出其引用了 Apache-2.0 许可证下的代码。接受这类带标记的代码后,CodeWhisperer 会自动记录相关的许可证信息,方便你在自己的代码中补充适当的许可证与归属说明。
一个完整示例
下面走一遍从注释到可运行函数的最小流程,以 Python 为例。
第一步,写注释。在新建的 Python 文件中输入:
# Function to emit a cloudwatch metric
第二步,查看函数定义。CodeWhisperer 会先给出函数签名,例如:
def put_metric_data(metric_name, metric_data):
如果它一次给出多个定义,用 Alt+C 在候选之间切换,挑一个参数命名最清楚的。你也可以直接手动改参数名,后续生成的函数体会沿用你改过的签名。
第三步,接受并生成函数体。按 Tab 接受后,得到类似下面的结果:
# Function to emit a cloudwatch metric
def put_metric_data(metric_name, metric_data):
"""
Put a metric data into cloudwatch
:param metric_name:
:param metric_data:
:return:
"""
cloudwatch = boto3.client('cloudwatch')
cloudwatch.put_metric_data(
Namespace='my_namespace',
MetricData=[
{
'MetricName': metric_name,
'Dimensions': [
{
'Name': 'string',
'Value': 'string'
},
],
'Unit': 'Seconds',
'Value': metric_data
},
]
)
第四步,检查与调整。生成结果是一份可用的起点,但命名空间、维度名称、单位这些占位值需要按你的实际场景替换。素材中的经验是,这类样板代码即使从零手写,第一步写出来的也大致是这个形态,所以把它当作重构的起点是合适的。
第五步,继续往下写。在函数之后继续输入新的注释,例如 # See if a number is prime,CodeWhisperer 会补出判断逻辑,按 Tab 接受;再写 for 语句,它会接着补出循环体。整个过程是逐段推进的,不需要一次写完整段代码。
如果这段代码涉及外部依赖或凭证,记得在运行前把占位值换成真实配置,并确认凭证没有以明文形式硬编码在源码里——这正是安全扫描会重点提示的一类问题。
注意事项
- 快捷键因 IDE 而异。素材中接受建议用 Tab、切换建议用 Alt+C,但这是演示环境下的按键,实际以你所装 IDE 的键位设置为准。
- 注释质量直接决定生成质量。描述越具体、越准确,推断出的逻辑越贴近需求。只写一两个词,得到的建议往往也需要更多修改。
- 生成结果需要人工复核。素材中多次强调,接受建议后要检查语义是否正确,尤其是涉及 API 调用、参数含义和边界条件的地方。
- 安全扫描的结论要落实。扫描只是指出问题,修改仍需自己完成;改完后建议重新扫描确认。
- 引用跟踪标记不要忽略。当建议被标记为引用了特定许可证下的代码时,需要在你的项目中补充相应的许可证与归属信息。
- 登录流程依赖浏览器与邮箱。如果验证码迟迟收不到,或浏览器授权页面没有正常打开,整个连接流程会中断,需要重新发起。
- 功能与可用范围会变化。支持的语言、IDE 版本、是否收费、各地区可用性等,请以官网当前信息为准。