OpenClaw Skills #1|RAG Architecture:讓 LLM 擁有長期記憶的關鍵架構

OpenClaw Skills #1|RAG Architecture:讓 LLM 擁有長期記憶的關鍵架構

一、開場破題

大型語言模型(LLM)天生有一個致命弱點:知識截止日期。GPT-4 的訓練資料截止於某個時間點,之後發生的事它一概不知。更麻煩的是,就算是截止日前的知識,模型也可能「記錯」或「幻覺」出不存在的資訊。
RAG(Retrieval-Augmented Generation,檢索增強生成) 正是為了解決這個問題而生。它讓 LLM 在回答問題之前,先從外部知識庫「查資料」,再根據查到的內容生成回答。這個設計讓 AI 系統能夠:
  • 存取即時、最新的資訊
  • 引用具體來源,降低幻覺率
  • 在不重新訓練模型的情況下更新知識
在企業 AI 應用中,RAG 已成為最主流的架構模式,從客服機器人到內部知識庫問答,幾乎無所不在。
---

二、概念精講

RAG 的核心流程分為兩個階段:索引階段(Indexing)查詢階段(Querying)

索引階段(離線預處理)


原始文件(PDF / 網頁 / 資料庫)
        ↓
    文件切割(Chunking)
        ↓
    向量嵌入(Embedding)
        ↓
    存入向量資料庫(Vector DB)

查詢階段(即時推論)


使用者提問(User Query)
        ↓
    問題向量化(Query Embedding)
        ↓
    相似度搜尋(Vector Search)
        ↓
    取回相關文件片段(Retrieve Chunks)
        ↓
    組合 Prompt(Augment)
        ↓
    LLM 生成回答(Generation)
        ↓
    回傳給使用者(Response)

關鍵元件說明

元件功能常見工具
Embedding Model將文字轉為向量text-embedding-3-small, BGE
Vector Database儲存並搜尋向量Pinecone, Chroma, Qdrant
Retriever執行相似度搜尋LangChain Retriever
LLM根據 context 生成回答GPT-4o, Claude 3.5
Chunker切割文件為適當片段RecursiveCharacterTextSplitter
---

三、實戰場景

場景一:企業內部知識庫問答

一家公司有上千份 PDF 規章制度,員工每天要花大量時間翻找。導入 RAG 後,員工直接用自然語言提問「請假超過三天需要哪些審核?」,系統自動從文件庫中找到相關條文並生成精確回答,附上原始文件來源連結。

場景二:即時新聞分析機器人

傳統 LLM 無法回答「今天台積電股價發生了什麼?」,但搭配 RAG 後,系統每小時爬取最新新聞存入向量庫,讓 LLM 能基於最新資料給出分析,準確率大幅提升。

場景三:程式碼文件助手

開發者將自家 SDK 文件(Markdown、API spec)整合進向量庫,打造專屬程式碼助手。與通用 LLM 相比,這類系統對私有 API 的回答準確率從 40% 提升到 85% 以上。
---

四、關鍵步驟

以 LangChain + OpenAI + Chroma 為例,快速建立一個基礎 RAG 系統:

Step 1:安裝依賴

bash
pip install langchain langchain-openai chromadb pypdf

Step 2:載入並切割文件

python
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

loader = PyPDFLoader("knowledge_base.pdf")
docs = loader.load()

splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50
)
chunks = splitter.split_documents(docs)

Step 3:建立向量索引

python
from langchain_openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma

embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectordb = Chroma.from_documents(chunks, embeddings)
retriever = vectordb.as_retriever(search_kwargs={"k": 4})

Step 4:建立 RAG Chain

python
from langchain_openai import ChatOpenAI
from langchain.chains import RetrievalQA

llm = ChatOpenAI(model="gpt-4o-mini")
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=retriever,
    return_source_documents=True
)

result = qa_chain.invoke({"query": "你的問題"})
print(result["result"])
---

五、常見誤區

誤區一:Chunk Size 設太大或太小

很多開發者直接用預設值,導致檢索結果雜訊過多(chunk 太大)或語意不完整(chunk 太小)。建議根據文件類型測試:技術文檔用 500–800 tokens,對話記錄用 200–300 tokens。

誤區二:忽略 Embedding 模型的語言適配

用英文 Embedding 模型處理中文文件,相似度搜尋效果大打折扣。中文場景建議使用多語言模型,如 text-embedding-3-large 或 BGE 系列。

誤區三:只做向量搜尋,忽略關鍵字搜尋

純向量搜尋對精確名詞(如「JoJoRadar」、「GPT-4o」)的召回率反而不如關鍵字搜尋。最佳實踐是 Hybrid Search:向量搜尋 + BM25 關鍵字搜尋,再用 RRF(Reciprocal Rank Fusion)合併結果。

誤區四:沒有做 Re-ranking

從向量庫取回 10 個片段後,直接全部塞給 LLM 會稀釋重要資訊。建議加入 Cross-Encoder Re-ranker(如 Cohere Rerank),先對候選片段做精排,只傳最相關的 3–4 個給 LLM。
---

六、延伸學習

掌握基礎 RAG 後,可進一步探索以下進階方向:
  • Advanced RAG:加入 Query Rewriting、HyDE(Hypothetical Document Embeddings)、Parent-Child Chunking 等技術提升召回率
  • Agentic RAG:讓 LLM 自主決定何時需要檢索、檢索什麼,與 Tool Use 結合
  • Multi-modal RAG:不只檢索文字,還能檢索圖片、表格(使用 ColPali 等模型)
  • GraphRAG:Microsoft 提出的以知識圖譜為基礎的 RAG 架構,適合複雜推理場景
  • Evaluation:使用 RAGAS 框架評估系統的 Faithfulness、Answer Relevancy、Context Recall 等指標
---
Reference