做一個務實的RAG (Pragmatic RAG)

不要跟我五四三,回點有用的話來

Chunting Wu
9 min readAug 19, 2024

--

My girl

這篇文章是專門為了繁體中文的 RAG 寫的。

你有覺得聊天機器人一直在打高空嗎?
你有覺得聊天機器人總是瞎掰胡謅嗎?
你有覺得聊天機器人經常答非所問嗎?

如果你使用的 prompt 已經很精準了,卻還常有上述感受,那很有可能你實作的 RAG 出了根本上的問題。

要讓 RAG 務實有以下幾個重點:

  1. 必須是要懂繁體中文的 embedding
  2. 要有中文語意的分片器
  3. 一定要是用繁體中文訓練的 LLM
  4. 精準的 prompt 連同 system instruction
  5. 沒做 rerank 的效果都差到不行,但 rerank 要懂繁體中文

能夠做到上述五點,那麼你就可以得到一個穩重且有參考價值的 RAG。

核心概覽

以下我會提供一個使用 langchain 實作的繁體中文萬用套餐,最重要的是:本地運行,完全免費。

既免費又萬用的核心元素是下列:

  1. 懂中文的 embedding:BGE-M3
  2. 中文語意的分片器:RecursiveCharacterTextSplitter
  3. 繁體中文訓練的 LLM:TAIDE
  4. 懂繁體中文的 rerank:ms-marco-MultiBERT-L-12

上述都是免費的,搭配本地運行的框架:

  1. Ollama
  2. Langchain

就可以實作我們要的務實 RAG。

具體實踐

把 Ollama 裝好,有 Python 後就開始吧。

以下我會用一個 Confluence 的爬蟲做示範,但整個腳本可以套用在任何繁體中文的資料源。

# Langchain 的核心套件
pip install langchain langchain-community langchain-core langchain-huggingface
#…

--

--

Chunting Wu
Chunting Wu

Written by Chunting Wu

Architect at SHOPLINE. Experienced in system design, backend development, and data engineering.