發表文章

目前顯示的是有「OpenAI」標籤的文章

Azure OpenAI 中的 Assistant API 功能

圖片
過去,如果你有用 Azure OpenAI 開發對談機器人,其中最麻煩的事情之一,大概就是記錄和處理歷史對談訊息。但歷史對談訊息對於AI的正確回覆佔有舉足輕重的角色,不記錄不行。 這是因為本質上API的呼叫是無狀態的(Stateless) 因此,在與API交談的過程中,你每次呼叫API都必須把過去的訊息,當作參數重新傳到後端,這樣API後面的AI Model才會知道先前跟用戶說過了什麼。但如此一來,對談越多,不就得花費愈多Token嗎? 是的,沒錯,這是過去透過OpenAI開發對談機器人時的一個難題。 2023年11/06,OpenAI舉辦了DevDay,在keynote的場次中,Sam Altman介紹了新的API --> Assistants API,把對談機器人的開發,再繼續優化到更簡單的步驟。 搭配Assistants API,你可以輕易建立出一個智能助理(或客服機器人),除了讓開發人員更省事之外,還包含了類似RAG的功能,可以將企業內的資訊先餵給這個AI助理。 如今,Azure OpenAI也提供了這個服務,在 美國東部2 、 澳大利亞東部 和 瑞典中部 率先提供了這個服務(Preview),同樣的,他提供了一個遊樂場後台: 初次進入,畫面上出現『找不到任何佈署』? 那你就給他來個新的佈署: 系統會引導你建立一個獨立的模型: 接著就可以透過該模型來建立助理了: 填寫完智能助理的名稱、提示(system prompt) 之後,就可以儲存和測試了。 乍看之下,和原本的聊天對談沒什麼不同,但背後有一個很大的差異,那就是,過去的聊天對談,前後文(Context)的實踐是透過把先前與機器人的互動(訊息),每次重新回傳給API來實現的,而現在這個助理(Assistant API)則是透過一個新的物件,叫做Thread(執行緒),來保存這些對話記錄。簡單的說就是,你不用再自己保存對話記錄了: Thread(執行緒)聽起來有點抽象,你可以把一個執行緒想成一連串的對話記錄,其中有一則一則的訊息(Messages): 當用戶輸入一則訊息(放上Thread)給機器人(assistant),機器人回覆這則訊息(也放上Thread),這樣就構成了一個Run。 也因此,透過 Assistant api 操作的對談流程,原則上大概是底下這...

Azure OpenAI 服務中的DALL-E-3

圖片
先前介紹過 OpenAI API 的 DALL-E-3 ,但如果你要在Azure OpenAI 上使用相同的功能,不管是模型的佈署和API的呼叫,兩者之間都有些不同。 使用在Azure OpenAI上的DALL-E-3,你必須把服務建立在瑞典中部(Sweden Central)的資料中心,才能享用該模型: 目前只有該資料中心有提供 DALL-E-3 的模型選項,當你將AOAI的服務建立在Sweden Central資料中心,就會在模型佈署中,找到底下這個 dall-e-3 的選項: 如果你透過 Azure OpenAI Studio 這個後台測試 DALL-E,你會發現系統會自動幫你佈署 dalle3 模型: (動畫) 有了DALL-E-3模型之後,你就可以透過自然語言產生圖像了: 如果你要採用 API 來生成圖像,可以參考微軟 官網 上的 API 使用方式。 我們也可以透過 Postman 呼叫該 API: 台北 101 的下雪美景,就這樣出現了: 但你需要注意到,Auzre OpenAI DALL-E-3 的 API Endpoint 也明顯與Chat不同: https://{AOAI服務名稱}.openai.azure.com/openai/deployments/{Dalle3佈署名稱}/images/generations?api-version=2023-12-01-preview 不過掌握好了之後,透過程式碼來動態建立圖像,也就只是小菜一碟了。 相關課程: https://www.studyhost.tw/NewCourses/LineBot

使用 Python 呼叫 Azure OpenAI API 也很簡單

