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

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

Weaviate的核心是建立在處理高維數(shù)據(jù)和利用高效和可擴展的向量搜索的原則之上。以下是其架構(gòu)的設(shè)計原則與核心模塊:
- 人工智能原生和模塊化:Weaviate從設(shè)計之初就將機器學(xué)習(xí)模型集成到架構(gòu)中,為其開箱即用地生成不同數(shù)據(jù)類型的嵌入(向量)提供支持。模塊化設(shè)計允許用戶擴展功能、集成自定義特性或調(diào)用外部系統(tǒng)。
- 分布式系統(tǒng):數(shù)據(jù)庫被設(shè)計成能夠橫向擴展。Weaviate采用無領(lǐng)導(dǎo)者架構(gòu),這意味著沒有單點故障。通過多節(jié)點數(shù)據(jù)復(fù)制實現(xiàn)高可用性,即使節(jié)點故障也能保障數(shù)據(jù)安全。最終一致性使其適用于云原生及其他環(huán)境。
- 基于圖形:Weaviate是一種基于圖形的數(shù)據(jù)模型。對象(向量)通過它們的關(guān)系連接起來,使得具有復(fù)雜關(guān)系的數(shù)據(jù)易于存儲和查詢,這在推薦系統(tǒng)等應(yīng)用程序中非常重要。
- 向量存儲:Weaviate旨在將數(shù)據(jù)存儲為向量(對象的數(shù)值表示)。這非常適合支持人工智能的搜索、推薦引擎和所有其他人工智能/機器學(xué)習(xí)相關(guān)用例。
Weaviate快速入門:實踐指南
無論是在構(gòu)建語義搜索引擎、聊天機器人還是推薦系統(tǒng),這都無關(guān)緊要。Weaviate快速入門指南將演示如何連接到Weaviate,攝取向量化內(nèi)容,并提供智能搜索功能,最終通過使用OpenAI模型的檢索增強生成(RAG)生成上下文感知的答案。
前提條件
確保安裝了最新版本的Python。如果沒有安裝,可以使用如下命令安裝:
sudo apt update
sudo apt install python3 python3-pip –y創(chuàng)建并激活虛擬環(huán)境:
python3 -m venv weaviate-env
Source weaviate-env/bin/activate使用上述代碼,shell提示符現(xiàn)在將顯示虛擬環(huán)境名稱(例如weaviate-env),表明環(huán)境已經(jīng)激活。
步驟1:部署Weaviate
部署Weaviate有兩種方法:
選項1:使用Weaviate云服務(wù)
部署Weaviate的一種方法是使用其云服務(wù):
- 首先,登錄https://console.weaviate.cloud/。
- 然后,注冊并通過選擇OpenAI模塊創(chuàng)建集群。
還要注意WEAVIATE_URL(類似于https://xyz.weaviate.network)以及WEVIATE_API_KEY。
選項2:使用Docker Compose在本地運行
創(chuàng)建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服務(wù)器(在后臺運行)。
步驟2:安裝Python依賴項
要安裝程序所需的所有依賴項,需要在操作系統(tǒng)的命令行中運行以下命令:
pip install weaviate-client openai這將安裝Weaviate Python客戶機和OpenAI庫。
步驟3:設(shè)置環(huán)境變量
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")前面的代碼使用憑據(jù)連接Weaviate云實例,并確認服務(wù)器已經(jīng)啟動并可訪問。
對于本地實例,使用:
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:批量插入樣例數(shù)據(jù)
data = [
{"question":"Only mammal in Proboscidea order?","answer":"Elephant","category":"ANIMALS"},
{"question":"Organ that stores glycogen?","answer":"Liver","category":"SCIENCE"}
]創(chuàng)建一個小型QA數(shù)據(jù)集:
with client.batch as batch:
batch.batch_size = 20
for obj in data:
batch.add_data_object(obj, "Question")以批處理方式插入數(shù)據(jù)以提高效率:
print(f"Indexed {len(data)} items")輸出:

確認已經(jīng)索引的項目數(shù)量。
步驟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個結(jié)果的結(jié)果。
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})")輸出:

顯示具有確定性分數(shù)的結(jié)果。
步驟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)生成響應(yīng)。
generated = rag["data"]["Get"]["Question"][0]["generate"]["singleResult"]
print(" RAG answer:", generated)輸出:

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

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
























