Qdrant
Qdrant 是用 Rust 寫的開源向量搜尋引擎,可 Docker 自架或使用 Qdrant Cloud。設計上把「向量 + payload(中繼資料)」當一等公民,過濾、hybrid search(dense + sparse)與量化是它常被選用的原因。
本頁講最小心智模型;影片與認證見 Qdrant 影音。
什麼時候選它
- 要開源自架,又需要複雜的 payload filter。
- 要同時做語意搜尋與關鍵字(BM25/sparse),再在伺服器端融合。
- 希望有官方課程與證照路徑。
本機五分鐘試作也可用 in-memory client,不必先開 Cloud。
核心物件
| 名稱 | 作用 |
|---|---|
| Collection | 指定向量維度與距離(如 Cosine)。 |
| Point | 一筆資料:id、向量、可選的 payload。 |
| Payload | JSON 式中繼資料,能建 payload index 加速過濾。 |
| Query | query_points 是目前主 API,可 prefetch、融合、rerank。 |
距離在建立 collection 時鎖定。文字 embedding 用 Distance.COSINE。
最小流程
from qdrant_client import QdrantClient, models
client = QdrantClient(":memory:") # 本機檔案可改 path="qdrant_data"
client.create_collection(
collection_name="docs",
vectors_config=models.VectorParams(size=384, distance=models.Distance.COSINE),
)
client.upsert(
collection_name="docs",
points=[
models.PointStruct(
id=1,
vector=[0.1, 0.2, 0.3], # 實務上改為 embedding 模型輸出
payload={"topic": "refund"},
),
],
)
hits = client.query_points(
collection_name="docs",
query=[0.1, 0.2, 0.3],
query_filter=models.Filter(
must=[models.FieldCondition(key="topic", match=models.MatchValue(value="refund"))]
),
limit=3,
)
Cloud 則改傳 url 與 api_key。官方五分鐘教學會用 sci-fi 書單做語意搜尋,見 Semantic Search 101。
Hybrid search 在做什麼
Dense 向量擅長同義詞,sparse(如 BM25)擅長精確詞(型號、錯誤代碼)。Qdrant 可對同一 collection 存兩種向量,查詢時 prefetch 兩邊再用 RRF(Reciprocal Rank Fusion)合併。這是 RAG 很常缺的一塊,官方工作坊有完整示範。
官方學習資源
官方認證課程
Qdrant Academy 的 Essentials 含影片、notebook 與期末專案,完成後可考 Qdrant Essentials Certification(train.qdrant.dev)。這是目前向量庫原廠證照裡最完整的一條。
官方 YouTube 與文件
頻道與工作坊影片見 Qdrant 影音。文字入門用 Semantic Search 101。