作者 | 攻城先森
審校 | 張雅文
活動推薦: #生成式 AI 先鋒開發(fā)者集結(jié)令 #
免費體驗編程神器,豐厚大獎等你來拿!????????https:///f/rVuKYa
今天小王學(xué)長帶大家實際測試一下亞馬遜最近出的 AI 編程助手 Amazon CodeWhisperer,從不同角度和不同功能來看看這款編程助手是否可以幫助我更好的進行開發(fā)任務(wù)。
文章目錄:(大家先預(yù)覽下)
一、CodeWhisperer簡介
復(fù)制代碼
一、CodeWhisperer 簡介
CodeWhisperer 是亞?遜出品的一款基于機器學(xué)習(xí)的通用代碼生成器,可實時提供代碼建議。
在編寫代碼時,它會自動根據(jù)我們現(xiàn)有的代碼和注釋生成建議。從單行代碼建議到完整的函數(shù),它可為我們提供各種大小和范圍的個性化建議。
CodeWhisperer 還可以掃描我們的代碼以突出顯示和定義安全問題。
codewhispereropen in new window:亞馬遜官方出品
目前僅以插件的形式在VS Codeopen in new window、Jetbrainsopen in new window等 IDE 里面使用,如果想試一試可以用 VS Code,目前無限制免費使用免費,并且對環(huán)境要求不高,還輕量~
亞馬遜在 2022 年 6 月發(fā)布了 CodeWhisperer 預(yù)覽版,現(xiàn)在它支持 Python、Java 和 JavaScript。
CodeWhisperer 經(jīng)過數(shù)十億行代碼的訓(xùn)練,由機器學(xué)習(xí)提供支持,旨在實現(xiàn)相同的目標(biāo)。無論我們是學(xué)生、新開發(fā)人員,還是經(jīng)驗豐富的專業(yè)人士,CodeWhisperer 都有助于我們提高工作效率。
其支持多種 IDE 和語言。要開始使用,我們只需安裝合適的AWS IDE Toolkit,啟用 CodeWhisperer 功能,輸入我們的預(yù)覽訪問代碼,然后開始鍵入:
CodeWhisperer 可以持續(xù)檢查我們的代碼和注釋,并為我們提供語法正確的推薦。這些推薦根據(jù)您的編碼風(fēng)格和變量名稱合成,而不僅僅是代碼段。
CodeWhisperer 使用多個上下文線索來提供推薦,包括源代碼中的光標(biāo)位置、光標(biāo)前面的代碼、注釋以及同一項目中其他文件中的代碼。您可以按原樣使用推薦,也可以根據(jù)需要對其進行改善和自定義。正如我之前所提到的,我們使用從開源存儲庫、內(nèi)部 Amazon 存儲庫、API 文檔和論壇中提取的數(shù)十億行代碼訓(xùn)練(并將繼續(xù)訓(xùn)練)CodeWhisperer。
在 AWS 博客的一篇文章中,Mark Richman 解釋說,CodeWhisperer 的模型是在“包括 Amazon 開源代碼在內(nèi)的各種數(shù)據(jù)源”上訓(xùn)練的。有了這個語料庫(顯然確實存在)完善 CodeWhisperer 的模型,編寫從 S3 讀取文件的代碼應(yīng)該是一個很好的測試用例。
在使用 CodeWhisperer(CW)時,我們需要寫一個注釋,描述我們希望函數(shù)去做什么。注釋的描述性和準(zhǔn)確性越高,系統(tǒng)就越能更好地推斷出我們想要的邏輯。
Function to open an S3 file
復(fù)制代碼
比如注釋以 Function 開頭,讓 CW 知道你想要創(chuàng)建一個函數(shù)。也就是說,你需要添加一個注釋,作為給 CW 的提示。
CW 分析注釋并生成一個函數(shù)的定義。此時,你可以在生成函數(shù)體之前修改函數(shù)定義。CW 還可能提供多種函數(shù)定義供你選擇。
IntelliJ 集成 CodeWhisperer 的截圖:
點擊“插入代碼”,你的函數(shù)就在注釋的下方創(chuàng)建好了。注意 CodeWhisperer 不僅插入了代碼,還創(chuàng)建了一個文檔字符串。
# Function to open an S3 file
復(fù)制代碼
看起來不錯!這段代碼實現(xiàn)了你的注釋所期望的功能,并且是在幾秒鐘內(nèi)就生成了。
節(jié)省了查找 boto3 API 的時間,你只需要檢查代碼,確保語義正確。
接著看看提出更多要求時,會發(fā)生什么。
這有一個很有用的例子:寫一個函數(shù)從 S3 的文件中返回前“n”行。
# Function to get first n lines from a file in S3
復(fù)制代碼
真厲害!CodeWhisperer 使用了之前創(chuàng)建的輔助方法 open_s3_file,并生成了正確的函數(shù)。
在 CW 生成函數(shù)體之前,你可以修改參數(shù)名,提高代碼的可讀性。例如,如果我們輸入:
# Function to find common elements in lists
復(fù)制代碼
CW 會提示:
def find_common_elements(list1, list2)
復(fù)制代碼
在生成函數(shù)體之前,我們可以修改函數(shù)定義,使其更具描述性:
def find_common_elements(first, second)
復(fù)制代碼
如果我們接受它的函數(shù)定義,CodeWhisperer 將使用函數(shù)簽名和注釋來構(gòu)建函數(shù)體。得到的函數(shù)將使用改進后的參數(shù)名。
# Function to find common elements in lists
復(fù)制代碼
CodeWhisperer 不僅僅可以創(chuàng)建整個函數(shù);它還可以在函數(shù)中插入代碼片段,并在過程中推斷相關(guān)變量。
# reverse the list order
復(fù)制代碼
1.1 CodeWhisperer 是一個重要的生產(chǎn)力助推器
使用 CodeWhisperer,我能夠更快地編寫代碼。到目前為止,最大的價值是 S3 示例所演示的功能。
如果我自己寫代碼,大部分時間將會用來查找 boto API 文檔,以確保寫出正確的調(diào)用。使用 CodeWhisperer,則只需三秒鐘。
這讓我想到了一段曾花了很多時間的煩人代碼:給 CloudWatch 發(fā)送數(shù)據(jù)。讓我們看看 CodeWhisperer 能否有所幫助,試試提供注釋:“Function to emit a CloudWatch metric”。
# Function to emit a cloudwatch metric
復(fù)制代碼
非常有用!CW 為我節(jié)省了許多打字和查閱 API 文檔的時間。
我有可能需要重構(gòu)這段代碼,但即使我從零開始編寫它,第一步也要寫出類似這樣的原始邏輯。如今只花三秒鐘,我節(jié)省了編寫大量樣板代碼的時間,有了一個很好的自定義或重構(gòu)的起點。
1.2 CodeWhisperer 的實際應(yīng)用
我在 PyCharm 中安裝了 CodeWhisperer ,并對其進行了測試。以下是一些示例,向您展示了它可以執(zhí)行的操作。我想構(gòu)建一個質(zhì)數(shù)列表。我鍵入 # See if a number is pr。CodeWhisperer 完成此操作,然后我按下 TAB(實際鍵特定于每個 IDE)接受推薦:
在下一行,我按下 Alt+C(同樣是 IDE 特定),然后我可以在一對函數(shù)定義之間進行選擇。我接受第一個函數(shù),CodeWhisperer 推薦函數(shù)體,以下是我所擁有的:
我編寫 for 語句,CodeWhisperer 推薦循環(huán)的主體:
CodeWhisperer 還可以幫助我編寫用于訪問各種 AWS 服務(wù)的代碼。我從 # create S3 bucket 開始,然后按 TAB 鍵完成剩余部分:
看到這里,大家是不是覺得還不錯,接下來教大家如何安裝,很簡單的~
二、CodeWhisperer 安裝教程2.1 IntelliJ IDEA 安裝 CodeWhisperer 插件
在 IDEA 中打開配置窗?,選擇 Plugins,搜索"AWSToolkit",點擊 Install,點擊 OK 按鈕,如下圖:
安裝完之后重啟 IDEA,如下圖:
打開 AWS Toolkit 視圖(菜單 View/Tool Windows/AWS Toolkit),點擊"Developer Tools"tab??,選擇“CodeWhisperer/Start",如下圖:
彈出的窗?中選擇“Use a personal email to sign up and sign in with AWS Builder ID",點擊“Connect”按鈕,如下圖:
在彈出的窗?中,選擇“Open and Copy Code”,如下圖:
此時會在瀏覽器中打開?個??,按 ctrl-v 粘貼 code 值,點擊“Next“,如下圖:
輸?郵箱地址,點擊"Next",如下圖:
輸?名字,點擊“Next”,CodeWhisperer 會向郵箱中發(fā)送?個驗證碼,如下圖:
打開郵箱,可以看到驗證碼,如下圖:
復(fù)制驗證碼,粘貼到輸入框,點擊“Verify”按鈕,如下圖:
設(shè)置密碼,點擊“Create AWS Builder ID“,如下圖:
在最后?個??中點擊“Allow”按鈕,如下圖:
出現(xiàn)如下提示后,即表示注冊 AWS builder ID 成功,如下圖:
返回 IDEA,在 AWS Toolkit 視圖中的 Developer Tools 中可以打開或關(guān)閉代碼?成功能,如下圖:
此時,就可以愉快的使用 AI 編程了。
2.2 VSCode 安裝 CodeWhisperer 插件
安裝 AWS Toolkit 插件,具體到 VS Code 側(cè)邊欄搜索并安裝
側(cè)邊欄點擊 aws,>> DEVELIOPER TOOL >> CodeWhisper >> Start
在下拉菜單中點擊 Use a personal email to sign up and sign in with AWS Builder ID
點擊 Copy Code and Proceed,這將自動復(fù)制代碼
一般會提示外部網(wǎng)站打開提醒,選擇打開
打開網(wǎng)站后,輸入點擊 Copy Code and Proceed 時得到的代碼,點擊 Next
輸入自己的郵箱地址(同時登錄你的郵箱等待驗證碼),點擊 Next
重復(fù)之前步驟,但是由于已經(jīng)在瀏覽器上登錄成功了,所以步驟非常簡單 粘貼代碼后將會提示以下內(nèi)容,點擊 Allow 即可
等左下角的 AWS 擴展顏色正常,對勾狀態(tài),說明連接成功
此時,就可以愉快的使用 AI 編程了。
2.3 PyCharm 安裝 CodeWhisperer
1.打開 Pycharm 插件管理
在 JetBrains IDE 中,導(dǎo)航到設(shè)置菜單(在 macOS 上為?+,在 Windows 上為文件→設(shè)置),然后單擊左側(cè)菜單上的“插件”。
在菜單頂部,單擊Marketplace并在搜索欄中鍵入 “AWS Tookit”。然后點擊安裝。
2.安裝完成后重啟 IDE
3.將 Pycharm 連接到 AWS(AWS Build ID 創(chuàng)建),重復(fù)之前步驟
IDE 重新啟動后,您將看到一個新的AWS Toolkit工具窗口。還可以通過View->Tool Windows->AWS Toolkit(視圖 -
然后點擊"Developer Tools"標(biāo)簽,選擇“CodeWhisperer/Start"
此時,就可以愉快的在 PyCharm 里使用 AI 編程了。
2.4 快捷鍵使用方法
全程需要按快捷鍵調(diào)用 Codewhisperer,主要的幾個用法如下:
三、簡單自動編碼演示
回到 IDEA,看到如下界面,即表示注冊并啟動成功:
下面我們新建任意 Java 文件,看看他如何能夠幫助我們自動生成代碼。
3.1 單行代碼自動補全
輸入字符串 public。根據(jù)輸入,CodeWhisperer 生成了建議列表
3.2 CodeWhisperer 生成完整代碼
CodeWhisperer 可以根據(jù)編寫的注釋生成完整的函數(shù)。
類似于 if/for/while 等代碼塊的生成。
大家如果看到這有疑問,可以接著看第四部分,有詳細的測試說明。
3.3 其根據(jù)簽名自動生成代碼
看到這里,大家應(yīng)該有個簡單的了解了,咱們接著往下看~
四、AI 編程代碼實測及項目體驗4.1 簡單函數(shù)代碼測試
首先,我先用中文注釋了“寫一個讀取 csv 文件的函數(shù)” 回車后可以看到 CodeWhisperer 自動顯示出來
按快捷鍵 Tab 確認鍵入后,接著回車后 CodeWhisperer 又自動生成了以下代碼:
感覺這個 CodeWhisperer 自動生成的代碼還不錯,我選擇了 Insert Code 鍵入使用。
緊接著用中文又注釋了“創(chuàng)建一個簡單的爬蟲簡單函數(shù)”
在這選擇了第三個自動代碼,同樣 Tab 鍵入。
接下來是注釋“冒泡排序”后回車
注釋“選擇排序”后回車
中文注釋實測完后又對英文注釋進行了測試,如下圖所示:
乘勝追擊,又對創(chuàng)建和上傳文件代碼進行自動生成測試,同樣得到了預(yù)期的效果。
對于簡單的函數(shù)實測讓我感覺這個工具還挺不錯的,因為可以根據(jù)自己想要的注釋自動生成多個代碼建議,這樣不僅節(jié)省了大量的編碼時間,而且多種代碼建議可供選擇,一定程度上提升了自己編寫代碼的質(zhì)量。
4.2 代碼安全掃描實測
接下來用 CodeWhisperer 去掃描我們代碼中的安全漏洞,以下是運行按鈕的位置
打開我想掃描的文件,然后運行安全掃描
結(jié)果發(fā)現(xiàn) CodeWhisperer 探測到該文件中有兩個安全問題。 通過查看問題欄,點擊事件定位到代碼中,我們將鼠標(biāo)移入到突出顯示的代碼,查看建議的措施,如下所示,問題指出在該例子中未加密的 AWS 憑證被記錄下來,是一個安全漏洞,它建議我們重寫代碼并且修復(fù)該漏洞。
同樣查看第二個問題,CodeWhisperer 告訴我們講應(yīng)該把標(biāo)識設(shè)置為 True。
根據(jù) CodeWhisperer 的建議,我進行了對應(yīng)修改,兩處安全問題修改如下:
修改后重新掃描了文件,掃描完成,顯示沒找到問題。
對于安全掃描這項功能,我還是挺驚艷的,沒想到能實測找出問題并給出對應(yīng)的解決問題,因為這一點我對 CodeWhisperer 的好感又增加了。
4.3 代碼引用跟蹤功能實測
在這里想實現(xiàn)一個函數(shù)來創(chuàng)建一個 dynamo DB 表。 如下圖所示進行了實際測試 “implement a function to create a dynamoDB table”
以下是 CodeWhisperer Reference Log 給出的建議:
根據(jù)代碼建議標(biāo)注被文件跟蹤器標(biāo)記為 MIT 許可證,其引用了 Apache-2.0 許可證下的代碼。我選擇接受了這些標(biāo)記代碼,然后發(fā)現(xiàn) CodeWhisperer 自動記錄了引用我需要的許可證信息,這樣我就可以在我的代碼上添加適當(dāng)?shù)脑S可證和歸屬信息。 這個功能實測完感覺也挺有用的,對代碼涉及到的許可證和歸屬信息問題進行了有效解決。
4.4 計算機視覺工程項目實測
在對官網(wǎng)顯示的幾項功能測試完后,又在平時用到的實際項目上進行了測試,我選取了常用的一些 CV 檢測模型,以下是 ShuffleNet 的實際測試效果。
首先,我在實例化訓(xùn)練數(shù)據(jù)集上,對缺失的代碼段進行測試,看 CodeWhisperer 是否能聯(lián)系上下文進行代碼補全。
進行回車操作后,CodeWhisperer 顯現(xiàn)出來了所給的建議。
目前看所給的建議正確,接著我又對凍結(jié)權(quán)重部分進行了測試,
這回我又利用了 CodeWhisperer 的快捷鍵 ALT+C 進行了測試,
結(jié)果顯示自動生成了 False 選項,測試到這里真的讓我覺得這個工具是真的好,可以幫助我解決代碼中遇到的很多問題。 在訓(xùn)練代碼中測試完,我又接著對檢測模型代碼進行了測試,如下圖所示在 transform 指向中為我建議了 img。
最后,我對檢測模型代碼進行了運行測試,正確的檢測出圖片為蒲公英 dandelion。
總的來說,CodeWhisperer 輔助我完成了 CV 模型的代碼編寫和模型檢測,達到了官網(wǎng)所展示的預(yù)期。接下來,我要讓 CodeWhisperer 幫助我完成更復(fù)雜的任務(wù)了,哈哈
五、Amazon CodeWhisperer 實測體驗總結(jié)5.1 CodeWhisperer 可以幫助我成為一個更好的開發(fā)者嗎?
通過以上的測試,我覺得它可以幫助我成為一個更好的開發(fā)者。
首先,它可以為我節(jié)省大量的時間和精力,讓我能夠?qū)W⒂诟倪M、重構(gòu)和測試。
其次,它通過承擔(dān)一些同質(zhì)化的繁重工作,讓我有機會成為一個更好的程序開發(fā)人員。
比如上面的測試的例子是 Amazon 工具(經(jīng)過 Amazon 開源代碼訓(xùn)練)能夠表現(xiàn)出色的例子。
當(dāng)然,在大多數(shù)開發(fā)人員需要花費很多時間的地方,比如編寫領(lǐng)域相關(guān)的邏輯時,我又多測試了一下,讓我們看看 CodeWhisperer 會不會也有幫助。
比如從 Python 文檔中的數(shù)據(jù)類示例開始。
@dataclass
其實我想知道 CodeWhisperer 是否可以向這個類添加一個方法。讓我們看看如果添加注釋:" Function that return this item costs more than $10",會發(fā)生什么?
@dataclass
結(jié)果是非??岬摹V档米⒁獾氖?,CodeWhisperer 給函數(shù)起了一個直觀的名字,并包含了對 self 的引用。
接著,讓我們嘗試用 CodeWhisperer 來做測試,看是否會觸及它的極限。
# Function to test InventoryItem class
在上面的代碼中,我輸入了注釋,CW 自動完成了剩下的工作。 測試似乎是一個極好的證明 CW 可以節(jié)省時間的例子。我不需要浪費時間去想測試的值,也不用輸入所有的成員變量和方法。
總的來說,可以幫助我成為一個更好的開發(fā)者,但是任何輔助工具都有利有弊,CodeWhisperer 也是才發(fā)布不久,通過測試我也想邀請大家去進行實際測試,可以對使用 CodeWhisperer 遇到的問題大家一起相互討論,一起促進這個編程助手迭代和完善~
版權(quán)聲明: 本文為 InfoQ 作者【攻城先森】的原創(chuàng)文章。
原文鏈接:【https://xie./article/909704e9a44302aa28b2a44e9】。