講師:Ryan Chung 行動開發學院創辦人。 曾獲微軟人工智能大賽特別獎、Udacity AI產品經理微學位。 現為微軟 MVP – AI 人工智慧最有價值專家、美國 PluralSight 認證講師。專長:Web/App應用開發、企業AI加值導入、微軟認知服務應用整合。近期著作:駕馭 ChatGPT 4: 探索 Azure OpenAI 與 Cognitive Service for Language 開發實踐(使用.NET 與 Node.js)。 一、Azure 提示流(prompt flow)簡介 「Azure」是由微軟公司開發的雲端服務,而在微軟的AI發展中,又有許多與AI相關的應用程式在Azure AI內,而今天我們主要介紹的功能為Azure AI中的「 Azure 機器學習」(Azure Machine Learning)。以往Azure 機器學習有三個基本功能,包含可以直接在上面寫程式的Notebooks、利用流程方式套用機器學習功能的Designer,以及自動測試模型或參數的Automated ML功能。今年微軟則是另外在Azure機器學習中增加了「提示流」(prompt flow)功能,不過因為此功能目前仍為測試版,所以建議大家可以先試用,至於是否能夠套用在公司的實際作業中,則可以待更加穩定的正式版推出後再做決定。 Azure提示流的主要精神就是希望能夠透過視覺化方式呈現機器學習流程,讓使用者能夠更清楚地了解大型語言模型在程式運作中的運作過程。Azure提示流也可以串接不同的大型語言模型,而不僅限於Azure自己的OpenAI Service,所以若大家需要結合不同的大型語言模型做使用,都可以將其帶入Azure提示流中。另外,如果我們需要客製化prompt,那麼Azure提示流也可以幫我們建立獨立區塊,供我們寫客製化的提示。再者,儘管目前Azure提示流已經備有許多小工具供我們使用,但若這些工具仍不符合我們的需求,我們也可以直接自行寫一段Python程式碼放到流程裡。最後,我們也可以在兜建完整個提示流流程後將其轉換成API,將它直接部署在雲端上,並與網站、應用程式或聊天機器人等人機介面系統整併在一起。以往我們在使用ChatGPT時,即便我們指令下得在清晰精確,它的回應都還是會有其極限,而Azure提示流由於能夠讓我們帶入不同的大型語言模型以及程式碼,因此能夠突破ChatGPT的極限,讓它能夠產出更符合我們需求的回應。 Azure提示流的前置作業 第一次使用Azure提示流時需要先完成以下的前置作業。首先,我們要先申請一個Azure帳號,並利用此帳號申請Azure Open AI。登入之後,我們就可以開始使用Azure機器學習工作室。若我們未曾使用,就需先點選右上角的「建立工作區」(圖1),就可以在此工作區中使用提示流的服務囉! 圖 1:進入Azure Machine Learning工作室後,可點擊右上角的「建立工作區」開啟新的工作區。 接著進入工作區後,我們還必須設定三個部分。第一,先點擊右上角「大聲公」圖示開啟「管理員預覽功能」,並確認「使用提示流程建置AI解決方案」為啟用狀態(圖2)。 圖 2: 點擊「大聲公」圖示後,需確定「使用提示流程建置AI解決方案」為啟用狀態。 第二,我們必須設定連線,而「連線」就像是我們申請了很多的服務,讓我們在兜流程時可以使用。我們也只要在設定連線時輸入API Key,就可以免去每次兜流程時需重複輸入API Key的動作了。欲設定連節,我們可以點選「連線」並點擊「+ 建立」,再選擇「Azure OpenAI」或「OpenAI」(圖3)。 圖 3 :設定連線時,我們必須點選連線,並選擇 「Azure OpenAI」或「OpenAI」。 最後則是要設定「執行階段」(Runtime)。執行階段乍聽之下有些抽象,但我們可以將其理解為我們在雲端上開的主機。大家只要點選「執行階段」就可以看到目前有幾台主機在運作,我們必須至少開啟一個執行階段才能開始使用Azure提示流的功能(圖4)。另外也要提醒大家,執行階段處於(Running)狀態時會以每小時計費,即便停止了仍會收取少數費用,像是雲端的空間與網路頻寬等費用。因此建議大家,最好可以定時定期觀察自己的用量,若沒在使用時就關閉執行階段。 圖 4: 在「執行階段」選項中可以檢視那些主機正在運作,若大家沒在使用時,也要記得將其關閉,以免收取開啟時的費用。 介紹完Azure提示流的前置作業後,我們將提供大家三個實戰演練,了解Azure提示流的功能。 二、實戰演練(一):網站分類 第一個Azure提示流的功能為「網站分類」。當我們有一個網站清單,並想將這些網站進行分類時,就可以使用提示流,讓AI幫助我們自動將這些網站分類,取代以往由專人判斷網站類型後再行分類的工作。 要使用提示流進行網站分類,我們首先可以在進入Azure ML Studio之後,選擇「流程」後點擊「+ 建立」,就可以選擇我們想要的提示流了。Azure本身已經內建許多模板供我們使用,欲做網站分類則可以選擇「Web Classification」,並點選右下角的「複製」就可以開啟提示流囉(圖5)! 圖 5: 選擇「Web Classification」後,只要點選右下角的複製即可開啟提示流。 進入提示流後,畫面會分為左、右兩側。左邊是我們可以設定的輸入與輸出值,也可以直接在上面修改程式碼;右邊則是Azure提示流的特色,也就是告訴我們這些程式碼運作的視覺化流程圖,讓我們了解程式運作過程中有使用到那些大型語言模型或工具,而上方的執行階段則是可以選擇欲用來執行的主機(圖6)。 圖 6: Azure提示流介面圖。左側為我們可以編輯的程式碼,右側則是視覺化後的程式運作流程圖。 在執行流程之前,我們還需要檢視左側的程式碼區塊是否有需要我們設定連線的區塊。我們必須將所有需設定連線的區塊都選擇好要呼叫的大型語言模型後,才能開始執行流程(圖7)。 圖 7: 要開始執行流程前,我們需先至需要設定連線的區塊,選擇要呼叫哪種大型語言模型。 全部設定完成後就可以按下執行,開始跑提示流囉!當程式執行完畢後,AI就會告訴我們網站的類別(圖8)。若大家執行完畢後,也要先確定樣板能否編輯,若可以編輯再進行微調,並檢視其執行流程圖。我們可以從流程圖中清楚地看到,最上面的「input」代表我們所輸入的網站網址,接下來則是有套用爬蟲程式,撈出網站的內容,接著再將網站資訊交給大型語言模型進行摘要。另外,我們也可以看到該流程也寫了一個Python準備例子供AI辨別網站類型做為參考。經過以上過程與對比分類之後,程式會再將這些例子和我們欲分類的網站摘要餵給大型語言模型,並轉化格式,最後輸出成為我們看到的回覆。 圖 8:執行完程式碼後就可以在左側最下方看到最終的結果。此圖表示,使用者提供的網站經辨識後為App類型。 三、實戰演練(二):客製化資料 第二個實戰演練為客製化資料。我們都知道ChatGPT的回應有其侷限性,它比較無法針對最信的新聞、特定公司資訊或特定領域的專業問題回覆,僅能回答較為廣泛的問題。因此,接下來我們要與大家分享如何使用Azure提示流讓ChatGPT可以回答上述所說具有特定答案的問題,避免它胡說八道。 要能夠讓ChatGPT回答特定問題之前,我們必須先將客製化資料向量化。以詢問ChatGPT「行動開發學院的聯繫方式」為例,若我們直接詢問ChatGPT,那麼它可能會因為不知道這間公司的資訊而亂掰一通。因此,我們能夠透過Azure提示流,將該公司的資訊輸入,讓ChatGPT可以提供正確的回答。首先,我們可以先開啟Ryan老師提供的Python程式碼(https://ml.azure.com/),它可以幫助我們將原本的資料向量化,最終產生index.faiss和index.pkl兩個檔案。我們只要依照自己的需求,修改程式碼中的兩個部分即可。第一部分為將欲向量化的網域輸入URL_PREFIX後,若有多個網頁,則可以輸入於下方的URL_NAME_LIST(圖9),本案例則是輸入行動開發學院的網址。 圖 9:上圖紅色方框中的URL_PREFIX需輸入我們欲向量化的網域;下方URL_NAME_LIST則可以輸入多個網頁。 第二個需要修改的部分則是OpenAI模型部署的名稱,並且需輸入Endpoint和API Key(圖10)。 圖 10:我們必須修改OpenAI模型部署的名稱(紅框),並輸入Endpoint(藍框)和API Key(綠框)。 以上兩個部分設定完成後,我們就可以在自己的GitHub上建立新的repo,將最終產生的index.faiss和index.pkl檔上傳,作為我們要帶入Azure提示流的資料庫。 接著,我們可以回到Azure Machine Learning 工作室,建立新的流程,本次範例中是選取「QnA with Your Own Data Using Faiss Index」的流程。由於目前Azure提示流為測試版,所以我們可以先將如同進行網站分類時,先將要使用何種大型語言模型設定好,並執行測試此流程是否可以使用。若能成功執行,我們就可以把我們剛剛生成的index檔案帶入提示流的「lookup」中(圖11)。 圖 11:我們必須將向量化後得到的兩個index檔案輸入「lookup」(圖左)中。 接著,有了我們的客製化資料庫後,我們就可以將問題輸入提示流中,它就會提供我們正確的答覆囉(圖12)! 圖 12 :此圖為提示流執行後的結果。我們可以發現,透過Azure提示流的幫助,ChatGPT現在可以針對我們提供的客製化資料,正確地回答特定的問題。 四、實戰演練(二):我的專屬英語說書人 最後要和大家介紹的是,如何利用VS Code也能使用Azure提示流的功能,幫助我們打造專屬的英語說書人。 首先,我們必須在VS Code中安裝「Prompt flow for VS Code」。大家必須注意,若是第一次安裝,我們必須先在Python中安裝prompt flow 和 prompt flow tools,因為提示流的執行需利用Python。與在Azure上的操作相似,安裝完VS Code的提示流後,也需要設定連線(connections),至少需有Azure OpenAI 或 OpenAI。設定完成後,我們就可以在VS Code上建立新的資料夾,並在進入資料夾後在左側灰色部分點擊滑鼠右鍵,選擇「New flow in this directory」,接著再點擊「Chat flow with the template」,我們就可以看到一串程式碼了。雖然一開始就出現程式碼難免讓人不知如何下手,但我們只要點選上方的「Visual editor」就會出現與Azure提示流相似的頁面囉(圖13)! 圖 13 :看到程式碼之後,我們可以點選上方的Visual editor,畫面就會變得與Azure提示流相似的畫面了。 進入提示流畫面後,我們一樣要先設定連結,選擇要使用Azure OpenAI 還是 OpenAI,以及欲使用的ChatGPT版本。而要讓ChatGPT模型變成專屬於我們的模型,關鍵就是要修改提示。此時我們可以點選頁面上的「chat.jinja2」直接編輯ChatGPT模型(圖14)。 圖 14 :與Azure提示流一樣,我們必須先設定連結(紅框)與部署名稱(藍框)。接著點選「chat.jinja2」(綠框),編輯ChatGPT模型,打造專屬於我們的ChatGPT。 為了打造ChatGPT成為一位英語說書人,我們可以在chat.jinja2中將ChatGPT的角色設定為「story teller」,並指定它根據使用者輸入的指令產生出一篇300字的故事(圖15)。 圖 15 :為了打造專屬的英文說書人,我們可以依照上圖紅色底線標示的程式碼進行修改。 修改完成後,我們就可以在下方的User部分輸入想要聽關於何種人、事、物的故事,併按下執行,我們就會很快地得到一篇英文故事囉(圖16)! 圖 16 :利用VS Code提示流打造專屬ChatGPT英語說書人所產生的故事。 五、結論 從課程開頭所介紹的Azure提示流設定到課程後段的三個實戰演練,我們至少可以發現兩個Azure提示流的優點。第一,它雖然是由微軟所開發的軟體,但我們可以針對個人的需求,帶入多個大型語言模型,甚至還可以加上我們自己寫的Python程式片段。如此一來,我們就不用再多個AI與其它軟體之間不斷切換。第二,由於Azure提示流將運作流程視覺化,讓我們可以更了解提示流的運作過程,在有錯誤時也可以盡快發現並修正。希望大家透過本次課程可以了解Azure提示流,並在未來該服務穩定後,善用此工具,提升工作的效率。 【若想回顧完整版課程影音,請點選此連結;有任何問題或分享,也歡迎在本文底下留言。】