圖片
昨天去參加G社群舉辦的活動,想說來認識一下Gemini。 來到了據說是全台灣最高的活動舉辦場合,也具體實作了一下 Gemini API 的使用。 聆聽分享的過程當中,台上講者問大家說:『現在已經有使用 OpenAI API 的舉手? 』(恩…很多)。 又問:『現在已經在使用 Gemini 的呢?』(哇…也不少)。 再問:『那使用 Azure OpenAI 的呢?』 我正想舉手,往四周一看,哇靠,怎麼一個人都沒有! 真的假的? 原來來到不同的陣營,民調數據會差這麼多? 🤔 接著台上講者繼續問大家,用什麼語言寫AI程式,看來 Python 還是大宗,我本來想喊 C# 的,但看看周遭氛圍,我決定暫時先觀望一下。 然後講者開啟自己的 github repo,點選一個 badge ,把 github 的source code 帶到 colab 中,順口又問了一句:『應該大家都用過 colab 吧?』 (我本來又想喊…“沒有”) 沒想到講師立即說:『恩…很好,顯然大家都有用過…』😮😮😮 我偷偷看了一下隔壁的朋友,耶欸,大家好像還真的都挺熟悉colab的呢。哇,果然隔『營』如隔山。 接著我看講者嘩啦嘩啦地在colab中運行每一個程式碼片段,行雲流水,很是順暢。也難怪,大家喜歡用 python,雖然從我的角度來看,一直覺得它其實跟 Visual Basic 有點像。 不過做Labs的過程中,我確實也開始覺得,有寫好的互動式腳本,上課時還是頗方便,大家只需要點個按鈕 clone 過去,然後程式碼都寫好了,只要改改參數,就可以一段一段運行了,難怪大家覺得 OpenAI API 和 Gemini API 用起來很簡單。 但其實,Azure OpenAI 也不難啦~ 做完 Gemini Lab 後,我索幸順手也寫了一個 python 的 notebook ,用 python 來呼叫 Azure OpenAI ,我把它放在 github 上了。又效法講者的作法,為它做了一個 badge ,讓用戶可以從 github repo 直接連到 colab。操作動作如下: 然後我們就可以在 colab 中,透過互動式的方式,一段一段把程式運行完,體驗一下 Azure OpenAI API的呼叫。你看到上面的影片,就是整個操作過程。 由於notebook程...

以MS Bot Framework串接OpenAI API實現跨平台(頻道)機器人開發

圖片
前幾天介紹過如何透過 LINE Messaging API 來串接 OpenAI API,實現具有GPT能力的LIEN Bot。但如果你的 ChatBot 不想只支援 LINE 怎麼辦呢? Microsoft Bot Framework 是另一個不錯的選擇。 Microsoft Bot Framework 提供了一個健全的平台,讓開發者可以建立、測試、和部署具有高度互動性的聊天機器人,除了可以直接串接 LINE Bot, 還支援 Teams、Telegram、FB、Skype、Alexa、Web UI、甚至 email 和 SMS…等不同的Channel。 當它與 OpenAI 的 API 結合時,不僅可以快速的建立出對談機器人應用 ,更能確保了機器人可以在多種平台上運行,包括網頁、社交媒體平台和行動應用,使其更具可訪問性和便利性。 底下這個在MS Bot模擬器中的截圖,就是我們在上課的時讓學員做出的成果,你會看到透過 Bot Framework 設計的對談機器人,具備理解前後文與對談記憶,由於ChatGPT的加持,可以輕易的理解用戶的對談訊息,從而輕鬆地蒐集用戶的購票資訊,協助用戶進行購票。 這個範例的最後,產生了一個可以傳遞給 購票系統的 JSON 內容,只需要再加上呼叫 購票系統的API,就可以在對談中自動完成協助用戶購票的動作了。 讓 OpenAI API 產出 JSON 是為了方便開發人員後續可以直接呼叫 售票系統的 API 來完成真正的購票行為,如此一來可以更方便的做系統間的整合。 而採用 MS Bot Framework 開發的好處在於,可以輕易地透過 Azure Bot 的維護後台,以設定的方式,就可以讓串接好 ChatGPT 的 Bot 與各種不同的頻道進行整合: 這樣我們只需要撰寫一次,就可以直接支援各種不同的操作介面或App。 基本款的 MS Bot Framework + ChatGPT 範例,可以參考筆者的 Github repo: https://github.com/isdaviddong/DemoChatGPTwithMSBotFramework.git 相關課程: https://www.studyhost.tw/NewCourses/LineBot

使用LINE Bot搭配OpenAI API建立出新一代的AI機器人

