如何使用Weaviate構建語義搜尋引擎

如何使用Weaviate構建語義搜尋引擎

文章目录

  • Weaviate是什麼?
  • Weaviate的核心原則和架構
  • Weaviate入門:動手指南
  • 先決條件
  • 步驟 1:部署Weaviate
  • 步驟 2:安裝Python依賴項
  • 步驟 3:設定環境變數
  • 步驟 4:連線到Weaviate
  • 步驟 5:使用嵌入和生成支援定義模式
  • 步驟 6:批次插入示例資料
  • 步驟 7:使用nearText進行語義搜尋
  • 步驟 8:檢索增強生成 (RAG)
  • Weaviate的主要功能
  • Weaviate與競爭對手對比
  • 小結

如何使用Weaviate構建語義搜尋引擎

我們搜尋和關聯資料的方式正在發生變化。現在,你搜尋“舒適的閱讀角落”時,得到的搜尋結果不再是包含“舒適”和“角落”,而是會顯示壁爐旁軟椅的圖片。這種方法專注於語義搜尋,即尋找資料的含義,而不是依賴於僵化的關鍵詞搜尋。這是一個至關重要的過渡階段,因為非結構化資料(影像、文字、影片)已經呈爆炸式增長,而傳統資料庫對於 AI 的需求水平來說已經越來越不切實際。

這正是 Weaviate 的切入點,它使自己成為向量資料庫領域的領導者。憑藉其獨特的功能和能力,Weaviate 正在改變企業使用基於 AI 的洞察和資料的方式。在本文中,我們將透過程式碼示例和實際應用來探討 Weaviate 為何能夠改變行業格局。

向量搜尋 vs 傳統搜尋

Weaviate是什麼?

Weaviate 是一個開源向量資料庫,專門用於儲存和處理以向量表示的高維資料,例如文字、影像或影片。Weaviate 允許企業輕鬆進行語義搜尋、建立推薦引擎並構建 AI 模型。

Weaviate 專注於智慧資料檢索,而非依賴傳統的基於每行儲存的列來檢索精確資料的資料庫。它使用基於機器學習的向量嵌入,根據語義查詢資料點之間的關係,而不是搜尋精確的資料匹配。

Weaviate 提供了一種構建執行 AI 模型的應用程式的簡便方法,這些模型需要快速高效地處理海量資料才能構建模型。Weaviate 中向量嵌入的儲存和檢索功能使其成為處理非結構化資料的公司的理想選擇。

Weaviate的核心原則和架構

Weaviate的核心原則和架構

Weaviate 的核心理念是處理高維資料,並利用高效可擴充套件的向量搜尋。讓我們來看看其架構背後的構建模組和原則:

  • AI 原生和模組化:Weaviate 旨在從一開始就將機器學習模型整合到架構中,為其提供一流的支援,能夠開箱即用地生成各種資料型別的嵌入(向量)。模組化設計提供了多種可能性,確保您可以在 Weaviate 之上構建系統,新增任何自定義功能,或連線/呼叫外部系統。
  • 分散式系統:該資料庫設計為能夠水平擴充套件。Weaviate 是分散式且無領導的,這意味著沒有單點故障。跨節點的高可用性冗餘意味著,如果發生故障,資料將從多個連線的節點複製並生成。它具有最終一致性,因此適用於雲原生以及其他環境。
  • 基於圖:Weaviate 模型是一種基於圖的資料模型。物件(向量)透過它們之間的關係連線起來,這使得儲存和查詢具有複雜關係的資料變得非常簡單,這在推薦系統等應用中至關重要。
  • 向量儲存:Weaviate 旨在將您的資料儲存為向量(物件的數值表示)。這對於支援 AI 的搜尋、推薦引擎以及所有其他與人工智慧/機器學習相關的用例而言都是理想的選擇。

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 的一種方法是使用其雲服務:

  1. 首先,訪問 https://console.weaviate.cloud/
  2. 然後,註冊並選擇 OpenAI 模組建立一個叢集。

另請記下您的 WEAVIATE_URL(類似於 https://xyz.weaviate.network)和 WEAVIATE_API_KEY

選項 2:使用 Docker Compose 本地執行

建立 docker-compose.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'

使用 OpenAI 模組和匿名訪問配置 Weaviate 容器。

使用以下命令啟動它:

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

上述語句將架構上傳至 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()
)

使用文字向量對“最大的大象”等概念進行語義搜尋。僅返回確定性≥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(透過生成)生成響應。

generated = rag["data"]["Get"]["Question"][0]["generate"]["singleResult"]
print(" RAG answer:", generated)

輸出:

根據 Weaviate DB 中最接近的匹配列印生成的答案

根據 Weaviate DB 中最接近的匹配列印生成的答案。

Weaviate的主要功能

Weaviate的主要功能

Weaviate 擁有諸多特殊功能,使其在大多數基於向量的資料管理任務中擁有靈活而強大的優勢。

  • 向量搜尋:Weaviate 可以將資料儲存和查詢為向量嵌入,從而進行語義搜尋;由於它基於語義而非簡單的關鍵詞匹配來查詢相似的資料點,因此提高了準確性。
  • 混合搜尋:透過將向量搜尋和傳統的基於關鍵詞的搜尋相結合,Weaviate 可以提供更具針對性和情境化的結果,同時為各種用例提供更大的靈活性。
  • 可擴充套件的基礎架構:Weaviate 能夠使用單節點和分散式部署模型執行;它可以水平擴充套件以支援超大型資料集,並確保效能不受影響。
  • AI 原生架構:Weaviate 旨在與機器學習模型協同工作,支援直接生成嵌入,無需藉助其他平臺或外部工具。
  • 開源:作為開源平臺,Weaviate 允許一定程度的定製、整合,甚至允許使用者在其持續開發過程中做出貢獻。
  • 可擴充套件性:Weaviate 透過模組和外掛支援可擴充套件性,使使用者能夠從各種機器學習模型和外部資料來源進行整合。

Weaviate與競爭對手對比

下表重點介紹了 Weaviate 與向量資料庫領域部分競爭對手的主要差異化優勢。

特性 Weaviate Pinecone Milvus Qdrant
開源
混合搜尋 是(向量 + 關鍵詞搜尋) 是(向量 + 後設資料搜尋) 是(向量 + 後設資料搜尋)
分散式架構
預置 AI 模型支援 是(內建 ML 模型整合)
雲原生整合
資料複製

如上表所示,Weaviate 是唯一提供混合搜尋的向量資料庫,能夠同時進行向量搜尋和基於關鍵詞的搜尋。因此,搜尋選項更加豐富。Weaviate 是開源的,而 Pinecone 是專有的。Weaviate 的開源優勢和透明庫為使用者提供了豐富的定製選項。

尤其值得一提的是,Weaviate 將機器學習技術整合到資料庫中,使其解決方案與競爭對手的解決方案顯著區分開來。

小結

Weaviate 是一款領先的向量資料庫,擁有革命性的 AI 原生架構,旨在處理高維資料,同時融入機器學習模型。Weaviate 的混合資料和搜尋功能以及其開源特性,為各行各業的 AI 應用提供了強大的解決方案。Weaviate 的可擴充套件性和高效能使其能夠繼續成為非結構化資料的領先解決方案。從推薦引擎、聊天機器人到語義搜尋引擎,Weaviate 充分釋放其先進功能的潛力,幫助開發者增強其 AI 應用。對 AI 解決方案的需求必將持續增長;因此,Weaviate 在向量資料庫領域的重要性將日益凸顯,並透過其處理複雜資料集的能力從根本上影響該領域的未來。

評論留言