
譯者 | 李睿
審校 | 重樓
Weaviate是一款開源向量數據庫,專為處理高維非結構化數據(文本、圖像、視頻)設計,通過向量嵌入實現語義搜索,替代傳統關鍵字匹配。其核心優勢包括人工智能原生架構、分布式擴展、基于圖形的模型及混合搜索能力。本文將通過代碼示例和實際應用,探討Weaviate成為游戲規則改變者的原因。
人們獲取與關聯信息的方式正在經歷根本性的轉變。在傳統搜索模式中,用戶需要拆分關鍵詞進行檢索,例如輸入“舒適”(cozy)和“角落”(nook),而現代語義搜索技術可以直接輸入“舒適的閱讀角落”(cozy reading nooks)將會呈現出“壁爐旁軟椅”等符合語義關聯的視覺化內容。這種基于語義理解的搜索范式,標志著信息檢索從機械式關鍵詞匹配向自然語言理解的跨越。這一轉變至關重要,因為在人工智能時代,圖像、文本、視頻等非結構化數據呈現指數級增長,傳統數據庫已經難以滿足人工智能時代的需求。
這正是Weaviate發揮重要作用的地方,并使其成為向量數據庫領域的領導者。憑借其獨特的功能和性能,Weaviate正在改變企業使用基于人工智能的見解和數據的方式。本文將通過代碼示例和實際應用,探討Weaviate為何能成為游戲規則的改變者。

Weaviate是什么?
Weaviate是一款開源向量數據庫,專門用于存儲和處理以向量表示的高維數據,例如文本、圖像或視頻等。Weaviate允許企業進行語義搜索,創建推薦引擎,并輕松構建人工智能模型。
Weaviate專注于智能數據檢索,而不是依賴于基于每行存儲的列檢索精確數據的傳統數據庫。它使用基于機器學習的向量嵌入來根據語義找到數據點之間的關系,而不是搜索精確的數據匹配。
Weaviate提供了一種簡單的方法來構建運行人工智能模型的應用程序,這些模型需要快速有效地處理大量數據來構建模型。在Weaviate中存儲和檢索向量嵌入使其成為涉及非結構化數據的企業的理想選擇。
Weaviate的核心原理和架構

