[學習心得][Golang] 透過 Flex Simulator 有效率開發與除錯 FLEX Message 以 Go SDK 為範例

前提 LINE Bot 的開發上, Flex Message 是一個強大又美觀的訊息顯示方式。並且可以發出多種類型訊息格式。本篇文章分享了,如何透過快速版本設計來寫出你想要的形式。 本篇文章將透過一個流程,循序漸進告訴你如何完成上面的範例訊息,並且如果開發 FLEX Message 上的問題時,也可以透過 FLEX Simulator 來幫你除錯。 開始了,設計苦手 任何的前端苦手(像是我),都對於如何找到一個好 Flex 的格式內容感覺很辛苦。這時候可以考慮使用 FLEX Simulator 先做你的起手式。 (FLEX Message Simulator 提供給你所見即所得的編輯方式) 這裡也推驗”藉由 Flex Message Simulator 實現並發送測試用 Flex Message” 讓你對於 FLEX Message Simulator 有更深刻的了解。 透過 Showcase 挑選喜歡的樣板 這裡可以挑選喜歡的格式,我們先挑選出我們喜歡的 “Local Search” 版面。 透過 FLEX Simulator 修改 依照本次範例,我們不需要評比的星星。可以透過 FLEX Message Simulator 來直接移除(用剪刀) 。 修改好之後,按下右上角的 </> View as JSON 來查看相關資訊。這些可以讓你知道如何開始編譯你的程式碼。 開始弄到 Golang 程式碼 如果沒有要把 FLEX 套著資料,整包 JSON 直接丟下去用 如果要開始把 FLEX Message 弄到你開發的聊天機器人的話,可以先建議以下方式: 其中 jsonString 是 contents, err := linebot.UnmarshalFlexMessageJSON([]byte(jsonString)) if err != nil { return err } if _, err := app.bot.ReplyMessage( replyToken, linebot.NewFlexMessage("Flex message alt text", contents), ).Do(); err != nil { return err } 其中 UnmarshalFlexMessageJSON 可以直接把 JSON 直接轉換成 Golang code 裡面的元件,你可以再去修改,或是直接丟到訊息就好。 直接一個個的刻出來 這裡貼上一段 code 可以直接看到,這是一個慢慢用內部定義的格式來打造 FLEX Message 。 優點: 很有彈性,甚至可以套用外部資料打造數個 FLEX Bubble Carousel 。 缺點: 就是需要一個個把格式填寫上去,不過使用 VS Code 的體驗,應該都可以快速選到才是。 發送 FLEX Message 失敗怎麼解決? 大概也是許多開發者的痛,就是當 FLEX Message 發送失敗的時候。到底要去哪裡查錯誤訊息? 經常會發現 Log 也沒那麼清楚怎麼辦? flexMsg := linebot.NewFlexMessage(ALT_TRAVEL_FLEX, flexContainerObj) if _, err...
繼續閱讀

[學習心得][OpenAI] 關於 OpenAI 新功能: Function Calling