圖片
ChatGPT的出現,是對談機器人一個明顯的分水嶺。 你肯定用過許多網路銀行的對談機器人服務,或是類似的其他機器人,然而效果總是讓人覺得差強人意。原因不外乎幾點,過去的對談機器人很明顯無法明白你說的話,這是NLU(natural language understanding)能力的不足。再來,過去的對談機器人大多沒有前後文的概念,也沒有記憶,因此對談起來常常讓你覺得答非所問,牛頭不對馬嘴,整體效果並不理想。 但ChatGPT卻讓人完全沒有這樣的感覺,主要是ChatGPT對於NLU有極強的能力,ChatGPT本身又有前後文記憶,這讓整體對談效果理想非常多。 透過OpenAI API,我們也可以用LINE Bot做一個類似ChatGPT的客服機器人,這一篇,就step by step來跟您介紹,如何實現一個ChatGPT能力加持的LINE Bot。 建立LINE WebHook 建立LINE Bot的方式過去我們在Blog有介紹很多次了,我們這邊就不再贅述。 我們在建立好LINE Bot之後,可以建立一個WebHook的開發專案(使用 C#與 .net core): md folder cd folder # 建立 Web API 專案 dotnet new webapi -f net5.0 # 安裝套件 dotnet add package linebotsdk # 安裝程式碼範本 dotnet new --install isRock.Template.LineWebHook dotnet new linewebhook # 開啟VS Code ( OR vs2019/vs2022) code . 上面這段CLI指令會建立出一個 .net core 的 webapi 專案,建立好後透過 VS Code 開啟,並且修改 LineBotChatGPTWebHookController.cs 中的 Admin User ID 與 Channel Access Token: 這個動作是讓 WebHook 可以控制你的LINE Bot來 接收 與 發送 訊息。 接著看同一支程式碼中的 117 行,由於我們要呼叫 OpenAI 的 ChatCompletion API,因此我們把程式碼中的 117 行從 CallAzureOpenAIChatAPI ...

如何申請 OpenAI API 金鑰:Step By Step

圖片
引言 在當今由AI驅動的世界中,讓你的應用程式能夠連接先進的人工智能技術,是許多開發者和企業的重要需求。提供ChatGPT 服務的 OpenAI ,提供了一系列強大的 API,包括著名的 GPT 模型,它們可以幫助開發人員在各種應用中實現自然語言處理(NLP)。要使用這些 API,首先需要申請一個 API 金鑰。 以下是申請過程的逐步指南。 步驟 1:進入 OpenAI 網站 首先,前往 OpenAI 開發人員官方網站 。在網站的右上角,您會找到“註冊”或“登錄”選項。如果您還沒有 OpenAI 賬戶,您需要先註冊一個。 步驟 2:登入賬戶 建議採用 Google 帳號以SSO方式進行登入: 登入後,即可前往 https://platform.openai.com/account/billing/overview 網址,並且設定付款方式: 步驟 3:申請 API 金鑰 登入完成付款方式後,即可前往 https://platform.openai.com/api-keys 網址,建立新的 API 金鑰: 建立好金鑰後,即可開始使用 OpenAI 的 API囉。 不妨,先從 文件生成 和 圖像生成 開始? 相關課程: https://www.studyhost.tw/NewCourses/LineBot

善用 OpenAI 的 Completions API

圖片
OpenAI 的 Completions API 雖然已經是屬於legacy的API,但其實一直以來它都是一個挺方便的文字生成工具。 這個 API 提供了對 GPT-3 和最新的 GPT-4 模型的存取,允許用戶輕鬆創建自然語言應用。無論是文章 自動生成 、 語言翻譯 還是 情緒分析 ,Completions API 都是相當便捷好用的API。 要使用 OpenAI Completions API,開發人員可透過 POST 方法與 API 互動。在 Request 的 Header 中,應包含 Authorization 字段,其值為 Bearer [你的API金鑰] ,以認證API的使用者身份。 ( 金鑰申請方式 ) Request 的 Body 則需包含數個參數,主要是 model (指定使用的 GPT 模型), prompt (輸入給模型的提示文本),以及 max_tokens (指定生成文本的最大長度)等。透過指定這些參數,開發者可精確控制生成出的文字,例如: 你會發現,當使用 OpenAI Completions API 的 POST 請求時,Body 部分的撰寫相當重要。這部分的內容指導了 AI 模型如何回應需求。其中, prompt 屬性是控制AI Model生成文字的起點,而 max_tokens 則指定生成內容的最大長度。其他可用的參數包括 temperature (控制回應的創造性), top_p (影響回應的多樣性),以及 frequency_penalty 和 presence_penalty (用於調節特定詞語的重複出現)。合理的設定這些細節,能夠讓開發者有效地定制模型的回應,以符合其特定應用場景的需求。 我們再透過一個例子來看 Completions API的另一種用法。假設我們想要生成一段關於人工智能未來趨勢的文字,我們的 POST 請求的 JSON Body 可以如下: { "model" : "gpt-3.5-turbo-instruct" , "prompt" : "描述未來五年內人工智能的發展趨勢" , "max_tokens" : 1450 , "temperatu...

使用 OpenAI 的 Chat Completion API

圖片
OpenAI 在 ChatGPT 紅了之後,開始逐步把背後的 LLM(大型語言模型) 開放給開發人員使用(當然是收錢的),LLM 作為對談機器人實際的運算主體,它隱藏在雲端的某一個角落悄悄的運行著,而外部的 UI 則是透過 API 來存取這個大型語言模型(LLM): ChatGPT 採用 Web 的方式實作此操作界面,背後也是透過 OpenAI 的 API 來叫用LLM。而當開發人員有了API可以呼叫LLM之後,我們(企業內的開發人員),也可以建立自己的界面,或在自己開發的應用程式中直接來使用AI,不管是 App、Web 或是ChatBot (像是 LINE Bot),都可以透過串接 OpenAI 的 API ,來叫用 LLM 實現各種 AI 加值功能。 其中, OpenAI 釋出的 Chat Completion API 就是作為對談機器人應用的主要API 。它讓開發人員可以直接叫用最新的 GPT 模型(GPT-3 or GPT-4),生成流暢、(與提示)關聯性高、且自然的回應對話。 在接下來的介紹當中,我們將深入檢視該功能的REST API 呼叫方式,並通過實際例子來展示其用法。 功能概述 從功能面來說,Chat Completion API 能夠理解用戶傳來的訊息(提示),並且以智能助理的角色來回應,由於LLM具有基礎知識,其回應範圍從日常對話到專業的主題,都可以很好的進行問題解答、情緒分析、故事講述等多種任務,甚至可以生成 JSON(這對於開發人員相當重要)。 要使用 Chat Completion API,開發人員可以通過 HTTP Request與之互動。該API標準的HTTP請求包括以下幾個部分: Endpoint : API 的 URL 端點,就Chat Completion API 來說,目前是 https://api.openai.com/v1/chat/completions。 Headers : 包括用於認證的 Authorization 欄位,其值應為 Bearer [您的API金鑰] 。 Body : 包含請求參數,如 model (指定 GPT 模型), messages (包含一系列對話歷史和當前用戶消息的陣列),例如: { "model" : "gpt-3.5-tu...

使用DALL-E3在程式碼中動態生成圖片

圖片
我依稀還記得AI的上一波潮流,大概是在2016年前後,各種基於類神經網路模型的應用開始市場化。但當時,還沒有到現在這種遍地開花的程度。 自從去年2023年11月,ChatGPT出現之後,坊間對生成式AI的 各種想像 開始變成了 各種應用 ,圖像生成當然也是其中之一。 如今,透過雲端的API,使用程式碼來動態產生圖片,已經是人人都能夠做的事情。OpenAI除了提供文字的生成,也提供了圖像的生成,採用的是DALL-E技術,最新的更新是DALL-E3,加入了類似於 ChatGPT 的 AI 聊天機器人技術來幫助完善圖像生成的提示,也因為這樣,你只需要透過自然語言,以形容的方式,甚至只需要打個關鍵字,就可以讓AI輕易的為你繪製出想要的圖片,支援不同的大小( 1024x1024 , 1792x1024 , or 1024x1792 )與風格。​ 熟悉REST API使用的開發人員,可以輕易地透過底下這樣的方式,來呼叫API,產生所需的圖片(底下是透過postman工具呼叫API的擷圖): 如同上面API呼叫中的提示,我們要生成 “ 麥當勞美味的漢堡 ” ,出現的圖片如下: 完整的HTTP/1.1 呼叫為: POST /v1/images/generations Host: api.openai.com Authorization: Bearer ______API_KEY______________ { "model": "dall-e-3", "prompt": "麥當勞美味的漢堡" , "n": 1, "size": "1792x1024" } 你會發現,其實呼叫方式相當簡單,endpoint 是 https://api.openai.com/v1/images/generations ,只需要在http Header中提供 API Key 即可呼叫,API Key的建立方式在 這裡 。不過當然,好的服務是要付費的,OpenAI 關於DALL-E的費用在 這裡 。 使用C#呼叫API的程式碼如下: using System; using System.Net.Http; using Syste...

(無須程式碼)三分鐘建立出自己的GPT請假助手

圖片
OpenAI DevDay 最驚豔的展示之一,就是現在人人都可以設計自己的GPT了。 (成果展示影片請參考底下) 不用寫程式,只需要跟ChatGPT以對談的方式,ChatGPT就可以自動幫你做出客製化的GPT,給你的公司、客戶、甚至上架給所有人使用。 只要你有ChatGPT帳號,即可開始建立: ChatGPT會問你想建立什麼功能的GPT,用對談的方式,一步一步引導你做出自己客製化版本的GPT,還可以即時預覽: 你可以用對談的方式(當然也可以上傳文件),讓ChatGPT知道請假規則: 對談之中,不知不覺的,你的客製化GPT已經完成,你可以選擇公開給全世界所有人,或是只給自己的好友或企業使用: 可預見的未來,將能更進一步的,串接企業系統的API,與自己企業內的ERP、CRM、HR系統整合。 半年前,我在一次受訪中曾說,ChatGPT的出現,將會改寫資訊系統的UI發展方向,如同電影Star Trek中,以自然語言語音控制電腦實現你想要完成的任何功能,現在已經近在眼前。 做完之後,用戶就可以透過客製化GPT以自然語言的對話方式請假了: 改變真的很大,未來將會發生什麼變化,就留給大家自己想像了… 相關課程: https://www.studyhost.tw/NewCourses/LineBot

使用 JSON Mode 讓 OpenAI API 乖乖回傳 JSON

圖片
有在使用 ChatGPT(OpenAI API)開發的Developers 一定知道,對於開發人員來說,使用OpenAI API有一個重要的技巧,就是要求 API 回傳JSON格式的物件。 這樣的 Prompt 非常好用,因為 ChatGPT 最強的功能可能不是回答正確的答案,但對於理解用戶說的自然語言,絕對可以說是所向披靡、無人能及。 如果在程式碼中,能夠要求OpenAI API固定的回傳JSON格式,這樣我們就可以輕鬆的Parsing回傳結果。然而,過去的OpenAI API,就算你的 Prompt 寫的再好,在幾十次的呼叫當中,總是會有一兩次回傳給你的不是精準的JSON格式,而是帶有描述性的字串,這可能會讓接收的程式立刻崩潰,除非你在程式碼中額外做一些判斷,然後重新呼叫API,retry到接收到正確的JSON格式為止。但顯然,這樣的結構設計會讓程式顯得有點傻。 如果OpenAI API能乖乖的回傳 JSON 不就好了嗎? 恩~ 恩~ OpenAI DevDay 之後,這件事情實現了。 現在你可以在呼叫 Chat API 的時候,加上底下的參數: "response_format" : {"type": "json_object" } 這會讓回傳的結果一律變成 JSON 形式。 這指令必須搭配新的 Model 👉gpt-4-1106-preview 或 gpt-3.5-turbo-1106 JSON Mode可以確保你拿到的一定是一個可以解析(Parsing)的 JSON 字串,這使得你 parsing JSON 的時候,不會得到 null,開發人員終於可以不再碰到因為 ChatGPT 的回傳不確定性,所可能帶來的程式崩潰問題。 我自己覺得,OpenAI DevDay中新推出的JSON Mode這個小功能反而是對開發人員最大的幫助。

輕鬆建立具有 ChatGPT AI能力的LINE Bot

圖片
ChatGPT 也紅了好一陣子,大部分開發人員應該也知道,如果要把ChatGPT的能力整合到自己的專案當中,可以透過 Open AI 所提供的API(或是微軟提供的Azure OpenAI API)。 我們開發LINE Bot也是,想做一個具有ChatGPT能力的LINE Bot非常簡單。如果你是C#開發人員,甚至可以直接用套件和範本來完成。 你可以先用 .net 6 以上的環境建立 WebAPI專案: md testgptbot cd testgptbot dotnet new webapi 完成後,請一併執行 LineBotSDK和LineWebHook範本的安裝: dotnet add package linebotsdk dotnet new install isRock.Template.LineWebHook dotnet new linewebhook 執行後你會看到底下畫面: 這時開啟專案,會看到這些範本內容,主要是LineBotChatGPTWebHookController 這隻: 這隻是寫好的 LINE Bot 範本,同時支援 OpenAI API 和 微軟的Azure OpenAI API。如果您熟悉LINE Bot的開發,只需要把25行的Channel Access Token換掉,順便把 20 行的 Admin User ID換掉(這是處理發生例外的訊息用的),這樣主程式就完成了。Channel Access Token和Admin User ID這些資訊你可以從LINE Developers Console( https://developers.line.biz/console )找到: 為了讓這個 LINE Bot 可以支援 OpenAI API,我們把需要一個 OpenAI的API Key,這個Key可以從OpenAI的開發人員後台( API keys - OpenAI API )看到: 有了這些資訊之後,只需要把剛才LineBotChatGPTWebHookController 這隻程式碼中的 117 行調整成 return ChatGPT.CallOpenAIChatAPI(…),並填入剛才取得的key: 將其運行起來之後,你就可以跟這隻 LINE Bot互動了: 你會發現,有了 Ch...