Weaviate的核心是建立在處理高維數據和利用高效和可擴展的向量搜索的原則之上。以下是其架構的設計原則與核心模塊:
- 人工智能原生和模塊化:Weaviate從設計之初就將機器學習模型集成到架構中,為其開箱即用地生成不同數據類型的嵌入(向量)提供支持。模塊化設計允許用戶擴展功能、集成自定義特性或調用外部系統。
- 分布式系統:數據庫被設計成能夠橫向擴展。Weaviate采用無領導者架構,這意味著沒有單點故障。通過多節點數據復制實現高可用性,即使節點故障也能保障數據安全。最終一致性使其適用于云原生及其他環境。
- 基于圖形:Weaviate是一種基于圖形的數據模型。對象(向量)通過它們的關系連接起來,使得具有復雜關系的數據易于存儲和查詢,這在推薦系統等應用程序中非常重要。
- 向量存儲:Weaviate旨在將數據存儲為向量(對象的數值表示)。這非常適合支持人工智能的搜索、推薦引擎和所有其他人工智能/機器學習相關用例。
Weaviate快速入門:實踐指南
無論是在構建語義搜索引擎、聊天機器人還是推薦系統,這都無關緊要。Weaviate快速入門指南將演示如何連接到Weaviate,攝取向量化內容,并提供智能搜索功能,最終通過使用OpenAI模型的檢索增強生成(RAG)生成上下文感知的答案。
前提條件
確保安裝了最新版本的Python。如果沒有安裝,可以使用如下命令安裝:
sudo apt update
sudo apt install python3 python3-pip –y創建并激活虛擬環境:
python3 -m venv weaviate-env
Source weaviate-env/bin/activate使用上述代碼,shell提示符現在將顯示虛擬環境名稱(例如weaviate-env),表明環境已經激活。
步驟1:部署Weaviate
部署Weaviate有兩種方法:
選項1:使用Weaviate云服務
部署Weaviate的一種方法是使用其云服務:
- 首先,登錄https://console.weaviate.cloud/。
- 然后,注冊并通過選擇OpenAI模塊創建集群。
還要注意WEAVIATE_URL(類似于https://xyz.weaviate.network)以及WEVIATE_API_KEY。
選項2:使用Docker Compose在本地運行
創建docker- composer .yml:
version: '3.4'
services:
weaviate:
image: semitechnologies/weaviate:latest
ports:
- "8080:8080"
environment:
QUERY_DEFAULTS_LIMIT: 25
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
PERSISTENCE_DATA_PATH: './data'
DEFAULT_VECTORIZER_MODULE: 'text2vec-openai'
ENABLE_MODULES: 'text2vec-openai,generative-openai'
OPENAI_APIKEY: 'your-openai-key-here'配置Weaviate容器與OpenAI模塊和匿名訪問。
使用以下命令啟動它:
docker-compose up -d這將以分離模式啟動Weaviate服務器(在后臺運行)。
步驟2:安裝Python依賴項
要安裝程序所需的所有依賴項,需要在操作系統的命令行中運行以下命令:
pip install weaviate-client openai這將安裝Weaviate Python客戶機和OpenAI庫。
步驟3:設置環境變量
export WEAVIATE_URL="https://<your-instance>.weaviate.network"
export WEAVIATE_API_KEY="<your-weaviate-key>"
export OPENAI_API_KEY="<your-openai-key>"對于本地部署,不需要WEAVIATE_API_KEY(無需驗證)。
步驟4:連接到Weaviate
import os
import weaviate
from weaviate.classes.init import Auth
client = weaviate.connect_to_weaviate_cloud(
cluster_url=os.getenv("WEAVIATE_URL"),
auth_credentials=Auth.api_key(os.getenv("WEAVIATE_API_KEY")),
headers={"X-OpenAI-Api-Key": os.getenv("OPENAI_API_KEY")}
)
assert client.is_ready(), " Weaviate not ready"
print(" Connected to Weaviate")前面的代碼使用憑據連接Weaviate云實例,并確認服務器已經啟動并可訪問。
對于本地實例,使用:
client = weaviate.Client("http://localhost:8080")這將連接到本地Weaviate實例。
步驟5:使用嵌入和生成支持定義模式
schema = {
"classes": [
{
"class": "Question",
"description": "QA dataset",
"properties": [
{"name": "question", "dataType": ["text"]},
{"name": "answer", "dataType": ["text"]},
{"name": "category", "dataType": ["string"]}
],
"vectorizer": "text2vec-openai",
"generative": {"module": "generative-openai"}
}
]
}定義了一個名為Question的模式,其中包含屬性和基于openai的向量和生成模塊。
client.schema.delete_all() # Clear previous schema (if any)
client.schema.create(schema)
print(" Schema defined")輸出:

上述語句將模式上傳到Weaviate并確認成功。
步驟6:批量插入樣例數據
data = [
{"question":"Only mammal in Proboscidea order?","answer":"Elephant","category":"ANIMALS"},
{"question":"Organ that stores glycogen?","answer":"Liver","category":"SCIENCE"}
]創建一個小型QA數據集:
with client.batch as batch:
batch.batch_size = 20
for obj in data:
batch.add_data_object(obj, "Question")以批處理方式插入數據以提高效率:
print(f"Indexed {len(data)} items")輸出:

確認已經索引的項目數量。
步驟7:使用nearText進行語義搜索
res = (
client.query.get("Question", ["question", "answer", "_additional {certainty}"])
.with_near_text({"concepts": ["largest elephant"], "certainty": 0.7})
.with_limit(2)
.do()
)使用文本向量對“largest elephant”等概念進行語義搜索。僅返回確定性≥0.7且最多2個結果的結果。
print(" Semantic search results:")
for item in res["data"]["Get"]["Question"]:
q, a, c = item["question"], item["answer"], item["_additional"]["certainty"]
print(f"- Q: {q} → A: {a} (certainty {c:.2f})")輸出:

顯示具有確定性分數的結果。
步驟8:檢索-增強生成(RAG)
rag = (
client.query.get("Question", ["question", "answer"])
.with_near_text({"concepts": ["animal that weighs a ton"]})
.with_limit(1)
.with_generate(single_result=True)
.do()
)語義搜索,并要求Weaviate使用OpenAI(通過generate)生成響應。
generated = rag["data"]["Get"]["Question"][0]["generate"]["singleResult"]
print(" RAG answer:", generated)輸出:

根據Weaviate數據庫中最接近的匹配項打印生成的答案。
Weaviate的主要特性

Weaviate有許多獨特的功能,使它在大多數基于向量的數據管理任務中具有靈活和強大的優勢。
- 向量搜索:Weaviate可以將數據作為向量嵌入進行存儲和查詢,從而進行語義搜索;它提高了準確性,因為基于意義而不是簡單地匹配關鍵字來找到相似的數據點。
- 混合搜索:通過將向量搜索和傳統的基于關鍵字的搜索結合起來,Weaviate提供了更相關和上下文相關的結果,同時為各種用例提供了更大的靈活性。
- 可擴展的基礎設施:Weaviate能夠使用單節點和分布式部署模型進行操作;它可以橫向擴展以支持非常大的數據集,并確保性能不受影響。
- 人工智能原生架構:Weaviate旨在與機器學習模型一起工作,支持直接生成嵌入,而無需通過額外的平臺或外部工具。
- 開源:作為開源軟件,Weaviate允許一定程度的定制、集成,甚至允許用戶在其持續發展中做出貢獻。
- 可擴展性:Weaviate通過模塊和插件支持可擴展性,使用戶能夠從各種機器學習模型和外部數據源集成。
Weaviate vs 競爭對手
下表強調了Weaviate和在向量數據庫領域的一些競爭對手之間的主要區別。
特性 | Weaviate | |||
開源 | 是 | 否 | 是 | 是 |
混合搜索 | 是(向量+關鍵詞) | 否 | 是(向量+關鍵詞) | 是(向量+關鍵詞) |
分布式架構 | 是 | 是 | 是 | 是 |
內置AI模型支持 | 是 | 否 | 否 | 否 |
云原生集成 | 是 | 是 | 是 | 是 |
數據復制 | 是 | 否 | 是 | 是 |
如上表所示,Weaviate是唯一提供混合搜索的向量數據庫,它既可以進行向量搜索,也可以進行基于關鍵字的搜索。因此,有更多的搜索選項可用。Weaviate是開源的,不像Pinecone是閉源的。Weaviate的開源優勢和透明庫提供了有益于用戶的定制選項。
特別是,Weaviate將機器學習集成到數據庫中,使其解決方案與競爭對手的解決方案截然不同。
結論
Weaviate是一款處于行業前沿的基于向量的數據庫,具有革命性的人工智能原生的架構,旨在處理高維數據,同時還結合了機器學習模型。Weaviate的混合數據和搜索功能及其開源特性為每個可想象的行業中的人工智能應用程序提供了強大的解決方案。Weaviate的可擴展性和高性能使其成為非結構化數據的領先解決方案。從推薦引擎和聊天機器人到語義搜索引擎,Weaviate充分發揮其先進功能的潛力,幫助開發人員增強他們的人工智能應用程序。隨著人工智能解決方案需求的增長;Weaviate在向量數據庫領域的重要性將變得越來越重要,并將通過其處理復雜數據集的能力從根本上影響該領域的未來。
常見問題
Q1:Weaviate是什么?
答:Weaviate是一款開源向量數據庫,專為高維數據(如文本、圖像或視頻)而設計,用于實現語義搜索和人工智能驅動的應用程序。
Q2:Weaviate與傳統數據庫有何不同?
答:與檢索精確數據的傳統數據庫不同,Weaviate使用基于機器學習的向量嵌入來檢索結構化數據,并根據含義和關聯進行檢索。
Q3:Weaviate中的混合搜索是什么?
答:Weaviate中的混合搜索結合了向量搜索和基于關鍵字的傳統搜索的概念,為更多樣化的用例提供相關和上下文相關的結果。
原文標題:Building a Semantic Search Engine using Weaviate,作者:Janvi Kumari
























