發表文章

目前顯示的是 2月, 2025的文章

在大語言模型(LLM)中使用企業內的資料

圖片
大型語言模型(LLM)雖然很好用,但在生成回應時,可能會出現「幻覺」現象,生成與事實不符的內容。此外,LLM 的知識受限於訓練資料,無法即時更新。為解決這些問題,檢索增強生成(RAG)技術常被引入,透過從外部知識庫擷取相關資訊,為模型提供最新且準確的資料。這樣可以提高用戶詢問問題時,回應的準確性,也減少了重新訓練模型的成本。但建立RAG功能往往需要一些技術能力,對一般用戶來說可能不是人人都可以實施。 因此,在 Azure OpenAI 服務中,加入了「新增您的資料」(Add Your Data)功能,允許使用者將自訂的非結構化或結構化資料(如 PDF、Word、MarkDown、純文字…等)整合到 OpenAI 模型中,以提供更具上下文相關性的回答。 這項功能透過 Azure AI Search 進行索引,並運用像是 Retrieval-Augmented Generation (RAG) 這樣的技術,在用戶詢問問題時,優先檢索事先準備好(索引過)的資料,將其作為LLM回應的基礎,以提升回應的準確性。這技術適用於知識庫QA、企業內部搜尋 及 AI 助理…等應用,無須微調模型即可實現個性化且正確的回應。 使用「新增您的資料」 使用的方式也很簡單,當你佈署好一個AOAI的LLM模型(例如 gpt-4o)之後,可以到上圖中的聊天遊樂場,接著按下圖中「新增您的資料」按鈕,在出現的畫面上選擇Upload files: 接著你會看到底下畫面,請先點選藍色的小字,建立 Azure Blob 與Azure AI Search 服務(建立時建議與AOAI佈署在同一個資料中心): 建立儲存體時,可以參考底下設定(名稱則可以自行選擇): 建立 Azure AI Search 服務時,則可以參考底下: 完成後,我們回到 Add Your Data 的設定畫面,請依照底下順序操作: 先選取 Azure Blob 與 Azure AI Search 服務,接著輸入索引名稱(可自行設定),然後暫不勾選新增向量搜尋,最後按下『開啟CORS』,成功後,會出現底下畫面: 你會發現顯示的訊息變成綠色,這時候就可以按『下一個』按鈕繼續。 接著,你就可以在底下畫面上傳檔案(可以接受 pdf, 文字檔, docx, pptx 等多種格式…): 然後會出現讓你選擇搜尋類...

為 Azure DevOps Services 建立 Linux Self-hosted Agent

圖片
學員上課的時候都會關心,位於雲端的 Azure DevOps Services 要如何將應用程式佈署到地端 on-premise 環境? 主要有幾個方法,像是使用 Self-hosted Agent、使用 Deployment Group、或是透過 VPN 等機制,其中最簡單的就是 Self-hosted Agent 的建立,它同時也是我們想要進行客製化的建置環境或流程時,最有效的方式。 準備VM 想建立 Self-hosted Agent 非常簡單,以 Linux 的 Agent 為例,只需幾個步驟。 首先,請先建立一台 Linux VM,我們以 ubuntu 為例: 只需要選擇 24.04 的版本,設置適當的大小,並且以自訂密碼的方式配置 SSH (22)連接 port 登入即可: 接著,在 ADO 的 Agent pools 選擇 Default: 在跳出的畫面選擇 Linux 複製最新版的 agent 下載位置(上圖中 copy URL to clipboard 取得的網址即是)。內容應該會類似底下這樣: https://vstsagentpackage.azureedge.net/agent/4.251.0/vsts-agent-linux-x64-4.251.0.tar.gz 接著,透過 SSH 登入剛才建立好的 ubuntu vm,採用的方式是: ssh 帳號@IP 輸入密碼之後,如果成功,則會出現底下畫面: 遠端登入成功之後,即可對該伺服器下達指令。 請在 windows terminal 以 ssh 連線的 ubuntu 環境中,下達底下指令: mkdir myagent && cd myagent 這會建立一個myagent資料夾,並且進入該資料夾中。 接著,請執行底下指令,來下載agent: curl -O https://vstsagentpackage.azureedge.net/agent/4.251.0/vsts-agent-linux-x64-4.251.0.tar.gz 其中 curl -O 是下載檔案,而後面的url,請換成您剛才在上圖A中所複製到的最新版URL。 接著,再透過底下指令解壓縮: tar zxvf vsts-agent-lin...

Power Automate 自動化網頁操作小技巧

圖片
今天,到客戶端上課的時候碰到了個問題,有個範例是使用 Power Automate Desktop 來進行自動化的 Google search。本來是個再簡單不過的動作,卻因為瀏覽器的行為導致搜尋的結果不正常。 🎷問題 (為了方便描述,我稍微做了簡化)其實整個 flow 大概只有底下這樣: 第一個步驟 : 自動開啟 chrome 瀏覽器,進入搜尋頁面? 第二個步驟 : 定位到 文字輸入方塊 中,輸入特定文字(上面的例子是 流感疫苗 )。 第三個步驟 : 模擬滑鼠自動按下 『Google 搜尋』鈕。 本來應該這樣就可以順利運行,但瀏覽器的一個行為,卻導致第三個步驟卡關。 就是 Chrome 瀏覽器在步驟二自動出現了彈出式的選單(我們姑且先不管為何會有這個異常行為,先看這個行為導致的結果),彈出的選單壓住了底下的『搜尋』按鈕: 你會發現在這種狀況下,這時即便第三個步驟可以運行,搜尋出來的結果也不正確: 因為這時候搜尋到的,其實是排在選單上的候選項目『流感疫苗 副作用』,而非原本我們在文字方塊中輸入的文字『流感疫苗 』。 類似這樣的狀況其實很常在透過 power automate 進行瀏覽器自動化時發生。 這是今天到客戶端進行教育訓練時碰到的問題,碰到這種狀況,一時也讓我突然卡住無法繼續。 🎷解決方案 該如何解決呢? 也不難,我讓學員一起和我想辦法,有位學員想出了這個主意 👉 就是『隨便點一下,讓選單消失』,然後再去按下那個『搜尋』鈕。 問題是,要怎麼『隨便點一下』? 我們使用『按一下網頁上的連結(或其他任何元素)』這個 action,來模擬滑鼠點選的行為: 按下google搜尋頁面上空白的地方,讓選單消失: 接著,再用同一個 action 來模擬搜尋鈕的點選: 瀏覽器就會自動在選單消失後,再繼續按下『搜尋』鈕,這樣,就可以順利進行搜尋囉。 🎷結語 在設計 RPA 流程時,因為瀏覽器或運行環境的變數,經常會遇到一些不確定性。因此,透過這類「小動作」來排除異常情境,可以讓自動化流程更穩定、更可靠。 而且,學員能夠親自操作並思考解決方案,不僅能提升學習效果,也能培養解決問題的思維,這點特別有趣! 你有遇過類似的問題嗎?你會怎麼解決呢?