講師:蔡易霖 ●Cupoy AI 學習社群 資料科學專家●全民瘋AI系列發起人 擁有帶領超過二十個業界AI專案經驗,其領域包含智慧製造、醫療、交通、服務等。樂於技術研究,也有經營自媒體分享技術實作與教學。 一、前言 問題問得好,離答案就不遠了!我們都知道,說話有說話的藝術,而在AI當道的時代,如何問對問題,讓AI成為我們工作或生活最好的幫手,就必須掌握提問的藝術。本次課程我們將與大家分享,如何利用AI人工智慧幫助我們加速程式開發效率。 目前有市面上有許多生成式AI工具,包含ChatGPT、AutoGPT、AgentGPT、ChatPDF和ChartPDF等。然而,生成式AI雖然發展快速,且也給我們帶來生活和工作上的許多便利,我們在使用這些AI工具時注意一些事情。例如,我們在使用ChatGPT時就必須注意它生成結果的真實性。在無法辨別生成結果的真實性時,我們可以請ChatGPT提供網頁連結,或者自己至Google搜尋,透過這樣的雙重驗證來避免我們被ChatGPT缺乏真實性的回應所欺騙。雖然ChatGPT已經比以往的AI還厲害,但仍不能達到我們理想中的強AI的境界,也就是它的思考能力(Chain of Thought, CoT)還不夠強。而為了要幫助大家解決思考能力不夠強的問題,我們今天將與大家分享,如何透過好的提問,引導ChatGPT產出好的答案。 二、什麼是Prompt Engineering 要了解什麼是Prompt Engineering (PE),則必須先了解「prompt」是什麼。Prompt簡單來說就是給AI模型的指令,它可以是一個問題,也可以是一段文字描述。而好的指令通常是簡單明瞭的,並且清楚地將我們的需求和問題告訴AI。PE其實就是「提示工程」,可以打造高效、可控的AI系統,並且精確且可靠地執行特定任務。所以有好的提示工程,就可以加速並提升我們生成式AI的使用體驗,同時提高我們的工作效率。 那麼,提示工程在整個專案流程扮演什麼角色呢?假設我們是一位軟體工程師,想請ChatGPT幫助我們重構程式碼,並將該程式碼貼上。然而這樣子的提問可能不夠明確,ChatGPT可能不知道我們程式碼是何種語言,以及我們想要讓它做什麼。此時,我們就可以用不同的程式工程,協助我們挑選樣板套用進我們的流程中,更明確地告訴ChatGPT我們的程式碼使用的是何種語言,以及要請ChatGPT做什麼。最後,ChatGPT就會依照我們透過提示工程優化的指令,生成一個重構後的程式碼(圖 1)。可見使用了提示工程後,不僅可以幫助我們開發程式,也可以加速我們的工作效率。 圖 1:程式工程於重構程式碼流程中所扮演的角色。因為有程式工程協助優化我們的指令,讓像是ChatGPT 的生成式AI可以更準確地回答我們的問題,提高我們的工作效率。 三、提問的藝術:利用Prompt Engineering創造有效指令 從上節的簡介可以發現,如果我們想要繞過一些限制,或者更好地發揮AI的能力,那麼我們就會需要用到程式工程技術。接下來,我們將介紹大家三個好用的程式工程技術,提升我們使用生成式AI的效率。 ChatGPT Prompt Framework 假設我們想要針對ChatGPT產生好的提示工程,我們便可以在給ChatGPT的指令中包含四個資訊。第一個為指令,也就是我們所說的prompt,告訴AI我們希望它執行的具體任務。第二為提供ChatGPT背景資訊或上下文訊息,以引導它生成更好的回覆。第三為輸入資料,將我們想要ChatGPT協助處理的資料餵給它。最後則是輸出格式,我們可以依照個人的需求,要求ChatGPT以特定形式呈現結果(圖 2)。以上四個元素除了第一點以外,其他三項都可以根據自己的需求選填。 圖 2: 我們在使用ChatGPT時,可以依照以上的公式(指令+背景資訊+輸入資料+輸出格式),讓ChatGPT產出符合我們需求且較為精確的答案。 CRISPE Prompt Framework CRISPE為另一個有效提問的框架,CRISPE即能力與角色 (Capacity and Role)、洞察力 (Insight)、指令(Statement)、個性(Personality)與嘗試(Experiment)五個英文單字開頭的組合。我們可以在問ChatGPT問題時,告訴它要扮演什麼角色、提供背景資訊,並告訴它我們希望它做什麼、要用什麼風格或方式回答問題,甚至也可以要求ChatGPT提供多個答案給我們(圖 3)。 圖 3: 依據CRISPE架構對ChatGPT提問。我們可以透過這個架構,讓ChatGPT扮演某個領域的專家回答問題,還可以讓它以不同的個性和口吻回答問題。 Chain-of-Thought Prompting (CoT) 接下來,我們要與大家分享,如何透過CoT的技術,來讓ChatGPT可以不掉入我們問題的盲點或陷阱,解決它思考能力有限的問題。舉例來說,我們問ChatGPT「一顆蘋果30元,一顆橘子15元,我拿了三顆蘋果和一顆橘子,結帳時又多拿了一顆橘子,請問總共花了多少錢?」若我們直接傳送此問題給ChatGPT,它就會粗心地只看到「我拿了三顆蘋果和一顆橘子」,卻沒有注意最後「結帳時又多拿了一顆橘子」,導致最後計算錯誤。這個時候,我們可以透過加上「讓我們一步一步地思考」這句話,就能夠成功引導AI一步步地注意我們問題中的細節,得到正確的答案(圖 4)。 圖 4: 我們可以告訴ChatGPT一步一步地思考我們的提問,引導它產生正確的答案。 四、程式開發小助手:AWS CodeWhisperer 與 Bito AI 生成式AI的出現對於軟體工程師的工作也有許多幫助,主要可以分為四個面向。首先,它可以擔任如同軟體顧問的角色,自動回答我們軟體開發的相關問題,並提供解決方案與策略。另外,它也可以協助我們生成程式碼,利用大模型自動生成程式碼,減少我們重複的工作以增進開發效率。除此之外,生成式AI也可以幫我身為軟體工程師的我們生成文件。程式開發完後就必須生成文件,我們可以利用生成式AI協助生成或更新軟體文件,不僅省時,也可以提高準確性和一致性。最後,它也可以幫助我們做最後的程式的單元測試,增強軟體品質和可靠性。本節主要將重點置於第二個生成程式碼的面向,分享如何透過AWS CodeWhisperer幫助我們寫程式。 「AWS CodeWhisperer」是一款由亞馬遜公司開發的AI編碼輔助工具,其用法與目的與GitHub Copilot相似,但AWS CodeWhisperer個人版因目前還在測試中,所以目前可免費使用。它基本上支援了大部分熱門的程式語言和編輯器。接著,我們就來看看如何使用ASW吧! 在VS Code安裝AWS CodeWhisperer 要在VS Code中安裝AWS CodeWhisperer,我們必須先在VS Code中左側的「擴充套件」搜尋「AWS Toolkit」,就可以開始安裝。安裝完成後,我們便可以在左邊的工具列找到AWS的圖示,接著再點選「start」就可以開啟AWS CodeWhisperer。如果我們是首次使用,則必須先註冊「AWS Builder ID」才能使用喔! 透過JupyterLab使用AWS CodeWhisperer 如果我們要啟用JupyterLab的CodeWhisperer功能,必須先打開終端機輸入兩行指令:「pip install amazon-codewhisperer-jupyterlab-ext」以及「jupyter server extension enable amazon_codewhisperer_jupyterlab_ext」。成功開啟後,我們可以在下方的工具列找到「start CodeWhisperer」。同樣地,如果是第一次執行,我們必須先依照只是進行註冊。 接著,我們以糖尿病預測資料集示範如何使用AWS CodeWhisperer。首先,資料科學家最常使用的就是引入套件。我們可以直接將註解複製貼上AWS,它就會自動預設我們可能會想撰寫何種程式碼,並提供給我們多個選項做選擇。接著,我們可以告訴AI我們想要載入資料集,它便會預測我們可能載入的資料集檔案。挑選好我們想要的資料集檔案後,就可以貼上想請AI幫忙載入的資料集(圖 5)。 圖 5: 告訴AI我們想要載入的資料集後,我們只需要挑選資料集檔案類型,並將資料集複製貼上,就可以讓AI幫我們載入了。 成功載入資料後,我們就可以依照個人需求請AI提供協助。例如,若我們想要查看資料特徵,就可以直接輸入「統計特徵」。如果我們想將AI整理出來的特徵視覺化,也可以直接下指令,請它「將前六個特徵用長條分布圖視覺化,並使用histplot繪製」(圖 6)。 圖 6 :載入資料完成後,就可以依照個人輸入指令,項是可以請AI將數據視覺化。 上述的演示我們可以發現,其實我們不需要輸入任何的程式碼,只要有好的提問,CodeWhisperer都可以幫我們生成程式碼。不過,雖然它相當方便,但我們也不能太貪心,必須一步一步地讓AI協助我們撰寫程式碼,最後如果想撰寫一個模型,可以再請AI根據前面步驟所推演出的結果生成一個模型。 Bito AI程式助手 對於沒有程式背景的使用者,ASW Code Whisperer可能較難上手,因此我們在課程最後要再與大家分享另一個寫程式的助手「Bito AI」。我們一樣可以再VS Code 中下載Bito AI。使用Bito AI時,我們只要清楚地告訴它指令,像是要以何種程式語言撰寫程式碼、需要包含什麼功能,以及希望它可以依照何種風格撰寫即可。接著Bito AI就可以很快地依照我們的指令撰寫並測試程式碼(圖 7)。 圖 7 :若想使用Bito AI產生的程式碼,我們只要點選上圖綠色圈圈的符號,系統就會自動將程式碼複製到右邊的空白處,再點選執行即可。 五、結語 本次課程所介紹的提示工程(Prompt Engineering)可以幫助大家優化使用生成式AI時的指令,而最後所介紹的兩個程式開發生成式AI,更讓我們了解,只要能夠掌握提問的藝術,知道如何問問題、下指令,就可以讓生成式AI變成我們在工作上的好幫手。然而,還是不免俗地要提醒大家,生成式AI雖然可以很快速地寫出程式碼,但仍有可能會出錯。因此,我們還是必須不斷精進我們的專業素養,才有辦法在AI出錯時立即發現,避免AI反而變成一個幫倒忙的助手。 【若想回顧完整版課程影音,請點選此連結;有任何問題或分享,也歡迎在本文底下留言。】
本此演講使用的飯裡可以從這邊看到哦!
https://github.com/andy6804tw/prompt-is-all-you-need