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)流程:

  1. 將你嘅文件切開一段段(chunk),逐段計 embedding 入庫
  2. 用家發問時,將條問題都 embed,搵出最相近嘅幾段
  3. 將呢幾段塞入 prompt,畀 LLM 生成答案

冇咗 embedding,LLM 就只可以靠死記——你嘅公司文件、筆記佢一概唔識。

向量資料庫點揀?

工具適合場景
Chroma零配置、純本地,入門首選
Qdrant效能好、Rust 寫,正式項目用
pgvector已經用緊 Postgres 就唔使另開新服務
FAISSMeta 出品,純 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 生成答案。

分享畀朋友

相關文章

更多「AI 教學」

睇全部分類 →