7步打造簡易RAG系統教學詳解

Ai




7個步驟教你由零打造簡易RAG系統

近年,大家幾乎都用過ChatGPT、Gemini或其他大型語言模型(LLM),佢哋令生活更方便,但有時都會答錯嘢。例如我曾經問過一個生成模型最新一次美國總統選舉嘅得主係邊個,結果佢竟然答返上一任總統,因為模型只係根據選舉之前嘅訓練數據作答。呢個時候「檢索增強生成」(Retrieval-Augmented Generation,簡稱RAG)就派上用場,幫助LLM提供更準確、更新嘅答案。RAG唔單止靠模型本身嘅知識,而係會從外部來源,例如PDF、文件或者API提取資料,再用呢啲內容去生成更具上下文嘅回應。今次教學會帶你一步步用7個簡單步驟,由零開始整一個基本嘅RAG系統。

認識檢索增強生成 (RAG) 嘅工作流程

RAG系統主要有兩部分:**檢索器(retriever)**同**生成器(generator)**。檢索器係負責喺你嘅知識庫入面搵最相關嘅文字片段;生成器就係語言模型,佢會將呢啲片段組合成自然、有用嘅答案。流程係:

1. 用戶提出問題。
2. 檢索器喺索引咗嘅文件或數據庫中搜尋最合適嘅內容。
3. 將搵到嘅內容作為上下文交畀LLM。
4. LLM根據呢啲內容生成回應。

接住我哋會拆解呢個流程,用7個步驟由頭做到尾。

步驟1:數據預處理

大型語言模型雖然已經學咗好多書本同網絡資料,但唔會知道你嘅私有或最新資訊,例如研究筆記、公司文件或項目資料。RAG就幫你將自己嘅數據餵畀模型,減少「幻覺」(hallucinations)問題,令回應更精準和最新。今次示範用兩個簡短嘅文本檔案,講解機器學習嘅概念:

– supervised_learning.txt:介紹監督式學習
– unsupervised_learning.txt:介紹非監督式學習

之後寫Python程式`load_data.py`用嚟讀取呢啲文件,再用`clean_data.py`清理文字,去除多餘空白同非ASCII字元。最後用`prepare_data.py`整合讀取同清理步驟,輸出乾淨嘅文本。

步驟2:將文本拆分成小段

因為LLM只能處理有限長度嘅文本(即上下文視窗有限),所以要將長文件拆成細小、有重疊嘅段落(一般300至500字)。用LangChain嘅`RecursiveCharacterTextSplitter`可以喺句子或段落等自然分隔點拆分,令每段內容有意義,方便模型快速找到相關資料。

步驟3:生成及儲存向量嵌入

電腦唔識文字,只識數字,所以要將文本轉成「向量嵌入」(vector embeddings),用數字表達文本嘅語義。可以用OpenAI、SentenceTransformers或者Hugging Face等工具。示範用SentenceTransformers嘅`all-MiniLM-L6-v2`模型生成嵌入。之後用FAISS(一個Facebook出品嘅向量搜索庫)將嵌入索引起嚟,方便快速相似度搜尋,同時將文本片段資料用pickle存檔,方便日後檢索。

步驟4:檢索相關資料

用戶提問時,先將問題轉成向量,再用FAISS喺嵌入庫中搵出最接近嘅文本片段。呢個過程叫做「相似度搜尋」。寫Python函數讀取FAISS索引同pickle嘅文本元數據,再根據問題找出最相關嘅3段文字。

步驟5:合併檢索回來嘅上下文

將搵到嘅多段相關文字合併成一個上下文區塊,然後連同用戶問題一齊餵畀語言模型,確保模型有足夠資料作答。

步驟6:用大型語言模型生成答案

將合併嘅上下文同問題組成提示(prompt),用Hugging Face嘅開源模型(示範用TinyLlama)生成答案。用transformers庫載入模型同tokenizer,將提示編碼後送入模型生成,最後解碼輸出最終答案。

步驟7:運行完整RAG流程

將以上所有步驟整合到一個`main.py`文件,從數據讀取、清理、拆分、生成嵌入、建立FAISS索引、檢索相關文本,到生成答案,一條龍自動執行。示範問題係:「非監督式機器學習會唔會包括回歸任務?」

總結

RAG架構成功填補咗LLM「自身知識」同「世界不斷變化嘅資訊」之間嘅差距。今次示範嘅係一個非常基礎嘅RAG流程,方便大家理解原理。企業級嘅RAG系統會加入更多複雜技術,例如安全防護、多模態檢索、串流數據處理同上下文優化等。如果想深入學習,可以參考作者推薦嘅多篇進階文章。

評論與啟發

今次教學清晰地拆解RAG系統嘅核心流程,並用Python代碼示範實作,非常適合初學者理解。RAG係目前解決LLM「知識時效性」問題嘅有效方案,尤其喺企業應用上能結合公司內部資料庫,避免模型「胡扯」。然而,基礎版本仍面臨幾個挑戰:

