開箱工程師兩大利器:Amazon Q、AWS CodeWhisperer

前言

今天要來介紹 Amazon Q + AWS CodeWhisperer,並進行簡單的小開箱試用 ✨
主要是為了 AWS Educate Taiwan 雲端校園大使計畫的加分題!
期待能夠在 AWS 中學習新技術並推廣所學!

簡介

Amazon Q

官網所說,這是一種新型的生成式 AI 助理,專門用於滿足辦公需求,且可以根據客戶業務進行訂製。基於客戶自身的資訊儲存庫、程式碼和企業系統,客戶可以快速獲得複雜問題的相關答案、生成內容並採取行動。

其中最特別的是,可以根據客戶業務進行訂製。基於客戶自身的資訊儲存庫、程式碼和企業系統,客戶可以快速獲得複雜問題的相關答案、生成內容並採取行動。

因此 Amazon Q 是為了滿足企業級客戶嚴格要求而特別打造,可以根據企業既有的人員、角色和權限對每個用戶交互進行客製化。

AWS CodeWhisperer

根據官網所述,這是一款適用於 IDE 和命令列的 AI 驅動的生產力工具,他可以根據現有的程式碼和註釋生成建議代碼。

AWS CodeWhisperer 有以下幾個特點:

  1. reference log
    CodeWhisperer 可以標記或篩選與公開可用程式碼類似的程式碼建議。取得關聯開放原始碼專案的儲存庫 URL 和授權,以便您更輕鬆地檢閱並新增歸因。

  2. 尋找安全性漏洞
    掃描程式碼以識別難以發現的安全漏洞,並取得程式碼建議以協助修復已識別的問題。採用生成式 AI 技術的程式碼建議可根據您的應用程式程式碼量身打造,因此可以快速、自信地接受修正,而專注於更高價值的工作。

  3. 量身打造的程式碼生成器
    可以透過了解內部程式庫、API、套件、類別和方法,進而給出更相關的建議以達到加速開發。

  4. 搭配 Amazon Q 提高生產力

    能夠透過反白的方式,使用 Amazon Q 解釋程式碼或是找出 bug,看起來最吸引人的便是將應用程式升級和遷移至最新版本,這對於專案使用一堆整天在更新的庫,後期要針對更新進行修正來說,是一大福音呢!

而目前支援 IDE 有:VS Code、Intellij IDEA、Pycharm、AWS Cloud9、AWS Lambda Console
支援語言有:Python、Java、JavaScript、TypeScript、C#

開箱!

CodeWhisperer 基本功能

在使用 CodeWhisperer 時,仰賴使用者的表達能力。我們需要給出一串註釋,告訴 CodeWhisperer 我們要做什麼,例如基本的資料結構實作:

抑或是爬蟲:

沒想到中文註釋也是可行的…。
也能正確 import 爬蟲庫,唯一美中不足的就是,他的 url 需要讓你自己填 XD,但也不是多大問題。

輸出結果也沒有問題!

在過程中,若遇上問題無法解決,也可反白詢問 AWS Q:

目前測試下來,「基本的」程式設計是沒有問題的,雖說要憑空生成完整專案程式碼,以目前技術是還有一段距離的!但仍然能夠成為一名加速生產力的稱職工具,但若面臨到專案呢?

我們馬上來下點猛的。

接下來我開了T3 stack的專案,T3 stack 包含了:Next.js 14、TypeScript、tRPC、Prisma、TailwindCSS、NextAuth.js(現在叫 Auth.js),其中 prisma 是無法使用的,但其他皆是使用 TypeScript,因此按照邏輯上要能正常提供程式碼,我們馬上進行實測。

首先測試了在 server 端新增 trpc procedure:

再來到 client 端使用剛剛加上的 procedure(我甚至沒指定在哪個檔案):

也從旁證明,它會自動去掃描檔案,確認這個函式在哪裡,不會發生說只專注在當前檔案,導致無法應用在專案上。

搭配 Amazon Q

假設我今天對於 API 中的某個 procedure 函式不清楚,我就可以使用 Amazon Q 進行解釋或修正!