前提 OpenAI 在 06/13 發表了新的功能 “Function calling“,其實對 LLM 的開發上算是一個完整的新發展。 本篇文章將快速解釋一下這個更新將會帶來哪一些變革,並且也透過將 LINE 官方帳號的相關整合為案例,幫你打造一個旅遊小幫手。 關於 OpenAI 新的功能Function Calling 的細節 關於 “Function calling” 主要是拿來處理 Intent 的判斷,並且針對使用者的意圖給予相關的 JSON 輸出給開發者作為處理之用。 換成白話文來說,如果你今天想要做一個「天氣服務的 ChatGPT LINE Bot 」的話,那麼你該如何弄呢? 相關資料: 部落格 “Function calling” API 文件 ChatComplete 在 OpenAI Functions Calling 之前,要怎麼做? 根據 “DeepLearning 提供一堂很好的 Prompt Engineering for Developers” 有提到,你可能要這樣做: 你現在是一個協助抓取使用者資訊的小幫手,如果使用者詢問了某個地區的天氣。你就幫我把地區抓出來透過以下格式呈現。 --- { "location": "xxxx" } 很多地方是聰明的,但是還是沒有處理非相關天氣詢問要拒絕。這裡可以透過 ChatGPT Share 查看結果。如果是一個 NLU 的小幫手,在這個情況下可能要回覆 { "location" : ""} 或是 NULL ,但是這樣會讓你的 Prompt 非常的冗長,而且通常很長的防禦Prompt (咒語)只能防禦一個階段。 那該怎麼辦呢? 那 OpenAI Functions Calling 怎麼幫助你呢? 這裡給一張流程圖: PlantUML 第一步: 呼叫 Chat / Complete Function Calling 從文章內 “Function calling” 可以提供一個很簡單的範例,你可以發現以下得呼叫方式跟原本使用 chat/ completion 沒有差別,但是回傳資訊差很多了。 curl https://api.openai.com/v1/chat/completions -u :$OPENAI_API_KEY -H 'Content-Type: application/json' -d '{ "model": "gpt-3.5-turbo-0613", "messages": [ {"role": "user", "content": "What is the weather like in Boston?"} ], "functions": [ { "name": "get_current_weather", "description": "Get the current weather in a given location", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "The city and state, e.g. San Francisco,...
繼續閱讀

[學習心得][Golang] 透過 ChatGPT 來做 REGEX 的事情

前提 大家應該都跟我一樣,經常使用 ChatGPT 來協助一些 coding 上的問題。尤其是對於 Regular Expression 的問題。最近在處理上發現,需要透過「正向表列」,而非跟他講哪些不可以的方向比較容易成功。也應該說, Regular Expression 本來就要透過正向表來才對。 原本: // AddLineBreaksAroundURLs takes a string as input, finds URLs, // and inserts a newline character before and after each URL. // It returns the modified string. func AddLineBreaksAroundURLs(input string) string { re := regexp.MustCompile(`(https?:\/\/[^\s\p{Han}]+)`) return re.ReplaceAllString(input, "\n$1\n") } 發現無法處理: https://voyager.minedojo.org/。 當我發現我一直跟 ChatGPT 講要排除 ` https://voyager.minedojo.org/。` 這個案例的時候,往往會一直卡住無法向前。 但是寫多個測試案例倒是真的蠻好的。 Unit Testing code func TestAddLineBreaksAroundURLs(t *testing.T) { tests := []struct { input string expected string }{ { input: "Check out this website https://example.com and this one http://another-example.com", expected: "Check out this website \nhttps://example.com\n and this one \nhttp://another-example.com\n", }, { input: "Here is an URL with dot at the end https://voyager.minedojo.org/。", expected: "Here is an URL with dot at the end \nhttps://voyager.minedojo.org/\n。", }, { input: "This is another test 可在https://voyager.minedojo.org/上訪問。", expected: "This is another test 可在\nhttps://voyager.minedojo.org/\n上訪問。", }, // Add more test cases here as needed } for _, tt := range...
繼續閱讀

[TIL] 關於 WWDC 2023 身為開發者你應該知道的事情

