Embedding 同向量資料庫入門:RAG 嘅地基點打
咩係 embedding、點揀向量資料庫、用 50 行代碼起一個自己嘅知識庫搜索
AI 教學AI 生成
重點整理
- Embedding 係咩:將文字變成向量,意思近嘅字句喺數學上就近——語義搜索嘅基礎
- 點解 RAG 離唔開佢:LLM 唔識你嘅私人資料,先 embed 再撈最相關幾段落 prompt
- 點揀工具:Chroma(零配置入門)、Qdrant(性能)、pgvector(已有 Postgres 就唔使加野)
- 實戰:用 Python + Chroma 由零起一個本地知識庫,50 行代碼做到「問一句、搵返最相關段落」
Embedding 係咩?
Embedding 就係將一段文字變成一條數字向量(例如 768 個浮點數)。神奇嘅位係:意思相近嘅文字,向量喺空間入面就相近——「點樣退貨」同「退款流程」字面完全唔同,但 embedding 距離會好近。呢個就係語義搜索嘅基礎。
同 RAG 嘅關係
RAG(Retrieval-Augmented Generation)流程:
- 將你嘅文件切開一段段(chunk),逐段計 embedding 入庫
- 用家發問時,將條問題都 embed,搵出最相近嘅幾段
- 將呢幾段塞入 prompt,畀 LLM 生成答案
冇咗 embedding,LLM 就只可以靠死記——你嘅公司文件、筆記佢一概唔識。
向量資料庫點揀?
| 工具 | 適合場景 |
|---|---|
| Chroma | 零配置、純本地,入門首選 |
| Qdrant | 效能好、Rust 寫,正式項目用 |
| pgvector | 已經用緊 Postgres 就唔使另開新服務 |
| FAISS | Meta 出品,純 library,研究向 |
50 行起一個本地知識庫
import chromadb
from chromadb.utils import embedding_functions
ef = embedding_functions.DefaultEmbeddingFunction()
client = chromadb.Client()
col = client.get_or_create_collection("notes", embedding_function=ef)
docs = [
"公司年假係每年 14 日,按服務年資遞增。",
"退貨要在 7 日內申請,保留收據。",
"Wi-Fi 密碼每月 1 號更新,搵 IT 攞。",
]
col.add(documents=docs, ids=[f"d{i}" for i in range(len(docs))])
res = col.query(query_texts=["請多幾日假可以嗎?"], n_results=1)
print(res["documents"][0][0])
# → 公司年假係每年 14 日……
問嘅係「請多幾日假」,搵返嚟係「年假」嗰段——字面冇一個字重疊都搵到,呢個就係 embedding 嘅威力。
實用 tips
- Chunk 唔好太長:300–500 字一段最穩,太長會沖淡語義
- 中文 embedding 揀啱模型:預設模型對中文一般,可換
BAAI/bge-m3之類多語模型 - Metadata 幫手篩:入庫時記低來源/日期,查嘅時候可以先篩再搜
總結
Embedding + 向量資料庫係 RAG 嘅地基。識行呢 50 行,你就已經有一個「明你講咩」嘅私人搜索器——下一步先係接 LLM 生成答案。
