iT邦幫忙

2025 iThome 鐵人賽

DAY 3
1
AI & Data

RAG × Agent:從知識檢索到智慧應用的30天挑戰系列 第 3

Day 3|Indexing pipeline:如何為 RAG 建立知識庫

  • 分享至 

  • xImage
  •  

昨天看到 RAG 架構,今天要更深入,看看如何建立知識庫。

我們先看這張圖來逐一拆解他的步驟:
https://python.langchain.com/docs/tutorials/rag/
來源:Build a Retrieval Augmented Generation (RAG) App: Part 1

這邊我們可以稱之為 Indexing pipeline
他的流程是這樣:

  1. 資料載入(Loading)
    其實這邊可以再細分成四個步驟:
    連接資料來源 -> 擷取文字內容 -> 審查及補上必要的 metadata ->清理或轉換資料
    因為資料的來源可能有很多,光是檔案類型就有pdf、doc...說不清的類型了,所以也務必記下自己所使用的資料來源及檔案類型,選取好資料後,我們必須要擷取到自己需要的資料,之後加上檔案來源、作者、日期、標籤等資訊,方便後續檢索,最後再將不必要文字訊息進行清理與轉換,就跟我們學習一樣我們不能只是一昧地把書本內容往腦袋裡塞,而是需要消化過後標記好重要的部分。

  2. 文本切分(Chunking)
    再來我們要將過長的文字進行拆分,就像是你跑去問 chatGPT 一樣,他會有文字數量限制,他能夠處理的內容有限。
    詳細的來說,這邊可以歸咎到幾點問題:
    第一, LLM 技術的限制,導致他不能吸收這麼大量的文字,你丟給他多又雜的資訊他也很難消化。
    第二, LLM 在你給他一大段文字過後,他其實只會注重前後文,中間段落他會是模糊的。
    所以這個步驟,我們會把長篇文字拆成有意義的小單位(如句子或段落),逐步合併成特定大小的區塊,最後再將這些區塊逐步連接保持語意的通順
    想像你在整理一本厚厚的教科書,不可能一次全塞給模型讀,所以要先把它切成章節或段落,再把段落拼成適合大小的筆記,最後還要留一點重疊,像書籤一樣,讓上下文能接得上。
    如果還要再細部說明其實他還有很多種拆分方式最常見的方式是 Split by character 和 Recursively split by character,可以是使用特殊字元像是 \n 作為斷點切割這些文字,簡單來說就是用字元或斷行符號來切割文字,這個我們日後可以再繼續探討。

  3. 轉換向量(Embeddings)
    我們先前也提到過了,電腦是學不懂這些文字的,所以我們要文字轉為向量,也就是所謂的 embeddings,其實就是把這些文字轉成 n 維矩陣,當我們的矩陣越大,就可以越精準的表示這個詞的意義,但需要花費的計算成本也比較高。

  4. 向量儲存(Vector DB)
    最後,將向量存進 向量資料庫(Vector Database),例如 FAISS、Chroma、Pinecone、Weaviate 等。
    資料庫會支援 相似度搜尋(cosine similarity、dot product、L2 distance)。也能透過 metadata 過濾,例如「只搜尋 2023 年之後的文件」。這讓我們可以快速找到與查詢最相關的 chunks,成為 RAG 的基礎。

今天跟往常一樣,先讓大家有個基本的概念,明天會再細部補充 pipeline 的內容!!


上一篇
Day 2|RAG 的基本架構
下一篇
Day 4|Embedding 是什麼?——如何把文字變成數字空間
系列文
RAG × Agent:從知識檢索到智慧應用的30天挑戰5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言