VectorStore (Chroma / FAISS) & Metoda .as_retriever() în LangChain & LangGraph

Convertește fragmentele de text în vectori numerici (embeddings), le stochează într-o bază de date vectorială și expune un motor de căutare semantică.

Sintaxă & invocare Python
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings

vectorstore = Chroma.from_documents(documents=chunks, embedding=OpenAIEmbeddings())
retriever = vectorstore.as_retriever(search_kwargs={'k': 4})
docs_relevante = retriever.invoke('Care este politica de retur?')

Descriere & Utilizare

După ce documentele au fost împărțite în fragmente (chunks), acestea trebuie indexate pentru căutare semantică. O clasă VectorStore (precum Chroma, FAISS, Qdrant sau PGVector) apelează un model de embedding pentru a transforma fiecare fragment într-un vector numeric și îl salvează.

Apelând metoda vectorstore.as_retriever(), transformi baza de date într-o componentă standard Runnable care poate fi integrată direct cu operatorul | în orice lanț LCEL.

Poți configura atât numărul de pasaje returnate (k: 4), cât și algoritmul de selecție: similarity (cele mai apropiate matematic) sau mmr (Maximal Marginal Relevance – care aduce rezultate relevante, dar diverse, evitând pasajele aproape identice).

Cum să o reții ușor

💡 Ca un bibliotecar cu memorie fotografică: nu caută mecanic doar cărțile care au exact cuvântul ‘automobil’ pe copertă, ci îți aduce instant cele mai bune 4 paragrafe despre ‘mașini și vehicule’ chiar dacă folosesc sinonime.

Opțiuni și parametri tehnici

  • Transformă interogarea utilizatorului într-un vector folosind același model de embedding ca la indexare.
  • Calculează distanța cosinus sau produsul scalar în spațiul multidimensional HNSW.
  • Returnează primele k obiecte Document ordonate descrescător după relevanță.

Exemple practice și cazuri de utilizare

  • Căutare diversificată MMR: retriever = vectorstore.as_retriever(search_type='mmr', search_kwargs={'k': 5, 'fetch_k': 20})
  • Filtrare după metadate: retriever = vectorstore.as_retriever(search_kwargs={'k': 3, 'filter': {'categorie': 'juridic'}})

Sfaturi de configurare & capcane

Nu schimba niciodată modelul de embedding (ex: de la text-embedding-3-small la nomic-embed-text) pe o bază de date vectorială deja populată fără a reindexa toate documentele de la zero, deoarece dimensiunile și spațiile vectoriale sunt incompatibile.

Comenzi și ghiduri înrudite