如何使用 Amazon CodeWhisperer 写代码

coding入门9 分钟阅读2026/7/21

当时我正埋头写一个 Python 项目,又在写那种解析 CSV 文件然后把结果上传到 S3 的脚本。我发现自己不停地要在 IDE 和浏览器标签页之间切来切去——查 boto3 的具体语法,核对存储桶策略,还要找合适的 pandas 方法。这样来回切了两个小时后,我的心流状态彻底被搞没了。我之前听说过 Amazon CodeWhisperer,一开始我对这种又双叒叕一个自动补全工具是持怀疑态度的,但还是决定试一把。接下来我就聊聊从安装到日常实际使用的体验——以及这一路上我踩过的坑和学到的东西。

避不开的话题:CodeWhisperer 与 Amazon Q

在正式开始之前,我得先说一个一开始就把我搞懵的事。如果你现在去搜“Amazon CodeWhisperer”,会看到大量关于“Amazon Q Developer”的内容。

CodeWhisperer 的功能正在被整合到 Amazon Q Developer 里面。我在这里说的核心代码生成和补全功能,底层逻辑还是原来那一套,只是品牌名和扩展插件的名字变了。现在你去装这个工具包,会看到醒目的“Amazon Q”字样,但行内代码提示依然是 CodeWhisperer 的体验。我当时懵了有二十分钟,以为自己装错东西了。其实你没装错,这只是 AWS 把他们的开发者工具统一收到 Q 这个品牌大伞下而已。

在 VS Code 中进行配置

我主要用 VS Code 写代码,所以就拿它来演示。设置过程出奇地简单,不过有个身份验证的步骤,如果你没心理准备,可能会觉得有点绕。

第一步: 打开 VS Code,进入扩展市场。搜索“AWS Toolkit”并安装。

第二步: 装好后,侧边栏会出现 AWS 的图标。点开它,你会看到 Developer Tools 区域,里面有 CodeWhisperer(或者 Amazon Q,取决于你看这篇文章的时间)。

第三步: 这是我遇到的第一个坑。你需要用 AWS Builder ID 来进行身份验证。这是一个免费的个人资料——跟你常规的 AWS 账号凭证是两码事。我一开始试着用标准的 AWS IAM 用户登录,根本行不通。你必须专门创建或使用一个 Builder ID。工具包会打开一个浏览器窗口,引导你注册 Builder ID(免费,只需要个邮箱就行),然后再重定向回 VS Code。

从头到尾,设置大概花了我 10 分钟。免费的 Individual 个人版就完全够用了,包含了核心的代码提示功能。

用 CodeWhisperer 写代码

重头戏来了。我回到之前那个让我头疼的 S3 上传脚本。CodeWhisperer 的神奇之处在于,它能对自然语言注释做出反应。

我敲了一段注释,准确描述了我想要的功能:

# Function to upload a file to an S3 bucket

我一敲回车,立刻就弹出了一个灰色的代码提示。我按右箭头键接受,CodeWhisperer 就生成了这段代码:

import boto3

def upload_to_s3(file_name, bucket, object_name=None):
    """Upload a file to an S3 bucket

    :param file_name: File to upload
    :param bucket: Bucket to upload to
    :param object_name: S3 object name. If not specified then file_name is used
    :return: True if file was uploaded, else False
    """

    if object_name is None:
        object_name = file_name

    s3_client = boto3.client('s3')
    try:
        response = s3_client.upload_file(file_name, bucket, object_name)
    except Exception as e:
        print(e)
        return False
    return True

那一刻我是真的“哇”了一声。它不仅给了我一个代码骨架,而是给了一个功能完整、带错误处理、注释规范的函数。我本来还以为自己得手动去写 boto3 客户端的配置,但它直接从“S3”这个上下文推断出了我需要的库。

上下文才是王道

我想测试一下它的极限,就试了一个更贴合我数据管道的场景。我写道:

import pandas as pd

# Read a CSV file, extract the second column, and return unique values sorted alphabetically

CodeWhisperer 注意到了 pandas 的导入,然后生成了:

