Weaviate: căutare hibridă și RAG integrat (generative search) în Baze de Date Vectoriale & Căutare Semantică

Arhitecturi de Producție, Pinecone & Căutare Hibridă Nivel: intermediar (weaviate-client 4.24)

Weaviate poate face în aceeași cerere căutarea (vectorială, BM25 sau hibridă) și generarea răspunsului cu un model configurat, per obiect sau pentru tot setul de rezultate.

Sintaxă & interogare
articole = client.collections.use("ArticolTehnic")
raspuns = articole.generate.hybrid(
    query="arhitectură microservicii securitate",
    alpha=0.7,
    limit=4,
    grouped_task="Explică principalele vulnerabilități descrise în aceste articole.",
)
print(raspuns.generative.text)

Weaviate este o bază de date vectorială open-source cu integrare de modele: poate vectoriza datele și interogările și poate trimite rezultatele căutării la un model generativ (RAG) în aceeași cerere. Modelul generativ se configurează implicit pe colecție sau se dă la interogare cu generative_provider (de la v1.30).

Interfața collection.generate din clientul Python v4 are aceleași metode de căutare ca collection.query (near_text, hybrid, bm25 etc.), plus single_prompt (un răspuns generat pentru fiecare obiect, cu proprietăți inserate ca {nume_proprietate}) și grouped_task (un singur răspuns pentru toate rezultatele). Rezultatele sunt în obiect.generative.text și raspuns.generative.text.

API-ul GraphQL este depreciat și va fi oprit în Weaviate Cloud la 1 mai 2027; clienții actuali folosesc gRPC. La căutarea hibridă, alpha = 1 înseamnă doar vectori și 0 doar BM25; valoarea implicită pe server este 0,75, dar documentația avertizează că efectul implicit depinde de client și de versiune, deci recomandă setarea explicită.

Concepte cheie și caracteristici

Concept / Parametru Descriere practică
client.collections.use("Nume") Obiectul colecției în clientul v4 actual.
generate.near_text / hybrid / bm25 Căutare plus generare în aceeași cerere.
single_prompt Prompt aplicat fiecărui obiect; proprietățile se inserează cu {proprietate}.
grouped_task Sarcină aplicată tuturor rezultatelor împreună (RAG clasic).
generative_provider=GenerativeConfig.openai() Alege modelul generativ la interogare, în locul celui configurat pe colecție.
alpha Ponderea vectorilor în hybrid (0–1).
fusion_type HybridFusion.RELATIVE_SCORE (implicit de la v1.24) sau RANKED.

Exemple practice și scenarii reale

Exemplul 1: Conectare locală cu cheia furnizorului generativ

import os
import weaviate

headers = {"X-OpenAI-Api-Key": os.environ["OPENAI_API_KEY"]}
with weaviate.connect_to_local(headers=headers) as client:
    articole = client.collections.use("ArticolTehnic")

Exemplul 2: Răspuns per obiect și răspuns de grup

from weaviate.classes.generate import GenerativeConfig

raspuns = articole.generate.near_text(
    query="securitate containere",
    limit=3,
    single_prompt="Rezumă într-o frază: {continut}",
    grouped_task="Ce recomandări au în comun aceste articole?",
    generative_provider=GenerativeConfig.openai(),
)
for o in raspuns.objects:
    print(o.generative.text)
print(raspuns.generative.text)

Exemplul 3: Căutare hibridă fără generare, cu scorurile explicate

from weaviate.classes.query import MetadataQuery

r = articole.query.hybrid(query="docker", alpha=0.5, limit=3,
                          return_metadata=MetadataQuery(score=True, explain_score=True))

Greșeli frecvente și capcane

  • Folosești raspuns.generated sau client.collections.get() din exemplele mai vechi. Documentația actuală folosește .generative.text și collections.use().
  • Lași alpha nesetat și te bazezi pe valoarea implicită. Setează-l explicit și testează mai multe valori pe datele tale.
  • Uiți cheia API a furnizorului generativ în antetele conexiunii; pasul de generare eșuează, chiar dacă căutarea merge.

Noțiuni și module înrudite