做一個務實的RAG (Pragmatic RAG)
不要跟我五四三,回點有用的話來
9 min readAug 19, 2024
這篇文章是專門為了繁體中文的 RAG 寫的。
你有覺得聊天機器人一直在打高空嗎?
你有覺得聊天機器人總是瞎掰胡謅嗎?
你有覺得聊天機器人經常答非所問嗎?
如果你使用的 prompt 已經很精準了,卻還常有上述感受,那很有可能你實作的 RAG 出了根本上的問題。
要讓 RAG 務實有以下幾個重點:
- 必須是要懂繁體中文的 embedding
- 要有中文語意的分片器
- 一定要是用繁體中文訓練的 LLM
- 精準的 prompt 連同 system instruction
- 沒做 rerank 的效果都差到不行,但 rerank 要懂繁體中文
能夠做到上述五點,那麼你就可以得到一個穩重且有參考價值的 RAG。
核心概覽
以下我會提供一個使用 langchain 實作的繁體中文萬用套餐,最重要的是:本地運行,完全免費。
既免費又萬用的核心元素是下列:
- 懂中文的 embedding:BGE-M3
- 中文語意的分片器:RecursiveCharacterTextSplitter
- 繁體中文訓練的 LLM:TAIDE
- 懂繁體中文的 rerank:ms-marco-MultiBERT-L-12
上述都是免費的,搭配本地運行的框架:
就可以實作我們要的務實 RAG。
具體實踐
把 Ollama 裝好,有 Python 後就開始吧。
以下我會用一個 Confluence 的爬蟲做示範,但整個腳本可以套用在任何繁體中文的資料源。
# Langchain 的核心套件
pip install langchain langchain-community langchain-core langchain-huggingface
#…