我如何看待 WWDC23 ? 身為技術研討會主辦人,我看的是: 整體錄影方式與收音技巧 每一個講者的職稱(可以看出內部分工與架構) 平台想要規劃出的生態圈 職稱相關 應該跟許多公司一樣: Engineering Progam Manager - 技術專案經理 Engineering Manage - 技術開發的經理 職稱其實也代表部門的多寡,對外部而言很嶄新的 visionOS 部門卻有那麼多清楚分工,而且能演講的人還蠻多的。不愧是 Apple 。 硬體相關 New Mac Studio 可以有六顆螢幕(原來之前的不行啊?!) iOS 17 帶來軟體開發新變化 Name Drop 近場溝通新應用 取代掉所有名片應用 (LINE OA 其實有類似做法) 不知道會用到哪個 SDK ,應該會開放給其他 App 使用。 更智能的鍵盤輸入 可能是使用 local 「In-line predictive text API」 TV OS 相關變革 透過 iPhone 直接在 Apple TV 開會 走 Continuity Camera API Vision Pro 帶來的軟體開發變化 (要接線~~~~~ Orz) 果然要另外接電池 Apple Vision Pro 帶來新的生物識別系統「Optic ID」 可能帶來影響: 虹膜辨識會變成是基本 OAuth 的認證設備(搭配 Passkey (a.k.a. FiDO2) 比起 WorldCoin 可能因為 AirDrop 產生盜用 ,但是 Vision Pro 更可以取得更多人的虹膜資訊。 雖然依照 Apple 的個性,不可能有任何取得方式。但是代表 Optic ID 可以更加的準確, Passkey 的未來更令人期待。 iOS SDK Accessibility SDK Privacy API
繼續閱讀

[TIL] 換 iPhone 需要注意的小事項

為何更換手機 最近因為要出國,因為讓小孩子避免走失。買了 Apple Watch ,卻發現沒有辦法漫遊。只好弄一隻支援 ESIM 卡片的手機給他。 這樣一來,最方便的方式就是把我的手機(iPhone XR) 給他,然後我換一隻最新的 iPhone 14 Pro (明明 15 就快出了) 大部分的軟體使用「iCloud 備份與復原」應該可以搞定。 iPhone 系統軟體,需要注意的部分 舊手機: 記得把 Find My Device 關閉 記得登出 iCloud (先將以下都做完,先將以下都做完,先將以下都做完) Apple Watch 需要先解除配對(就算忘記也沒關係,就重新配對洗掉) Apple Pay 全部要重新認證(到新手機) Apple Watch 的 Apple Pay 也要重新認證(也是在新手機上操作) 不要急著洗掉就手機 iCloud 備份與復原後,有一些 App 可能需要他。 大部分的應用程式都可以走 iCloud 復原來安裝(開啟的時候,也通常可以無痛轉移)。但是有一些應用程式需要舊手機轉換。 Steam App 需要舊手機認證,才能轉換。 WeChat 一樣,需要舊手機掃描 QR-Code VPN 軟體 每個公司可能不同,有的管制更嚴格。 LINE 的部分,完整可以參考【LINE換機官方懶人包】帶您一步一步操作~ iOS與安卓都適用 舊手機: 先去備份起來(可以透過 iCloud) 要確保有備份完整,確保有備份完整,確保有備份完整 打開手機裝 LINE 掃描舊手機 QR Code 登入,並且轉換手機。 這時候,選擇從備份恢復。 如果,發現沒有完整恢復回來?(也就是備份有失敗) 想要打開舊手機,會發現已經轉換過來,無法開啟。 刪除舊手機的 LINE ,重新安裝。 重新以上步驟,將新手機帳號轉換回來就手機。 這時候發現對話都回來了,再來重新備份一次。這次要注意有沒有備份完成。 然後重複手續,轉換到新手機。 大概就這樣,本來以為換手機很方便。結果也是卡蠻久,最重要的還是 LINE 卡住(嗚著臉)。
繼續閱讀

[TIL] Microsoft Build 2023 Day2- 資訊整理

影片: (官方直播,可能會下架) Plugin 會是新世代的 Fontend 前一天 CTO Kevin Scott 在 “The era of the AI Copilot” 關於 IDE 對於 Plugin 開發的支持 Web IDE 支援很快速建立 Copilot Plugin 這裡有個 Jira Copilot Plugin 案例 商業用語部分 - Syntex Plugin Docu sign flow with Copilot Copilot 總結 關於 Plugin - Developer Success Productivity: 完整的說明,有相關的 “Team Toolkit” 有個人化體驗 可以很方便開發跟 Deploy Dev Home: 快速建置開發者的相關環境 透過帳號登入 相關設置都有 今天有 Preview 版本在 Windows Store Build and maintain your company Copilot with Azure ML and GPT-4 | BRK211H 整個流程相當清楚,又能完整呈現 Azure Copilot 與 Azure ML 的強大。 先建立一個情境,幫生意擴展找客戶挑選 TA 透過 Copilot 給予相關的信件: 這裡想要給予更多更貼近 TA 的資訊,尋找過去信件與相關資料。
繼續閱讀