理解RAG在幹嘛
photo by Reed Mok LLM有時會產生看似合理、但其實不正確的回答,這種不懂裝懂的答案會讓使用者得到錯誤的資訊,還毫不自覺。 這種情況常發生在模型缺乏最新的資訊,像是詢問公司內部的東西,如果是沒有公開的事情,LLM根本不會知道,但是他仍然會亂回答一通。 RAG (Retrieval-Augmented Generation)就是為了解決這類問題而誕生的技術。它的核心概念是: 在LLM回答問題之前,先從指定的資料庫中看一次有沒有相關的文件能參考,讓模型根據可參考內容產生回答。 我自己最近也開始學習RAG,並且實作了一個小專案:MediVector-Chat。 會想做這個專案,其實跟我自己的經驗有關。之前我有腳痛的問題,在查資料或問GPT的時候,我會希望能夠參考更多相關資料,例如衛教資訊或最新論文,再根據這些內容回答我的問題。 這也是我覺得RAG很有價值的地方。一般聊天型LLM雖然很方便,但很多時候它其實只是根據訓練資料去生成看起來合理的文字。如果問題涉及特定領域知識、內部文件或最新資訊,模型未必真的知道答案。 所以我想做一個能夠「先查資料,再回答問題」的AI chatbot。 RAG的流程 文件準備:收集文件、網頁、FAQ、內部知識庫等資料。 切分資料:將長文件切成較小的 chunk,方便後續檢索。 建立索引:使用 embedding model 將 chunk 轉成向量,存入 vector database。 查詢檢索:使用者提問後,系統將問題轉成向量,找出最相關的資料片段。 生成回答:把檢索到的資料片段放進 prompt,讓 LLM 根據參考內容回答。 簡單來說,流程大概像這樣: 文件 / PDF → Chunking → Embedding → 存入 Weaviate → 使用者提問 → Vector Search → Top-K Retrieval → Prompt 組合 → LLM 回答 → 顯示來源段落 在我自己的 MediVector-Chat 專案中,也有實際把這些流程做出來。目前有做到: 文件 chunking embedding vector search Top-K retrieval prompt 組合 顯示來源段落 前後端分離 Docker 啟動本機環境 使用技術主要是: ...