【從一台 Server 到分散式架構】第 23 篇:網站加入 AI 助手——LLM、RAG 與向量庫
有一天,產品經理小雯帶著一個新功能提案:
「我們要加一個 AI 學習助理。用戶看課的時候,如果有問題可以直接問 AI,AI 會根據課程內容回答。不只是通用的 ChatGPT,是真的懂我們課程的 AI。」
小明第一個反應是:「那我們直接接 OpenAI API,不就好了?」
小傑搖頭:「直接接 LLM,它只知道訓練資料裡的知識,不知道我們課程的內容。你問它『第三章的練習題怎麼解』,它要嘛亂猜,要嘛說不知道。」
「那怎麼讓它知道我們的課程內容?」
小傑:「這就是 RAG 要解決的問題。」
生活化的比喻:博學的新人 vs 有課程手冊的顧問
想像你請了一個很聰明的新顧問(LLM),他讀過世界上幾乎所有的書,知識很廣博。
但他不知道你公司的課程怎麼設計的、你的教學方法是什麼、你的第三章習題答案是什麼。
有兩個解法:
解法 A:讓他把所有課程手冊背起來(Fine-tuning)——成本高,每次課程更新都要重新訓練,費時費錢。
解法 B:給他一個隨身的搜尋工具,每次用戶問問題時,先去課程手冊裡找相關段落,再把這些段落和問題一起交給他,讓他根據「找到的資料」來回答(RAG)——即時、便宜、課程更新後馬上生效。
這就是 **RAG(Retrieval-Augmented Generation,檢索增強生成)**的核心概念。
LLM 是什麼,為什麼直接用不夠
**LLM(Large Language Model,大型語言模型)**是一種 AI 模型,透過大量文字訓練,能夠理解和生成自然語言。GPT-4、Claude、Gemini 都是 LLM。
LLM 的能力:
- 理解問題的語意
- 歸納、推理、解釋
- 根據提供的資訊生成文字
LLM 的限制:
- 訓練截止日期:不知道訓練資料截止後的事情
- 不知道私有資料:不知道你公司的課程內容、內部文件
- 有時會「幻覺」(hallucination):不確定時可能編造看起來合理的答案
所以,要讓 LLM 能夠根據你的課程內容回答問題,必須在每次呼叫時,把相關的課程內容「塞給它看」。
RAG 的流程:先查,再答
RAG 的完整流程分兩階段:
離線階段:建立知識索引
課程文字內容
→ 切成小段(Chunking)
→ 每段轉成向量(Embedding)
→ 存入向量資料庫
線上階段:收到問題時即時查詢
用戶問題
→ 把問題也轉成向量
→ 去向量資料庫找「最相似的幾段課程內容」
→ 把找到的內容 + 用戶問題一起組成 Prompt
→ 傳給 LLM 生成回答
→ 回傳給用戶
向量和向量資料庫:用「距離」找相似
「向量(Embedding)」可能是這篇最陌生的概念。讓小明解釋一下:
Embedding 是把一段文字轉換成一個高維度的數字陣列(例如 1536 個浮點數)。
神奇的是:語意相似的文字,轉出來的向量在空間裡距離很近。
舉例:
- 「Python 如何做迴圈」和「Python for loop 怎麼寫」→ 向量距離很近
- 「Python 如何做迴圈」和「如何做一道番茄炒蛋」→ 向量距離很遠
所以「找相似的課程內容」,就變成了「找向量空間裡距離最近的段落」,這個操作叫向量相似度搜尋。
向量資料庫(Pinecone、Qdrant、Weaviate)就是專門為這種「找最近的向量」操作優化的資料庫。
也可以直接用 PostgreSQL 的 pgvector 擴充,如果你不想引入新的資料庫系統。
不是每個問題都需要 RAG
RAG 解決的是「讓 LLM 能夠根據特定知識庫回答問題」的問題。
不是所有 AI 功能都需要 RAG:
| 功能 | 需要 RAG 嗎? |
|---|---|
| 通用問答(解釋什麼是遞迴) | 不需要,LLM 本身知道 |
| 根據特定課程內容回答 | 需要 |
| 程式碼解釋 | 通常不需要 |
| 根據學生作答給出批改意見 | 需要(要帶入評分標準) |
| 生成課程摘要 | 需要(要帶入課程原文) |
小明的落地版本
第一版:最小可行的 AI 助理
1. 用 LangChain 或 LlamaIndex 快速搭 RAG 管道
2. 課程文字內容先用 OpenAI Embedding 轉成向量
3. 向量存在 pgvector(已有 PostgreSQL,不引入新系統)
4. 用戶提問 → 找 Top-5 相關段落 → 組 Prompt → 呼叫 GPT-4o
暫不做的:
- Fine-tuning(成本高,課程更新麻煩)
- 自架 LLM(技術複雜度高,先用 API)
- 多輪對話記憶(第一版先做單輪)
小結與預告
這篇小明學到的重點是:
- LLM 不知道私有資料:直接接 API 只有通用知識,問課程內容會亂答。
- RAG 的核心思路:先查再答——找到相關段落,再讓 LLM 根據那些段落回答。
- Embedding 的直覺:把文字轉成向量,語意相似的文字向量距離近;向量資料庫就是「找最近的向量」的專用工具。
- 不是所有 AI 功能都需要 RAG:LLM 本身的知識能回答的問題,不需要多此一舉。
AI 助理上線了,用戶很喜歡。但用戶多了之後,一個新問題出現:LLM 的回應不像一般 API,它是「一個字一個字慢慢吐出來」的——如果等整段回答生成完才回傳,用戶要等很久;而且 LLM 的推理很耗 GPU,要怎麼擴展?
下一篇,我們來談 AI 系統的架構:串流回應、推理服務與擴展策略。