Uživatelské nástroje

Nástroje pro tento web


weaviate

Weaviate

Weaviate je open-source, AI-nativní vektorová databáze (původně koncipovaná jako vektorový znalostní graf). Byla vyvinuta v jazyce Go a navržena s primárním cílem usnadnit vývojářům tvorbu aplikací založených na strojovém učení (ML) a velkých jazykových modelech (LLM).

Na rozdíl od tradičních databází, které vyhledávají přesné shody klíčových slov, Weaviate umožňuje sémantické vyhledávání – hledá objekty na základě jejich významu a kontextu pomocí vícerozměrných vektorů (tzv. embeddings).

Klíčové vlastnosti

Weaviate se od jiných vektorových databází (jako je např. Milvus) odlišuje silným zaměřením na „Developer Experience“ (vývojářský komfort) a schopností provádět operace přímo nad databází bez nutnosti složitého externího potrubí (pipeline).

  • Automatická vektorizace (Moduly): Weaviate se umí přímo napojit na modely od OpenAI, Hugging Face, Cohere a dalších. Vývojář do databáze vloží pouze čistý text (nebo obrázek) a Weaviate si sám zavolá příslušný model, vygeneruje vektor a data uloží.
  • Hybridní vyhledávání (Hybrid Search): Databáze exceluje v kombinování tradičního vyhledávání podle klíčových slov (algoritmus BM25) s vektorovým sémantickým vyhledáváním. Výsledky obou metod následně spojí (pomocí algoritmu Reciprocal Rank Fusion), což poskytuje maximální relevanci.
  • Generativní vyhledávání (RAG out-of-the-box): Umožňuje rovnou s dotazem poslat instrukci pro LLM. Weaviate nejprve najde relevantní dokumenty a rovnou je předá jazykovému modelu (např. GPT-4), který z nich vygeneruje finální odpověď.
  • GraphQL API: Historicky Weaviate silně sázel na dotazovací jazyk GraphQL, který umožňuje velmi flexibilní získávání prolinkovaných dat. Dnes nabízí i moderní gRPC rozhraní pro maximální rychlost a nízkoúrovňové REST API.

Architektura a indexování

Weaviate používá pro efektivní vyhledávání kombinaci několika datových struktur:

Vektorový index: HNSW

Pro hledání podobností ve vektorech využívá Weaviate vlastní, vysoce optimalizovanou implementaci algoritmu HNSW (Hierarchical Navigable Small World). Tento index drží v paměti (RAM), což zajišťuje sub-milisekundovou latenci při vyhledávání.

Protože je ale HNSW extrémně náročný na kapacitu RAM (jak bylo popsáno v příslušném článku), Weaviate postupně zavedl techniky pro úsporu paměti:

  • Product Quantization (PQ): Technika ztrátové komprese, která zmenší velikost vektorů v paměti až o 70–90 % za cenu zanedbatelné ztráty přesnosti.
  • Vektorový index na disku: Pro masivní datasety přidal Weaviate podporu pro ukládání indexů na rychlé NVMe SSD, čímž řeší podobný problém jako DiskANN.

Invertovaný index

Pro klasické vyhledávání klíčových slov (BM25) a rychlé filtrování metadat (např. „najdi podobné články, ale pouze ty vydané v roce 2023“) udržuje Weaviate tradiční invertovaný index, podobně jako Elasticsearch.

Srovnání: Weaviate vs. Milvus

Ačkoliv obě řešení patří na špičku mezi vektorovými databázemi, mají mírně odlišnou filozofii:

Vlastnost Weaviate Milvus
Hlavní zaměření Integrované „AI-native“ řešení, snadné použití, hybridní hledání. Maximální škálovatelnost, obří datové clustery, podpora různých indexů.
Vektorizace Umí data vektorizovat sám (integrované moduly pro LLM). Dříve čistě BYOV (Bring Your Own Vectors), dnes už integrace také přidává.
Indexy Primárně HNSW s PQ. HNSW, IVF_FLAT, DiskANN a řada dalších.
Datový model Objektově orientovaný (Třídy a Vlastnosti), podpora GraphQL. Tradičnější tabulkový/kolekční přístup s primárními klíči.

Základní ukázka kódu (Python)

Pro interakci s databází Weaviate se nejčastěji používá Python klient v4:

import weaviate
import weaviate.classes.config as wc
 
# Připojení k lokální instanci Weaviate běžící v Dockeru
client = weaviate.connect_to_local()
 
try:
    # Vytvoření kolekce s automatickou vektorizací (např. přes OpenAI)
    client.collections.create(
        name="Clanek",
        vectorizer_config=wc.Configure.Vectorizer.text2vec_openai(),
    )
 
    # Vložení dat (vektor se vytvoří automaticky na pozadí)
    clanky = client.collections.get("Clanek")
    clanky.data.insert({
        "titulek": "Úvod do vektorových databází",
        "obsah": "Vektorové databáze jsou základem pro RAG..."
    })
 
    # Hybridní vyhledávání
    response = clanky.query.hybrid(
        query="jak fungují vektory",
        limit=2
    )
 
    for obj in response.objects:
        print(obj.properties["titulek"])
 
finally:
    client.close()

Odkazy a zdroje

weaviate.txt · Poslední úprava: autor: admin