回應:

Here is an explanation of the selected code block:
The code is defining a protected mutation for creating a new post resource in the database.
It is using Zod to define the input schema, requiring the “name” field to be a non-empty string.
The mutation function is marked as async since it will perform an asynchronous database operation.
It first simulates a slow database call by awaiting a 1000ms Promise before performing the actual database operation. This is just for demonstration purposes.
The actual database operation uses ctx.db.post.create to insert a new post document. It sets the “name” from the input, and also connects the new post to the logged in user by id.
So in summary, this protected mutation defines the input validation and database logic for creating a new post resource in the system, associated to the logged in user. It demonstrates using Zod for input validation and Prisma for database access from a GraphQL mutation.
Let me know if any part of the explanation needs more clarity or if you have additional questions!

其中我不了解的地方是create.mutation的部分,他就告訴我:

The mutation function is marked as async since it will perform an asynchronous database operation.

搭配一秒延遲的呼叫資料庫新增動作,為了演示目的

最後還有做 summary,若有些人比較懶,看最後面就能夠了解大致內容了,在短短幾秒就可以得出結論!

相較於 ChatGPT4,在程式碼解釋處理方面完全就是壓在地上打…。

但比較可惜的是,沒有繁體中文的解釋,對於不擅長英文的人會是一大硬傷。

Security Scan

在 TypeScript 中:

哭了…,目前不支持。

在 Python 中:

我使用我以前的 telegram BOT 做為測試,我刻意將我的 bot token 暴露於其中,接下來我使用 security scan,AWS CodeWhisperer 明確的指出CWE-798 - Hardcoded credentials,意思為使用硬編碼的憑證,是一種常見的軟體安全漏洞。

將其儲存於 env 中的變數後:

CodeWhisperer 也更正 re-scan 後的結果為通過安全掃描,對於粗心的軟體工程師來說是一個非常必須的工具!

安裝

安裝真的可以說是非常簡單,幾乎不需要懶人包。

首先你需要準備一個 IDE,我以 Visual Studio Code 為演示

  1. 進入 vscode,打開 extension 延伸模組,輸入 AWS Toolkit:

  2. 安裝 AWS Toolkit

  3. 點擊最下方的 AWS 或是左側的 AWS,點「connect with AWS Builder ID」

  4. 若沒有 AWS Builder 帳號,會自動導向註冊,開始註冊!

  5. 註冊完就可以順利使用啦 ✨

註:剛開始使用可以先點擊下方的「CodeWhisperer」,會跑出:

點擊 learn,就可以進行測試體驗啦~整體下載加註冊不到五分鐘,而且完全免費
(⊙Д⊙)╮ 佛心公司 ╭(⊙Д⊙)╯ 佛心公司

結語

我認為在使用上,Amazon Q + CodeWhisperer 是可以幫助我的,不管是加速開發抑或是程式碼解釋,不會出現牛頭不對馬嘴的解釋字句,或是拖慢開發速度的 bug code,但還是仰賴工程師本身的基礎能力,讓工程師專注於優化、測試上,而不用花費大量時間在同樣性質的工作上。

另外,很方便的地方是只需要不到五分鐘的註冊,就可以在 IDE 上免費使用,完全無痛使用,對於 amateur or professional Dev 都是一大利器(最重要是面向於企業方面)。更重要的是,還能根據專案架構,提供輔助和修正,這也是企業內部工程師最需要的幫助。

經過這陣子的試用,我個人是看好的,尤其是會掃描專案後再給你 suggestion, 相當於一位看過完整程式碼的工程師從旁輔助你,可以省下大量時間和精力。

但這兩款畢竟推出時間不長,仍然有許多地方值得改進,例如:支援程式語言過少、Amazon Q 不支援繁體中文。


開箱工程師兩大利器:Amazon Q、AWS CodeWhisperer
https://viiccwen.github.io/AWS-Q-CodeWhisperer-Unboxing/
作者
VicWen
發布於
2024年1月10日
許可協議