使用生成式 AI 結合 RAG 技術實作屬於自己的 LLM 知識庫 - 前言及流程規劃

# 使用生成式 AI 結合 RAG 技術實做屬於自己的 LLM 知識庫系列文章

前言

就在我停下追求技術腳步的跑去學界進修的這兩年,資訊領域發生了爆炸性的變化,生成式 AI(Generative AI)的技術在這段時間快速的成長,至今已有多家算是蠻成熟的 AI 公司,並發展了許多 AI 相關的服務,其中最著名的應用就是 ChatGPT,當然這些大型語言模型(Large Language Model, LLM)服務或多模態模型(Large Multimodal Models, LMM)服務提供商,也釋出了許多 API 給我們這些沒辦法自行架設環境的開發者,能透過他們提供的服務,讓我們自己的服務也跟上這一波 AI 的熱潮。

在這段時間,我一直很想抽空玩玩,但苦於時間真的是不太夠(真希望一天能有 48 小時 XD)。如今我進修的課程也到了尾聲,也差補不多是時候回來惡補我的 "技能債" 了。

關於如何自行架設 Gen AI 服務,或是串接各大廠商所提供 API,網路上已經有很多相關的文章,我敬仰的 Ian 大前輩,也在鐵人競賽寫了一系列關於 如何在 NET 中使用 GenAI 技術 文章,而自己在這領域也沒有玩太久,不敢在各位大神面前班門弄斧,所以本來沒有想要寫這系列的文章的,但回想當初寫這個部落格的目的,就是為了留下對於程式熱愛的記憶,因此我才決定寫下這一系列的記錄。


AI 知識庫架構規劃

同標題,這系列的文章主要是以實作為主,對於某些專有名詞我只會簡單的說明,並不會太深入的解釋,若想了解更多專業術語可自行搜尋相關論文或者網路上也有很多寫的很清楚的介紹,大家可自行去搜尋。

而本次的目標,主要是希望能使用最低成本來實做出屬於自己的 LLM 知識庫,為了達成此目標,原則上要自行架設地端環境是比較有機會達成,但..... 現實是殘酷的。回到前言提到的, GPU 很貴的,大多不認同資訊能帶給企業更高價值或效益的公司(我絕對沒有再說哪間公司🤫)實在是沒辦法弄出一台可以在本地端跑 LLM 的環境,況且在這個效率至上的年代,使用者大多不能接受回應的速度要超過 3 秒以上的應用程式。

既然不能全部自建環境,因此使用混合模式也是一個可以討論的架構,在這邊我是選用 Goolgle 的 Gemini 當作生成模型(目前是免費的),另外搭配地端自行建置 Ollama 服務來當作詞嵌入模型。初步的規劃流程如下:

  1. 在第一次使用時,須先透過 Ollama 服務(預先安裝好詞嵌入模型,這個將會在第二篇文章內說明),將我們的知識庫批次轉成向量後轉入向量資料庫(下圖咖啡色步驟 1, 2)。
  2. 使用者透過知識管理機器人提出問題(藍色步驟 1)。
  3. KM 機器人會將此問題轉到先前已建立好的知識向量資料庫,進行相似度比對(藍色步驟 2)。
  4. 根據設定的參數,並進行相似度比對計算後,會回傳符合結果的候選知識庫項目清單(藍色步驟 3)。
  5. KM 機器人再次接手,並結合自定義 Prompt 後,將經過處理的問題轉發送給 Gemini AI(藍色步驟 4)。
  6. Gemini AI 將會參考我們的知識庫內容來決定生成的文字內容,並回覆給 KM 機器人(藍色步驟 5)。
  7. KM 機器人將寫 Gen AI 的結果回傳給使用者(藍色步驟 5)。
  8. 若後續有新的知識數據產生時,我們可以重新執行步驟 1 的動作,將新的知識文件,轉入向量資料庫中。

規劃架構圖


礙於篇幅的關係,本系列規劃用底下幾篇文章來說明。

  • 前言及流程規劃。
  • 建置本地端 Ollama 服務及 LLM 知識庫所需開發環境說明。
  • 蝦咪系 Word embeddings?詞嵌入模型概念及實作。
  • Hello Gemini,串接第一個 Gemini 生成式 AI。
  • 做個有記憶力的 AI 機器人,實作對話記憶。
  • 來跟 AI 玩玩角色扮演吧,提示工程(Prompt engineering)實作。
  • 解決 AI 幻覺,讓 RAG 幫你吧。
  • AI 也能認識你是誰喔,實作自定義 Function。
  • 來吧,開始建立基於生成式 AI 的 KM 系統了。
  • 番外篇 - 我想換個生成模型呢。


留言