1. **上下文限制**:LLM嘅上下文視窗有限,過長嘅合併文本可能會被截斷,影響答案質素。未來可考慮動態上下文選擇或多輪對話策略。

2. **檢索精準度**:FAISS等向量庫基於語義相似度搜尋,但若語料質素不足或嵌入模型不夠強,可能檢索出不相關資料。加強檢索策略及重排名機制會提高準確度。

3. **安全與偏見**:引入外部資料同時帶來數據安全及偏見風險,企業部署時需做好數據治理及模型監控。

4. **可擴展性**:本文用本地FAISS示範,面對海量數據時要考慮分布式向量庫及高效索引。

總括而言,RAG係推動AI語言模型實用化嘅關鍵技術。對香港本地企業或開發者嚟講,掌握RAG技術不但可提升產品競爭力,亦能更好地結合本地化數據,創造更貼地嘅智能應用。未來可探索如何結合多語言處理、跨模態數據(如圖像、聲音)同實時數據更新,打造更全面嘅智慧助理系統。

以上文章由特價GPT API KEY所翻譯及撰寫。而圖片則由FLUX根據內容自動生成。

🎬 YouTube Premium 家庭 Plan成員一位 只需 HK$148/年

不用提供密碼、不用VPN、無需轉區
直接升級你的香港帳號 ➜ 即享 YouTube + YouTube Music 無廣告播放

立即升級 🔗

🎨 Nano Banana Pro 圖像生成器|打幾句說話就出圖

想畫人像、產品圖、插畫?SSFuture 圖像生成器支援 Flux Gemini Nano Banana Pro 改圖 / 合成, 打廣東話都得,仲可以沿用上一張圖繼續微調。

🆓 Flux 模型即玩,不用登入
🤖 登入後解鎖 Gemini 改圖
📷 支援上載參考圖再生成
⚡ 每天免費額度任你玩
✨ 即刻玩 AI 畫圖
Use the original face exactly as it is, without changing a details. A female model with sharp features, defined cheekbones, and intense, direct eye contact (though eyes are slightly in shadow from the hat).
• Aesthetic: Vintage fashion, Pin-up, 1950s/1960s style, high-glamour, summer resort wear.
• Lighting: Bright, harsh sunlight creating high contrast and crisp shadows. The light should perfectly illuminate the skin and the vibrant colors of the dress.
• Color Palette: Dominated by vibrant yellow, crisp white, and bold red, accented by deep black.
Specific Outfit & Details:
• Dress: A bright yellow halter-neck sundress with a classic white polka-dot pattern. It has a fitted, sweetheart neckline or bustier-style top that enhances the silhouette.
• Accessories:
• A very large, wide-brimmed sun hat in crisp white (or light straw/fabric) that casts a shadow over the upper face.
• A matching yellow polka-dot scarf tied closely around the neck (like an ascot or choker-style).
• Large, striking black statement earrings (circular, drop, or bead style).
• Bold red lipstick is a key feature, contrasting sharply with the yellow and white.
Technical/Camera Details:
• Shot: Close-up or medium-close-up portrait, focusing on the torso, neckline, face, and hat.
• Depth of Field: Shallow (low f-stop), with the model in sharp focus and the background slightly blurred (bokeh).
• Background: Out-of-focus, suggesting a bright outdoor location, with abstract shapes of boats/yachts (white and red accents visible) in a marina setting. [Subject]: Young Asian female with "Imada Mio-inspired" doll-like aesthetic (精緻洋娃娃臉). She has large round expressive eyes, a small V-line face, and rosy cheeks. Her expression is innocent, energetic, and slightly flirty. [Hair]: Messy morning hair (剛睡醒的凌亂感), long dark brown hair, slightly tousled, natural volume. [Outfit]: Wearing an oversized translucent white button-down shirt (男友風白襯衫), unbuttoned at the top to reveal collarbones, creating a "bottomless" look (下衣失蹤風格). [Style]: Japanese Gravure Photobook style (寫真集風格), Pure & Sexy vibe, bright high-key lighting, soft skin texture, Fujifilm PRO 400H color tone. [Subject]: Young Asian female with "Imada Mio-inspired" doll-like aesthetic (精緻洋娃娃臉). She has large round expressive eyes, a small V-line face, and rosy cheeks. Her expression is innocent, energetic, and slightly flirty. [Hair]: Messy morning hair (剛睡醒的凌亂感), long dark brown hair, slightly tousled, natural volume. [Outfit]: Wearing an oversized translucent white button-down shirt (男友風白襯衫), unbuttoned at the top to reveal collarbones, creating a "bottomless" look (下衣失蹤風格). [Style]: Japanese Gravure Photobook style (寫真集風格), Pure & Sexy vibe, bright high-key lighting, soft skin texture, Fujifilm PRO 400H color tone.