-
「學習心得 – 看高手學 n8n AI 工作流」
我已經學會自己架設 n8n 以及建立 AI 工作流一陣子了,但卻沒什麼長進,不知道還能做什麼。只有昨天稍稍有進步,做了一個 X.com 抓新聞的 AI 工作流。 今天我想將 n8n 的基礎學得更扎實,所以又在 YouTube 找學習。找到一分熱騰騰,剛出爐 2 週的免費 n8n 教學:https://www.youtube.com/watch?v=GIZzRGYpCbM沒想到這部片讓我看的過程驚呼連連,原來 n8n 與 LLM 還有很多好用之處,只是我之前不懂得怎麼用,是腦袋裡知識的貧窮限制了我的想像!最讓我驚訝的是該講者示範一個「自動化 AI 讀履歷」工作流。 我從這部片學到的幾個實用的技巧:1. n8n 提供「自訂表單」,類似於 Google 表單,可作為工作流輸入。 2. n8n 的 Gmail 方塊還支援人類互動,比如寄一封信包含「拒絕」與「接受」的按鈕,工作流可以等人類按下按鈕再繼續剩餘的工作流。因此它可用來設計「半自動工作流」。 3. 有效的提示詞工程 (prompt engineering):講者下提示 LLM 閱讀求職履歷 PDF 文件、生成總結、作出推薦,再輸出結構化的資料作後續工作流處理。要知道能正確達成以上複雜的事項後,整個「自動化 AI 讀履歷工作流」就可行了!而講者也不私藏,把如何下提示的詞都公開。 最後,我認為該「自動化 AI 讀履歷」工作流知道怎麼做後,不難複製出來。我也看過許多 AI 應用可以做到同樣自己難以想像的自動化,但我認為有一些技術應該也是「江湖一點訣,說破不值錢」吧😅
-
「與 AI 同事共事 – n8n 自動化 AI 工作流」
今天在研究如何用 n8n 做一個自動化 AI 工作流,我想到可以做一個已有人做過的題目 – 自動抓取網站訊息作總結,比如自動定時從 X.com 搜尋 AI 的 tweets,改寫成新聞頭條並傳到我的 Telegram. 圖 1 是我的自動化搜尋 X.com AI tweets 的 n8n AI 工作流程圖。X.com tweets 經由 Llama 3.1 8b LLM 總結後傳到我手機 Telegram 的訊息,不過 AI 改寫的訊息有些微不準確😅 我做的不是一個新穎的題目,但在開發過程所得到的經驗對我是新穎的。雖然說在這 AI 時代,什麼樣的資訊都有,可能連這一方面的開發經驗也能用 AI 查到,但我認為自己動手做才更能體會這些經驗的價值,因為有些經驗不容易或缺乏量化的比較,不易看出價值。此外,也讓我思考一件事:什麼情況要用 AI,什麼情況不用?我認為有一大原則:如果使用 AI 沒比較有效率或學不到東西的話,那就不該用。反之,該用。 我這次開發的 n8n AI 工作流,就體驗到什麼叫「與 AI 共事」。「共事」一詞,如同許多人的看法:AI 開始能漸漸取代人類的工作,公司可以聘 AI 來做事,與人類成為「同事」! 此次我與 LLM AI 同事…
-
「練功文 – Elasticsearch Vector Search」
這是一個之前作語意搜尋 (semantic search) 的作品的改版。主要的改動是將向量資料庫改成 Elasticsearch vector database,另外還支援 debugpy & VS code Python debugger。 原始碼:https://github.com/MrMYHuang/demo_langchain_es 之所以會想改用 Elasticsearch,是看到有些職缺有需求,而自己也想挑戰自己不熟的技術。我先照著這個入門教學影片學習:https://youtube.com/playlist?list=PL_mJOmq4zsHbcdoeAwNWuhEWwDARMMBta&si=WHGsnQx6VjmQ6-dM從中我學到 Elasticsearch 一項的技術 – 全文檢索 (full text search),它的原理很容易懂,就好比「一本書的索引」。我們都知道書的索引要怎麼用,比如想找某個專有名詞出現在書本的第幾頁,就會去查索引。書本的索引的結構就是一堆「某個名詞出現在書本哪幾頁」的對照,而 Elasticsearch full text search 也是利用文字的索引來快速搜索文件!只不過後者是記錄「文字出現在哪幾個文件,它們的文件 IDs」。 Elasticsearch 也跟上 AI 的浪潮,支援一項 LLM AI 應用的重要元素 – vector database。它可以作語意搜尋再搭配 LLM 作 retrival augmented generation (RAG) 的應用。我的這個作品就是 demo 與 Elasticsearch vector database 作串接。 不過 Elasticsearch 其實還有一項重要優勢:它的分散式處理能力。這一點才是它獨特、強大之處。不過我目前還沒做到這一塊😅就先聊到這裡。
-
「研究筆記 – Transformer 深度學習模型」
昨天開始挑戰學習近年來爆紅的 LLM (large language model) 背後原理 – transformer deep learning model。 其實我之前有稍微看過 Wikipedia 上 transformer 講解,結果看到一堆超長的文章與數學,只好放棄,挑戰失敗😅 昨天想到如果有影片教學應該會較容易懂,就到 YouTube 搜了一下,並找點擊率高的影片,就是 3Blue1Brown 這系列的 3 部:https://youtu.be/wjZofJX0v4M?si=ykj9XakqJ-MU9NW9https://youtu.be/eMlx5fFNoYc?si=dR7MT45IAu6kuYUZhttps://youtu.be/9-Jl0dxWQs8?si=Q-Jgph37PAAtauKU這教學做得真不錯,講者會用淺顯的例子作講解 transformer 的各部分的用意。不過講者也坦白 transformer 還有一些部分很難解釋。這一點我非常理解,因為機器學習往往處理的問題是「不清楚的模型」,只能退而求其次用經驗與試誤法找出的次佳模型。即便是次佳模型,往往也難解釋其中由試誤法找出的部分。 所以我認為學習 ML 模型要有對於模型可解釋呈度的認知:最好能完美解釋一個複雜模型,但是少數天才才能做的事。我們如果花了很多力氣卻無法完美解釋,可以退而求其次、不求完美,但盡可能的「自圓其說」。也就是雖然沒有嚴謹的證明解釋完全正確,但能用一些例子說得有其道理,無嚴重瑕疵,那可能就是一個當時最好的解釋。甚至可能未來找到的完美解釋是基於此不完美解釋的修正!(例如古典力學) 以下就是我看了 YT 頻道 3Blue1Brown 講解 transformer 架構後,我的心得:完整 transformer 架構分成 encoder, decoer. 我只詮釋爆紅的 GPT LLM 所用到的 decoder. Transformer decoder 會先將輸入的文字切成 tokens(比如 1 個英文單字或中文單詞對應 1 個 token),再將各…
-
「練功文 – 圖片分類使用卷積神經網路深度學習」
我又學會 machine learning (ML) 一項技術 – 卷積神經網路 (convolutional neural network / CNN) 深度學習 (deep learning / DL)✌️ CNN DL 是 2012 年爆紅的一項技術,適合作圖片分類。首先是 AlexNet 的 CNN 達到當時一項挑戰的最低的錯誤率,後來陸續出現許多 CNNs,差異在 DL models 的結構(主要是模型各 NN 層是如何組合、堆疊)。 我實作的是用 PyTorch 做一個簡易的 CNN – TinyVGG. 作 ML 首先要有資料,我使用的是 CIFAR-10 圖片資料集,它有 10 個圖片分類。接著就照 TinyVGG 模型的層結構去堆疊 NN 層,用到的有 Conv2d, ReLU, MaxPool2d, Flatten, Linear。Conv2d 用於提取圖片中…
-
「Machine Learning – 從線性二元分類器至多元分類器」
之前我寫的一篇 deep learning 文章,在描述為模型加入非線性特性的描述不是完全正確(不好意思,當時學藝不精😅 ),目前已隱藏文章。這篇文章來說明之前不對的點。 之前我誤以為 machine learning (ML) 中的線性 (linear) 模型只能作二元分類 (binary classification),但其實能作多元分類 (multiclass classification)。如圖,是用線性模型 作 3 元分類。 無論是 2 元或多元分類,只要一資料集中,不同類別資料群的分佈滿足一定的空間隔離條件,就能用線性模型作分類。 什麼空間隔離條件?以 2 維平面來說,若在 n > 2 群資料之間找到 「n 條線相交於一點」,那麼就能將平面切成 n 個隔離的平面,就能用線性模型作分類。以圖為例,平面被切成 3 個隔離平面,可用線性模型分類 3 的類別資料群。對 3 維空間,空間隔離條件是 n 個平面相交於「一線」。 以上隔離條件如何由數學式得知?首先由平面坐標 (x1, x2) 中,2 元線性分類器開始作說明,它的線性模型數學式:y = w1 * x1 + w2 * x2 +…
-
「Machine Learning 練基本功 – 用 PyTorch GPU 加速作 Linear Regression」
我認為這個 linear regression machine learning (ML) 作品不是什麼很強大的應用程式,而是練習 ML 的基本功,對於跨入 ML 領域卻很重要,因為更強大的 ML 與這基礎有許多相通之處,比如 ML 的流程: data, train, loss, optimize, eval。 Linear regression ML 與強大的 ML,最大差異在於 AI 模型的複雜度,如 CNN, diffusion, transformer,這可是一巨大的門檻,尤其是後 2 者要用到的數學非常多🥲 我打算下一步先挑戰較簡單的 CNN. 我是看這部 PyTorch 免費教學:https://www.youtube.com/watch?v=V_xro1bcAuA目前看了 1/3,再自己用 PyTorch 實作 linear regression ML,並用 FastAPI 製作成後端應用程式。 程式原始碼:https://github.com/MrMYHuang/demo_pytorch_ml 現今 AI 的進步太快了,令我感到不學不行。如果不知道 AI 能做什麼,可以去一些論壇(如 reddit) 看別人的分享。光是看別人的分享就很驚人了,比如我最近看到有「開源」 1T LLM…
-
「用 LoRa 洗腦 LLM – 我是海賊王!」
學 AI 以來,有一個領域我有心理障礙 – 訓練模型。這領域不容易跨進去,因為背景數學, machine learning (ML) 知識要很充足、訓練資料要完整、硬體設備要強大。所以相對於 「AI 應用」,學習 「AI 模型訓練」我認為門檻頗高的。 但想跨入 AI 產業,我看了許多工作,滿多都要求要會訓練模型,所以還是得面對它一下😅 好在,不用怕,這個時代有 LLM AI 能開外掛,能越級打怪去做之前自己做不到的事。遇到困難不用怕,有 LLM 可以問。 我花了一天的研究,終於能調較 LLM。我選的基底開源 LLM 是 Llama 3.1 8B,使用 low rank fine tuning (LoRa FT)。LoRa 的好處在於,它不訓練參數很多的基底 LLM,而是掛上一個小參數的 adapter,對新的資料進行訓練。好處在於節省大量計算時間。 在訓練 LoRa 的過程,我遇到一些問題,比如:1. 我不清楚原始資料要轉成什麼格式灌給 LLM、執行一半會出現數值錯誤。後來參考網路上的範例格式,再學習如何使用 pandas 轉換與清 (clean) 資料解決。2. LLM 訓練完輸入提示詞,但輸出看不出有受新訓練資料影響,令人不解整支訓練程式哪裡有誤。後來憑著我所學的 ML 知識判斷,最可能是「新資料訓練不足」,就下猛藥灌 1000 筆我是海賊王的資料洗腦 LLM。結果終於看到 training…
-
「自架文字生成影片 AI – ComfyUI + Wan 2.2」
昨天本來在研究 AI 文字生成語音的應用,意外看到阿里巴巴開源的文字生成影片 (text to video, T2V) 模型 – 通義萬相 Wan 2.2, 畫質很不錯,就來研究看看要如何在本機使用。T2V AI 就是輸入文字提示詞,AI 就依提示詞的描述生成影片。 我發現有一款 app – ComfyUI 可以使用 Wan 2.2,我就在我的 MacBook M1 Pro MAX 64GB (MPS GPU 加速) 筆電上架設。不過一開始沒有很順利,遇到 3 個較大的問題。 問題 1,生成跑一半出現 MPS 不支援 fp8 e4m3fn 的錯誤:這是因為現今主流運行 AI model 加速的 GPU 是 nVIDIA,而不是 Apple MPS. 例如 PyTorch 這個 GPU 加速軟體,目前僅部分實作 MPS…
-
「自架 (self-hosted) AI Coding 代理人伺服器 – llama.cpp server」
今天又在 reddit 上研究 AI 新技術,看有什麼新東西可學,看到一套 LLM 工具 – llama.cpp 又有新東西推出,我就來研究一下。 然而我已一段時間沒觀注 llama.cpp 的發展,所以有一些資訊落後。我才知道 llama.cpp 也有 API server,相容 OpenAI API。這令我感興趣,因為目前 AI 工具之間主流的串接方式之一就是 OpenAI API。 比如我之前看一份教學,學會使用 LM Studio API server (相容 OpenAI API) 與 qwen-code 串接,在本機執行自架的 AI coding agent,它可以幫我在本機上生成程式,作程式碼的新增、修改,而且免付費使用一些 AI coding 服務商的 API。 那 LM Studio 已經有 LLM API server 的功能,還有需要其它類似的工具嗎?還是有!因為多一種選擇,較有彈性。特別是我在用 LM Studio 作 AI coding 時,遇到一個寫檔…