Takéembedding database, similarity search databasePokročilý
Definice
Vektorová databáze je databázový systém nebo databázová vrstva určená k ukládání embeddingů, tedy číselných vektorů reprezentujících význam textu, obrázků, zvuku nebo jiných dat. Umožňuje rychle hledat nejpodobnější položky podle vzdálenosti ve vícerozměrném prostoru, často pro RAG, doporučování a sémantické vyhledávání.
Než se na to spolehnete: Nabídka funkcí konkrétních vektorových databází a cloudových služeb se rychle mění, proto heslo popisuje hlavně obecný princip.
Proč vektorová databáze ukládá význam jako čísla
Vektorová databáze vzniká z potřeby vyhledávat podle podobnosti, ne jen podle přesné hodnoty ve sloupci. Model strojového učení převede dokument, dotaz, obrázek nebo produkt na embedding: pole desetinných čísel, které zachycuje jeho významové vlastnosti. Dva texty se stejnými slovy nemusí být blízko, pokud mluví o jiné věci, a dva různě formulované texty mohou ležet blízko sebe, pokud popisují stejný záměr.
Databázová část ukládá samotný vektor, identifikátor položky a metadata, například jazyk, kategorii, čas vytvoření nebo práva přístupu. Metadata jsou důležitá, protože čistá podobnost často nestačí. Firemní vyhledávání může chtít nejpodobnější dokument, ale jen z oddělení, do kterého má uživatel přístup.
Vyhledávání podle vzdálenosti, ne podle rovnosti
Dotaz ve vektorové databázi typicky probíhá tak, že aplikace nejprve vytvoří embedding dotazu stejným nebo kompatibilním modelem. Databáze potom hledá vektory, které jsou k dotazovému vektoru nejblíž podle zvolené metriky, například kosinové podobnosti, eukleidovské vzdálenosti nebo skalárního součinu. Výsledkem není jedna přesná shoda, ale seřazený seznam kandidátů se skóre.
Takové vyhledávání se liší od klasického SQL dotazu nad přesnou hodnotou. Vektorová databáze odpovídá na otázku „co je podobné tomuto významu“, zatímco relační databáze výborně odpovídá na otázku „které řádky splňují tuto podmínku“. V praxi se oba přístupy často kombinují: vektorové hledání najde kandidáty a běžné filtry zúží výsledky podle metadat.
Indexy a kompromis mezi rychlostí a přesností
Velká kolekce embeddingů nejde efektivně procházet vektorem po vektoru při každém dotazu. Vektorová databáze proto používá speciální index, který zrychluje hledání nejbližších sousedů. Běžné jsou přibližné metody, například grafové struktury typu HNSW nebo kvantizační techniky. Přibližné hledání je rychlé, ale může občas minout úplně nejlepší výsledek.
Provozní cena vektorové databáze se neukazuje jen v úložišti. Drahá může být paměť pro index, průběžné přepočítávání po vložení nových dat, ladění metriky a opakované generování embeddingů při změně modelu. Kvalita výsledků navíc závisí na datech, modelu, normalizaci vektorů a správném filtrování, ne pouze na databázovém produktu.
Místo v architektuře RAG a aplikací s AI
Nejznámější použití je RAG, kde vektorová databáze najde relevantní úryvky dokumentů a jazykový model z nich sestaví odpověď. Vektorová databáze v takové architektuře nesupluje model a sama negeneruje text. Úlohou databáze je rychle dodat vhodný kontext, ideálně včetně zdroje, oprávnění a dalších údajů potřebných pro kontrolovatelnou odpověď.
Vektorová databáze může být samostatný specializovaný systém, služba v cloudu nebo funkce v obecnější databázi typu NoSQL. Volba závisí na objemu dat, požadované latenci, podpoře filtrování, integraci s existujícím stackem a nárocích na správu. Menší aplikace často začínají integrovanou funkcí v databázi, kterou už používají, zatímco velké vyhledávací systémy řeší samostatné škálování indexů.
Příklady z praxe
Chatbot nad firemní dokumentací
Interní chatbot pro podporu převede otázku zaměstnance na embedding a pošle jej do vektorové databáze. Databáze vrátí pět nejbližších úryvků z dokumentace, ale jen z produktu a jazyka, které odpovídají filtru. Jazykový model potom odpoví z nalezených pasáží místo toho, aby hádal z obecných znalostí.
# Zjednodušený příklad toku v RAG aplikaci query_vector = embedding_model.embed("Jak nastavím dvoufaktorové přihlášení?") results = vector_db.search( vector=query_vector, top_k=5, filter={"product": "admin-portal", "language": "cs"} ) context = "\n".join(item.text for item in results) answer = llm.generate(question="Jak nastavím dvoufaktorové přihlášení?", context=context)Doporučení podobných produktů
E-shop uloží embeddingy názvů, popisů a parametrů produktů. Zákazník otevře sportovní bundu do deště a systém najde podobné položky, i když jiné produkty používají slova jako nepromokavá, hardshell nebo outdoorová. Doporučení je užitečnější než prostá shoda jedné kategorie, protože pracuje s významovou podobností produktu.
Časté omyly
- MýtusVektorová databáze je jen databáze pro AI chatboty.
- Ve skutečnostiVektorová databáze se často používá v chatbotech s RAG, ale stejný princip slouží i pro vyhledávání obrázků, doporučování produktů, deduplikaci záznamů nebo detekci podobných dokumentů.
- MýtusEmbeddingy stačí uložit a výsledky budou automaticky chytré.
- Ve skutečnostiVektorová databáze závisí na kvalitě embeddingového modelu, přípravě dat, chunkování dokumentů, metadatech a vyhodnocování výsledků. Špatně rozdělené nebo zastaralé zdroje povedou ke špatným odpovědím i v kvalitní databázi.
Časté dotazy
- Proč vektorová databáze někdy vrací nepřesný výsledek?
- Vektorová databáze může vrátit nepřesný výsledek, protože podobnost embeddingů není totéž jako pravdivost nebo relevance pro konkrétní úkol. Výsledek ovlivňuje model použitý pro embeddingy, délka a kvalita zdrojového textu, zvolená metrika, nastavení indexu i filtry nad metadaty. Přibližné indexy navíc někdy obětují část přesnosti za nižší latenci. Kvalitní aplikace proto výsledky testuje na reálných dotazech a často kombinuje vektorové skóre s dalším řazením.
- Stačí pro vektorová data běžná databáze?
- Vektorová databáze nemusí být samostatný produkt, pokud existující databáze umí ukládat vektory, indexovat je a filtrovat metadata s přijatelnou latencí. Pro menší projekt může stačit rozšíření nebo vestavěná funkce v databázi, kterou tým už provozuje. Samostatná vektorová databáze dává větší smysl při velkém objemu embeddingů, vysokém počtu dotazů, náročném škálování indexů nebo potřebě specializovaných ladicích voleb.
- Jakou metriku podobnosti zvolit pro vektorovou databázi?
- Vektorová databáze má používat metriku podobnosti, která odpovídá embeddingovému modelu a způsobu jeho trénování. Kosinová podobnost je častá u textových embeddingů, protože porovnává směr vektorů. Eukleidovská vzdálenost pracuje s geometrickou vzdáleností bodů a skalární součin se používá u některých modelů po normalizaci nebo podle doporučení dodavatele modelu. Praktická volba se má ověřovat na validačních dotazech, ne jen podle obecného pravidla.
- Patří osobní údaje do vektorové databáze?
- Vektorová databáze může obsahovat osobní údaje přímo v metadatech nebo nepřímo v textových úryvcích, ze kterých vznikly embeddingy. Embedding není bezpečná anonymizace jen proto, že vypadá jako pole čísel. Návrh musí řešit oprávnění, mazání dat, audit, šifrování a oddělení tenantů stejně pečlivě jako u jiných databází. U citlivých dat je důležité posoudit i model, který embeddingy vytváří.
Zdroje
- Atlas Vector Search(otevře se v novém okně)
- Vector search in Azure AI Search(otevře se v novém okně)
- Vector Search overview(otevře se v novém okně)
- Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs(otevře se v novém okně)