def get_unique_sorted_values(csv_path):
    df = pd.read_csv(csv_path)
    second_column = df.iloc[:, 1]
    unique_values = second_column.unique()
    return sorted(unique_values)

它正确地使用了 iloc 来进行位置索引,而不是想当然地以为我有列名,而且它还把我需要的一系列 pandas 方法串了起来。这种上下文感知能力——识别已导入的库并据此调整生成的代码——正是它区别于直接从 Stack Overflow 复制粘贴的地方。

惊喜与踩坑

不过,它也不是完美的。我遇到了几个值得注意的坑:

  1. Tab 键陷阱: CodeWhisperer 用 Tab 键来接受建议。如果你和我一样,习惯性地按 Tab 键来缩进,你就会不小心接受其实不需要的建议。我只好重新训练自己的肌肉记忆,改成先按 Escape 取消建议,然后再按 Tab 正常缩进。第一天用的时候真的挺抓狂的。

  2. 多行代码需要耐心: 有时候,接受一条建议后,CodeWhisperer 会稍微停顿一下,才会生成下一个逻辑代码块。我经常忍不住开始手动敲下一行,结果它的建议又弹出来,打乱了我的节奏。学会在接受一个代码块后等个半秒钟,能让你避免跟工具较劲。

  3. AWS 偏好: 考虑到这是亚马逊的产品,这点倒也不意外,但 CodeWhisperer 非常倾向于默认使用 AWS SDK。当我让它“创建一个队列”时,它立刻用 Amazon SQS 生成了代码。而其实我想要的是用 redis-py 实现的基于 Redis 的队列。如果你想要非 AWS 的解决方案,必须在注释或导入时写得非常明确。

引用追踪

有一个功能我没想到,但真的非常实用,那就是引用追踪。偶尔,CodeWhisperer 建议的代码会和它训练数据中的开源代码高度吻合。遇到这种情况,IDE 里会弹出一个通知,显示该代码库的 URL、开源协议以及匹配的置信度。

如果你在写闭源商业代码,需要避免开源协议纠纷(尤其是 GPL 协议的代码),这个功能简直太重要了。你可以选择接受建议并记录归属,或者拒绝它自己重写。我现在开始留意这些通知,这也让我在引入代码时对开源协议问题更加谨慎了。

实用小技巧

用了 CodeWhisperer 几周后,我发现这些技巧最管用:

  • 先写注释,再写代码。 注释写得越清楚,建议就越好。写“排序列表”可能只会给你一个基础的冒泡排序;但写“使用 Python 内置的 sorted 函数,按 'date' 键降序排列字典列表”,它就会给你真正想要的代码。
  • 在要建议之前,先在文件顶部导入库。 CodeWhisperer 会读取你现有的导入来理解上下文。如果你导入了 requests,它就会建议使用 requests 的 HTTP 代码;如果你导入 httpx,它就会立刻切换思路。
  • 善用手动触发。 如果建议突然不弹出来了(偶尔会有这种情况),你可以用 Mac 上的 Option + C 或 Windows 上的 Alt + C 来手动触发建议。

实话实说的局限性

CodeWhisperer 不会替你做应用架构设计。它写样板代码、工具函数和标准模式非常拿手,但在处理高度定制化的业务逻辑或复杂的状态管理时就有些吃力了。我还发现它在 Python、Java 和 JavaScript 中表现最好——也就是它最初支持的那几种语言。虽然也支持其他语言,但给出的建议明显感觉没那么有把握,也没那么准确。

另外,向 Amazon Q Developer 的过渡也让它的未来有点不确定。如果你正在围绕 CodeWhisperer 搭建工作流,得注意它的界面和功能集目前正在 Q 的品牌下不断调整。

尽管有这些前提,CodeWhisperer 已经在我的 VS Code 配置中占据了一个永久的位置。它并没有取代我对所写代码的理解,但它确实消除了那种扼杀生产力的繁琐上下文切换。看在它是免费的份上,花 10 分钟装一个绝对值。

相关 Agent

C

光标编辑器

AI驱动的代码编辑器,支持智能补全和对话。

了解更多 →