文章

Python 效能之鬼!你應該學會使用的 deque !

程式的效能並不是天生具備,而是榨出來的,特別是對於 Python 這門程式語言而言,如果想要做到 High Performance 的話,有些魔鬼就藏在細節裡。

舉常見的 list 為例,你知道 list 在執行 pop(0)insert(0, value) 是效率較差的嗎?如果你的應用必須經常呼叫 pop(0)insert(0, value) 的話,建議你換個資料結構吧!使用 deque 將會帶來效率的提升!

本文將帶你認識 Python 的 deque 以及它在何種特定情況下能夠帶來效率的提升!

Posted on  Apr 1, 2024  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 4 min read

從 Python try except 的角度理解 Go 如何用 defer panic() recover() 處理例外/錯誤

學習 Go 的過程一定有人跟我一樣,對於 Go 用 defer(), panic(), recover() 處理例外/錯誤的方式感到困惑,特別是已經習慣使用 Java, JavaScript, Python 等程式語言的開發者來說, Java, JavaScript, Python 所提供的 try...catch , try-except 在可讀性相對友善很多之外,在開發時也直覺很多。

但要理解 Go 的 defer(), panic(), recover() 其實可以從已知的模式出發,如此原本無法輕易理解的事物,就會變成好理解許多。

本文將從 Python 的 try-except 出發,學習 Go 如何做到相同的例外(exception)處理。

Posted on  Mar 27, 2024  in  Go 程式設計 - 初階  by  Amo Chen  ‐ 5 min read

LangChain 怎麼玩?用 Hugging Face 結合 LangChain,做個英文對話機器人模擬面試吧

LangChain 作為 1 個框架,讓開發者可以很輕鬆地開發語言模型相關的應用,不過語言模型還是有其極限,有些功能仍須仰賴傳統的程式設計、機器學習等領域,譬如語音辨識、語音合成等等,所幸這些功能可以藉由 Hugging Face 等平台輕鬆實現。

本文將教導如何使用 Hugging Face 上的模型,並結合 LangChain 做出可以用英文對話的機器人,讓語言模型的應用跨出文字以外的領域!

Posted on  Mar 20, 2024  in  LangChain , Python 程式設計 - 高階  by  Amo Chen  ‐ 7 min read

LangChain 怎麼玩?如何做資料庫查詢機器人

作為軟體開發者,你開始發想任何語言模型可以應用的領域了嗎?

如果你沒有任何想法,也許可以先看看怎麼藉由語言模型,讓我們可以用對話方式,就能夠自動對資料庫執行 SQL 進行查詢,而且過程中完全不需要寫任何 SQL 喔!

也許看完本文,你會對語言模型的應用想像會有更清楚的畫面!

Posted on  Mar 14, 2024  in  LangChain , Python 程式設計 - 高階  by  Amo Chen  ‐ 5 min read

如何在終端機(terminal)漂亮地平行列印文字訊息(parallel output)?

在使用 multiprocessing, threading 等模組跑平行處理時,如果需要在每個執行單位(process, thread)列印一些字串的話,你會怎麼做?

我想大多數人都直接 print() 到 terminal 就好,但是輸出的文字太多太長時,通常都沒有太大助益,這時候最好將輸出寫到檔案,一旦有問題就可以從檔案中尋找問題。

但是,我們多數時候還是想知道執行單位最新的運作狀態,例如正在執行哪個步驟,這些輸出一直附加到 terminal 上的話,不免還是會讓 terminal 顯得難看⋯⋯。

因此,本文將介紹 1 種方法讓平行處理的輸出可以清掉舊的輸出(output),並覆蓋新的輸出(output)上去,如此一來不僅可以知道每個執行單位的最新狀況,還可以讓 terminal 顯得乾淨、優雅!

Posted on  Mar 13, 2024  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 2 min read

LangChain 怎麼玩?用 LangSmith 幫忙追查問題

LangChain 或其他語言模型框架的應用,先天上就相對不容易進行除錯,畢竟有太多步驟被包裝的相當好,一旦打開除錯模式(debug mode),就會有相當多的資訊輸出,即使是專家也很難馬上從眾多資訊中迅速定位問題。

如果能藉由較好的 UI 介面或工具,肯定可以減輕在除錯上的困難度。

LangChain 也知道這些痛點,因此將資訊的收集、彙整、呈現都整合到 LangSmith 之中,可以幫助我們更輕鬆地開發 LangChain 應用!

本文將帶各位簡略地認識與學習使用 LangSmith 。

Posted on  Mar 11, 2024  in  LangChain , Python 程式設計 - 高階  by  Amo Chen  ‐ 3 min read

LangChain 怎麼玩?用 Document Loaders / Text Splitter 處理多種類型的資料

有一些 LLM 應用有提供上傳檔案並為使用者產生摘要、查詢答案的功能,譬如 ChatGPT Plus 與 ChatGPT Enterprise 可以上傳 PDF, CSV 檔等,除了能產生摘要、擷取重點資料之外,還可以進行一些數據分析,相當強大。

要做到這些強大的功能之前,有個前置作業是我們需要知道怎麼載入不同類型的資料,以及怎麼處理這些資料,而這些處理程序在 LangChain 的框架下,也有相對應的函式庫可以使用,並不需要從零開始打造。

本文將教導如何使用 LangChain 處理多種類型的資料。

Posted on  Mar 7, 2024  in  LangChain , Python 程式設計 - 高階  by  Amo Chen  ‐ 6 min read

LangChain 怎麼玩?為了荷包著想,管好你的 prompt 長度(size)

每 1 個語言模型都有其限制,而所有語言模型都會有的限制就是 tokens 上限,而 tokens 上限會影響能夠接受的 prompt 長度。

如果你使用的不是開源語言模型,那不控制 prompt 長度所帶來的影響還有伴隨而來的費用。

以 OpenAI 所提供的語言模型 GPT-4 為例,每輸入 1 百萬個 tokens 就需要收費 $30 美元,如果你的應用沒有注意使用者所輸入 prompt 長度,那你很可能會為不必要的 tokens 付出代價。

所以學會如何控制 prompt 長度也是一門重要的課題!因為會幫助你避免踩到語言模型的限制之外,也可以幫助你控制費用支出。

Posted on  Mar 5, 2024  in  LangChain , Python 程式設計 - 高階  by  Amo Chen  ‐ 5 min read