Vektorové databázy umožňujú sémantické vyhľadávanie - nájdete podobné koncepty, nie len presné zhody.
Čo sú embeddings?
Embeddings sú numerické reprezentácie textu (alebo obrázkov) vo forme vektorov:
from openai import OpenAI
client = OpenAI()
response = client.embeddings.create(
model="text-embedding-3-small",
input="Ako funguje machine learning?"
)
# Výsledok: vektor s 1536 dimenziami
vector = response.data[0].embedding # [0.023, -0.041, 0.067, ...]
Podobné koncepty majú podobné vektory.
Prečo nie SQL?
-- SQL: presná zhoda
SELECT * FROM products WHERE description LIKE '%laptop%'
-- Nenájde: "notebook", "počítač", "MacBook"
Vektorové vyhľadávanie nájde sémanticky podobné výsledky.
Populárne riešenia
Pinecone (Managed)
import pinecone
pinecone.init(api_key="xxx", environment="us-west1-gcp")
index = pinecone.Index("my-index")
# Uloženie
index.upsert(vectors=[
{"id": "doc1", "values": embedding, "metadata": {"source": "faq"}}
])
# Vyhľadávanie
results = index.query(
vector=query_embedding,
top_k=5,
include_metadata=True
)
Výhody: Fully managed, škálovateľný, rýchly Nevýhody: Cena pri veľkom volume
Weaviate (Open Source)
import weaviate
client = weaviate.Client("http://localhost:8080")
# Schema
client.schema.create_class({
"class": "Document",
"vectorizer": "text2vec-openai"
})
# Auto-vectorization pri uložení
client.data_object.create({
"content": "Machine learning je...",
"source": "wiki"
}, "Document")
Výhody: Open source, GraphQL API, hybrid search Nevýhody: Self-hosting komplexita
Chroma (Lightweight)
import chromadb
client = chromadb.Client()
collection = client.create_collection("docs")
collection.add(
documents=["Text dokumentu 1", "Text dokumentu 2"],
ids=["doc1", "doc2"]
)
results = collection.query(
query_texts=["Hľadaný koncept"],
n_results=5
)
Výhody: Jednoduchý, lokálny, ideálny pre prototyping Nevýhody: Nie pre produkciu s veľkými dátami
pgvector (PostgreSQL)
CREATE EXTENSION vector;
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
content TEXT,
embedding vector(1536)
);
-- Vytvorenie indexu
CREATE INDEX ON documents USING ivfflat (embedding vector_cosine_ops);
-- Vyhľadávanie
SELECT content
FROM documents
ORDER BY embedding <=> '[0.1, 0.2, ...]'::vector
LIMIT 5;
Výhody: Využitie existujúcej PostgreSQL infraštruktúry Nevýhody: Pomalšie ako špecializované riešenia
Porovnanie
| Riešenie | Hosting | Cena | Použitie |
|---|---|---|---|
| Pinecone | Managed | $$ | Enterprise |
| Weaviate | Self/Cloud | $ | Flexibilné |
| Chroma | Local | Free | Prototyping |
| pgvector | Self | Free | Existujúci Postgres |
Best Practices
- Dimension - text-embedding-3-small (1536) vs large (3072)
- Indexing - HNSW pre rýchlosť, IVF pre pamäť
- Metadata filtering - kombinujte s tradičnými filtrami
- Batch operations - upsert vo väčších dávkach
Záver
Pre prototyp použite Chroma. Pre produkciu zvážte Pinecone (managed) alebo Weaviate (control). Ak už máte PostgreSQL, pgvector je najrýchlejší štart.