Weaviate
Weaviate 是開源向量資料庫,特色是內建 vectorizer:匯入原文時由資料庫(或連上的模型服務)產生向量,查詢可用 near_text 直接丟句子,不必在應用層先呼叫 embedding API。也可完全自備向量。
本機可用 Docker 或 Embedded;正式環境可用 Weaviate Cloud。影片見 Weaviate 影音。
什麼時候選它
- 希望「匯入文字就能搜」,少寫一層 embedding 程式。
- 同一套 API 要做語意搜尋、hybrid search 與 RAG(generative search)。
- 需要 GraphQL 或官方 Python/TS/Go/Java client。
若你已經有穩定的 embedding pipeline、只缺儲存與 ANN,Qdrant 或 pgvector 也可能更單純。
核心物件
| 名稱 | 作用 |
|---|---|
| Collection | 一類物件(舊文件稱 class)。設定 vectorizer 與生成模型。 |
| Object | 屬性(properties)+ 向量。向量可自動產生。 |
| near_text / near_vector | 語意搜尋。前者由 Weaviate 幫你嵌入查詢字串。 |
| Hybrid | 向量 + 關鍵字(BM25)混合。 |
| Generative | 把命中物件送到 LLM,也就是內建 RAG。 |
最小流程(Embedded)
Embedded 會在 Python 行程裡起一個 Weaviate,資料存在本機,重開程式還在。適合跟官方一分鐘影片對照。
import os
import weaviate
from weaviate.classes.config import Configure, Property, DataType
client = weaviate.connect_to_embedded(
headers={"X-OpenAI-Api-Key": os.environ["OPENAI_API_KEY"]},
)
collection = client.collections.create(
name="Doc",
vector_config=Configure.Vectors.text2vec_openai(),
properties=[Property(name="text", data_type=DataType.TEXT)],
)
collection.data.insert({"text": "退貨請於七日內提出申請。"})
hits = collection.query.near_text(query="怎麼寄回商品", limit=2)
for obj in hits.objects:
print(obj.properties["text"])
client.close()
Cloud 改用 connect_to_weaviate_cloud(cluster_url=..., auth_credentials=...)。不想依賴 OpenAI 時,本機 Docker quickstart 可搭配 Ollama 的 text2vec-ollama。逐步指令見 Cloud Quickstart 與 Local Quickstart。
官方學習資源
官方 YouTube
Weaviate vector database 頻道 有 Embedded 一分鐘示範、meetup 入門與會議演講。內嵌見 Weaviate 影音。
官方課程/證照
Weaviate Academy 是原廠學習路徑(Academy 頁面註明認證核發仍在建置)。另有 LinkedIn Learning 的 Vector Databases Professional Certificate by Weaviate,由 Weaviate 背書。