零:前言
隨著時間的推移,人工智能技術(shù)以驚人的速度向前發(fā)展,正掀起著全新的編程范式革命。不僅僅局限于代碼生成,智能編程助手等創(chuàng)新應用也進一步提升了開發(fā)效率和代碼質(zhì)量,極大地推動著軟件開發(fā)領(lǐng)域的快速繁榮。
當前市場上涌現(xiàn)出越來越多的智能編程工具,它們的出現(xiàn)旨在幫助開發(fā)者更加迅速而安全地構(gòu)建應用程序。其中,亞馬遜云科技的AI編程助手Amazon?CodeWhisperer以其卓越的性能脫穎而出,有效提升了開發(fā)人員的生產(chǎn)力。引入這款強大的工具,開發(fā)者們能夠在創(chuàng)造、設計和完善項目時更為高效,取得令人矚目的成果。它為開發(fā)者們搭建起了一個便捷的橋梁,讓他們能夠更加聰明地利用人工智能技術(shù)來加速創(chuàng)新和優(yōu)化編程流程。
今天讓虛竹哥帶大家了解下Amazon?CodeWhisperer。
一、Amazon?CodeWhisperer
1.1、開發(fā)常見痛點
- 在開發(fā)過程中,編寫樣板代碼是一個重復且乏味的任務
- 開發(fā)人員需要在不熟悉的編程語言中進行編碼時,語法錯誤和問題可能會成為瓶頸
- 安全漏洞是軟件開發(fā)中一個嚴重的問題,但往往很難及早發(fā)現(xiàn)和修復
- 打字錯誤和典型錯誤會導致代碼不正常工作或產(chǎn)生潛在的問題,給開發(fā)人員帶來不必要的麻煩和調(diào)試時間
1.2、Amazon?CodeWhisperer是什么
Amazon?CodeWhisperer是一款強大的智能編程助手,它秉承著訓練了數(shù)十億行代碼的經(jīng)驗。借助于其先進的算法和深度學習技術(shù),CodeWhisperer能夠以驚人的準確度和實時性為開發(fā)者們提供各種代碼建議。
1.3、優(yōu)勢
- 更快速地完成更多工作:CodeWhisperer通過快速生成準確的代碼建議,幫助開發(fā)者在編碼時節(jié)省大量的時間。它可以實時生成從代碼片段到全函數(shù)的代碼建議,并幫助開發(fā)者使用不熟悉的API進行構(gòu)建,從而提高工作效率和生產(chǎn)力。
- 自信地進行編碼:CodeWhisperer可以標記或篩選與開源訓練數(shù)據(jù)相似的代碼建議,并提供相關(guān)開源項目的存儲庫URL和許可證信息。這使得開發(fā)者可以方便地查看和添加歸因,促進了代碼共享和合作。開發(fā)者可以使用這些代碼建議來創(chuàng)建高質(zhì)量的軟件,而且可以放心地使用這些建議,因為它們都經(jīng)過了專業(yè)訓練和驗證。
- 增強代碼安全性:CodeWhisperer能夠掃描難以發(fā)現(xiàn)的漏洞,并給出修復建議。它遵循OWASP等安全標準,幫助開發(fā)者及時修復安全漏洞,提高軟件的可靠性和穩(wěn)定性。CodeWhisperer還可以檢查代碼中可能存在的漏洞,并給出相應的警告,幫助開發(fā)者在發(fā)布前修復漏洞和錯誤。
- 提升開發(fā)人員工作效率:CodeWhisperer可以大大提高開發(fā)者的工作效率。根據(jù)生產(chǎn)力挑戰(zhàn)賽的結(jié)果,在使用CodeWhisperer的情況下,參與者成功完成任務的可能性增加了27%,平均完成任務的速度提高了57%。開發(fā)團隊可以減少在創(chuàng)建樣板文件和重復代碼模式上的時間,將更多時間花在構(gòu)建優(yōu)秀的軟件上。
- 支持多語言和多IDE:CodeWhisperer支持近15種編程語言,包括Python、Java、JavaScript、C++等。它可以與流行的IDE(如VS?Code、IntelliJ?IDEA)無縫集成,為開發(fā)者提供高效便捷的開發(fā)體驗。開發(fā)者可以使用他們喜歡的環(huán)境來編寫他們的代碼,并且還可以輕松地在不同的項目中使用CodeWhisperer。
- 可以即用即開,隨時關(guān)閉:CodeWhisperer可以實現(xiàn)即用即開,開發(fā)者可以在需要的時候打開它,并在不需要的時候隨時關(guān)閉。這使得開發(fā)者可以更好地控制他們的工作負載,而不必擔心CodeWhisperer會導致其他問題。
- 可以免費使用:CodeWhisperer可以免費使用,這對于個人程序員和小型團隊來說是非常有吸引力的。它提供了一個低成本的方法,讓開發(fā)者能夠輕松地獲得高質(zhì)量的代碼建議,而不必擔心成本。
- 可以支持學習和技能增長:CodeWhisperer可以幫助開發(fā)者學習新的編碼技術(shù)和API。使用CodeWhisperer,開發(fā)者可以輕松地創(chuàng)建新的代碼,并且可以獲得有關(guān)如何改進他們的工作流程的建議。CodeWhisperer還可以幫助開發(fā)者提高他們的技能水平,因為它可以提供專業(yè)級的代碼建議和建設性的反饋。
- 可以提供靈活的輸出選項:CodeWhisperer可以以多種格式提供代碼建議,包括代碼段、函數(shù)、類和整個項目等。開發(fā)者可以選擇適合他們需求的輸出選項,從而使CodeWhisperer更加靈活和適應性強。
二、適用場景
- 編寫樣板代碼:開發(fā)人員可以使用CodeWhisperer來快速生成樣板代碼。例如,只需輸入"為ML數(shù)據(jù)創(chuàng)建預處理腳本的類",CodeWhisperer就能夠生成整個預處理數(shù)據(jù)類的代碼塊,節(jié)省了編寫樣板代碼的時間。
- 使用不熟悉的語言進行編碼:CodeWhisperer可以幫助開發(fā)人員在不熟悉的編程語言中進行編碼。比如,一個新加入團隊的Java用戶可以借助CodeWhisperer輕松開始編寫Python代碼,而無需擔心語法錯誤。
- 檢測代碼中的安全漏洞:CodeWhisperer具備檢測代碼中安全漏洞的功能。開發(fā)人員可以在IDE中選擇運行安全掃描,CodeWhisperer會提供有關(guān)安全問題的詳細信息。這有助于開發(fā)人員及早發(fā)現(xiàn)并解決潛在的安全問題。
- 消除打字錯誤和典型錯誤:CodeWhisperer利用人工智能技術(shù),幫助開發(fā)人員消除打字錯誤和典型錯誤,從而提高代碼的準確性。
- 減少重復編碼:CodeWhisperer通過推薦可能需要的后續(xù)代碼片段,減少了重復編碼的工作。開發(fā)人員可以更快速地編寫代碼,避免重復書寫相似的代碼段。
- 其他常規(guī)任務和使用不熟悉的API場景:CodeWhisperer還可以幫助開發(fā)人員完成其他常規(guī)、耗時的無差別任務,比如編寫讀寫文件、處理圖像、編寫單元測試等代碼。它也適用于在使用不熟悉的API或SDK時構(gòu)建示例代碼。
安裝
在IDEA上安裝Amazon CodeWhisperer的插件(虛竹哥用的是IDEA2022.1.4版本)
按照以下步驟在IDEA中安裝Amazon?Toolkit插件:
1、打開IDEA,點擊右上角的?"File"?菜單,然后選擇?"Settings"。
2、在設置窗口左側(cè)的菜單欄中,點擊?"Plugins"。
3、在?Plugins?頁面右上角,輸入?"Amazon?Toolkit",并從搜索結(jié)果中選擇相應的插件。
4、點擊?"Install"?按鈕開始安裝插件。
5、安裝完成后,點擊?"OK"?按鈕。
注意,安裝完成后,要重啟IDEA,才會生效。
依次點擊?"View"?->?"Tool?Windows"?->?"Amazon?Toolkit"。這將打開Amazon?Toolkit視圖。
在Amazon?Toolkit視圖上,您將看到一個名為"Developer?Tools"的標簽頁。點擊這個標簽頁。
在"Developer?Tools"頁面上,您將看到一個名為"CodeWhisperer"的選項。點擊這個選項。
在CodeWhisperer頁面上,您將看到一個名為"Start"的按鈕。點擊這個按鈕
選擇“Use?a?personal?email?to?sign?up?and?sign?in?with?Amazon?Builder?ID”
然后點擊“connect”
在彈窗中,選點擊復制,這是復制code
然后選擇“Open?and?Copy?Code”
會彈出瀏覽器頁面,輸入復制的code,提交
輸?郵箱地址,點擊"下一步"
輸?名字,點擊“Next”,CodeWhisperer會向郵箱中發(fā)送?個驗證碼
去郵箱找到驗證碼,復制,下一步
設置密碼,密碼要求比較高
出現(xiàn)如圖這個,就說明創(chuàng)建成功了。
實戰(zhàn)1:
補全注釋功能
可以根據(jù)前文補全注釋,看效果還不錯。不喜歡寫注釋人的福音。
實戰(zhàn)2:
寫了一個注釋,想寫個冒泡排序。自動幫我生成代碼了
選擇insert?code?
在方法體里回車,會再自動生成代碼
代碼生成了
package?com.xiaoxuzhu.csdn;
public?class?TestCodeWhisperer?{
????/**
?????*?寫個冒泡排序
?????*/
????public?static?void?main(String[]?args)?{
????????int[]?arr?=?{1,?2,?3,?4,?5,?6,?7,?8,?9,?10};
????????int?temp?=?0;
????????for?(int?i?=?0;?i?<?arr.length?-?1;?i++)?{
????????????for?(int?j?=?0;?j?<?arr.length?-?1?-?i;?j++)?{
????????????????if?(arr[j]?>?arr[j?+?1])?{
????????????????????temp?=?arr[j];
????????????????????arr[j]?=?arr[j?+?1];
????????????????????arr[j?+?1]?=?temp;
????????????????}
????????????}
????????}
????????for?(int?i?=?0;?i?<?arr.length;?i++)?{
????????????System.out.println(arr[i]);
????????}
????}
}
運行結(jié)果:
實戰(zhàn)3:
實戰(zhàn)1只是一個簡單的排序算法,要求也不高?,F(xiàn)在來升級下實驗。輸入一段話,大致內(nèi)容要求是:求每次劃動窗口的最大值。
給你一個整數(shù)數(shù)組?nums,有一個大小為?k?的滑動窗口從數(shù)組的最左側(cè)移動到數(shù)組的最右側(cè)。你只可以看到在滑動窗口內(nèi)的?k?個數(shù)字?;瑒哟翱诿看沃幌蛴乙苿右晃弧?/span>
?要求返回?滑動窗口中的最大值?。
選擇insert?code?
選擇insert?code?
最后生成完整的代碼。
package?com.xiaoxuzhu.csdn;
public?class?TestCodeWhisperer2?{
????/**
?????*?給你一個整數(shù)數(shù)組?nums,有一個大小為?k?的滑動窗口從數(shù)組的最左側(cè)移動到數(shù)組的最右側(cè)。你只可以看到在滑動窗口內(nèi)的?k?個數(shù)字?;瑒哟翱诿看沃幌蛴乙苿右晃?。
?????*?<p>
?????*?返回?滑動窗口中的最大值?。
?????*/
????public?static?void?main(String[]?args)?{
????????int[]?nums?=?{1,?3,?-1,?-3,?5,?3,?6,?7};
????????int?k?=?3;
????????int[]?res?=?maxSlidingWindow(nums,?k);
????????for?(int?i?:?res)?{
????????????System.out.println(i);
????????}
????}
????public?static?int[]?maxSlidingWindow(int[]?nums,?int?k)?{
????????int[]?res?=?new?int[nums.length?-?k?+?1];
????????int?index?=?0;
????????for?(int?i?=?0;?i?<?nums.length?-?k?+?1;?i++)?{
????????????int?max?=?Integer.MIN_VALUE;
????????????for?(int?j?=?i;?j?<?i?+?k;?j++)?{
????????????????max?=?Math.max(max,?nums[j]);
????????????}
????????????res[index++]?=?max;
????????}
????????return?res;
????}
}
執(zhí)行的結(jié)果是正確的
實驗的過程很絲滑,而且ai的理解能力還是很強的,能正確地理解虛竹哥的意思并生成對應的代碼。
實戰(zhàn)4:
從leetcode中選一個難度級別比較高的算法題目,看ai能不能理解,并進行正確解答。
選一個動態(tài)規(guī)劃里,困難級別的:
題目是:
給你一個只包含?'('?和?')'?的字符串,找出最長有效(格式正確且連續(xù))括號子串的長度。
開始ai寫代碼
按提示內(nèi)容,不斷插入代碼
最終生成代碼:
跑一下結(jié)果,為2,是對的。
這樣就夠了嗎?不!讓leetcode來判斷下生成的代碼質(zhì)量如何
復制代碼到leetcode里,然后先運行下
過啦~
提交
擊敗100%~?
此時此刻,有個BGM響起:無敵是多么,多么寂寞~
實戰(zhàn)5:
寫個小游戲,看下能不能上下文理解。
游戲規(guī)則:
寫一個猜數(shù)字的游戲,從1~188中,讓用戶在控制臺輸入數(shù)字,用戶如果猜大了,就提示大了,小了就提示小
提示詞:隨機生成一個1~188以內(nèi)的數(shù)字
提示詞:寫個標記,默認false
提示詞:創(chuàng)建一個Scanner對象
提示詞:在循環(huán)中,循環(huán)條件是flag為true終止循環(huán),先提示?用戶進行猜數(shù)字,用戶輸入數(shù)字,判斷guessNumber的值與number是否一樣,如果一樣,就設置flag為true.跳出循環(huán);?判斷guessNumber的值與number是否一樣?,如果大了提示大了,小了提示小了。
提示詞:最后生成提示:恭喜了,猜對了
生成的完整代碼,跑起來試試:
注意事項
Amazon CodeWhisperer的“Amazon?Toolkit”插件對idea的版本支持有限制,我從2019版本開始嘗試,有不兼容問題,后面查找了資料,是從2022.1版本及以上才支持的。
三、總結(jié)
隨著時間的推移,人工智能技術(shù)迅猛發(fā)展。智能編程助手如Amazon?CodeWhisperer大大提高了開發(fā)效率和代碼質(zhì)量。CodeWhisperer是強大的智能編程助手,可幫助開發(fā)者更快、更安全地構(gòu)建應用程序。
CodeWhisperer解決了開發(fā)中的常見痛點。它可以快速生成準確的代碼建議,節(jié)省時間。對于不熟悉的編程語言,它提供準確的代碼建議,避免語法錯誤和問題。此外,CodeWhisperer幫助開發(fā)者及早發(fā)現(xiàn)和修復安全漏洞,提高軟件安全性和穩(wěn)定性。它還消除打字錯誤和典型錯誤,提高代碼準確性。
CodeWhisperer具有許多優(yōu)勢。它提高了工作效率和生產(chǎn)力,可以自信地進行編碼并提供相關(guān)開源項目信息。它支持多種編程語言和流行的IDE,提供高效便捷的開發(fā)體驗。開發(fā)者可以隨時使用或關(guān)閉它,并免費使用,降低了成本。
CodeWhisperer適用于多種場景,可以快速生成樣板代碼,幫助在不熟悉的編程語言中進行編碼,檢測安全漏洞,消除打字和典型錯誤,并減少重復編碼的工作。它還適用于其他常規(guī)任務和使用不熟悉的API的場景。
在實際體驗中,安裝和使用Amazon?CodeWhisperer的插件非常簡單,能夠與流行的IDE無縫集成。虛竹哥在使用IDEA安裝了Amazon?Toolkit插件,并成功使用了CodeWhisperer生成了一些代碼。實驗的過程由簡單注釋生成到復雜的算法解答,最后實驗寫一個小游戲,CodeWhisperer準確地理解了虛竹哥的意圖并生成了相應的代碼。
此次的體驗很愉快,也有收獲??梢酝度腴_發(fā)生產(chǎn)中,減少開發(fā)量,讓我有更多時間投入更有價值的工作上。
大家也可以去體驗體驗,也歡迎找虛竹哥溝通分享心得。
我是虛竹哥,我們明天見~