PropertyGraphIndex (grafuri de proprietăți în LlamaIndex) în LlamaIndex & Data RAG

Indexul care construiește un graf de proprietăți (entități etichetate, cu proprietăți, legate prin relații) din documente cu ajutorul unor extractori și îl interoghează prin sub-retriever-i care combină căutarea în graf cu căutarea vectorială.

Sintaxă & invocare Python
from llama_index.core import PropertyGraphIndex

index = PropertyGraphIndex.from_documents(documents, show_progress=True)
query_engine = index.as_query_engine(include_text=True, similarity_top_k=2)
raspuns = query_engine.query("Ce firme a achiziționat grupul Alfa?")

Un property graph este o colecție de noduri etichetate (categorii de entități, etichete de text) cu proprietăți (metadate), legate prin relații în căi. PropertyGraphIndex se ocupă de construirea și interogarea grafului. La construire rulează o serie de kg_extractors pe fiecare chunk și atașează entitățile și relațiile ca metadate; extractorii sunt compatibili cu IngestionPipeline. Implicit se folosesc SimpleLLMPathExtractor (triplete entitate, relație, entitate extrase de LLM) și ImplicitPathExtractor (relațiile existente între noduri, fără LLM).

Pentru control mai mare există DynamicLLMPathExtractor (tipuri de entități și relații sugerate, nu impuse) și SchemaLLMPathExtractor (schemă strictă de entități, relații și combinații permise, cu strict=True). La interogare, sub-retriever-ii impliciți sunt LLMSynonymRetriever (LLM-ul generează cuvinte-cheie și sinonime, apoi se urmează relațiile pe path_depth pași) și VectorContextRetriever (dacă embedding-urile sunt activate). Mai există TextToCypherRetriever, CypherTemplateRetriever și CustomPGRetriever, combinate prin PGRetriever.

Graful stă implicit în memorie și se salvează cu storage_context.persist(); pentru baze de grafuri externe (de exemplu Neo4j) indexul se reface cu PropertyGraphIndex.from_existing(property_graph_store=..., vector_store=...). Dacă graph store-ul nu suportă vectori, ai nevoie și de un vector store (implicit SimpleVectorStore). Construirea apelează LLM-ul pentru fiecare chunk, deci costul crește cu volumul de documente.

Concepte cheie și caracteristici

Concept / Parametru Descriere practică
kg_extractors Extractorii aplicați la construire. Impliciți: SimpleLLMPathExtractor și ImplicitPathExtractor.
SimpleLLMPathExtractor(max_paths_per_chunk=..., num_workers=...) Triplete libere extrase de LLM.
SchemaLLMPathExtractor(possible_entities=..., possible_relations=..., kg_validation_schema=..., strict=...) Extracție după o schemă; strict=False permite și triplete în afara schemei.
sub_retrievers Retriever-ii folosiți la interogare (LLMSynonymRetriever, VectorContextRetriever, TextToCypherRetriever…).
include_text Include textul chunk-ului sursă alături de căile găsite.
property_graph_store Unde se salvează graful; implicit în memorie.

Exemple practice și scenarii reale

Exemplul 1: Extracție după o schemă fixă

După ghidul „Using a Property Graph Index”; tipurile se scriu de preferință cu majuscule și underscore.

from typing import Literal
from llama_index.core import PropertyGraphIndex
from llama_index.core.indices.property_graph import SchemaLLMPathExtractor
from llama_index.llms.openai import OpenAI

entitati = Literal["COMPANIE", "PERSOANA", "TARA"]
relatii = Literal["ACHIZITIONAT", "FONDAT", "OPEREAZA_IN"]
schema = {
    "COMPANIE": ["ACHIZITIONAT", "OPEREAZA_IN"],
    "PERSOANA": ["FONDAT"],
    "TARA": [],
}
extractor = SchemaLLMPathExtractor(
    llm=OpenAI(model="gpt-6-luna"),
    possible_entities=entitati,
    possible_relations=relatii,
    kg_validation_schema=schema,
    strict=True,
    num_workers=4,
)
index = PropertyGraphIndex.from_documents(documents, kg_extractors=[extractor])

Exemplul 2: Sub-retriever-i aleși explicit

from llama_index.core.indices.property_graph import LLMSynonymRetriever, VectorContextRetriever

retriever = index.as_retriever(sub_retrievers=[
    LLMSynonymRetriever(index.property_graph_store, include_text=False, path_depth=2),
    VectorContextRetriever(index.property_graph_store, embed_model=embed_model,
                           similarity_top_k=2, path_depth=1),
])
noduri = retriever.retrieve("subsidiare în Europa de Est")

Greșeli frecvente și capcane

  • Extracție fără schemă pe un domeniu tehnic. Modelul poate crea mai multe nume pentru aceeași relație; SchemaLLMPathExtractor sau DynamicLLMPathExtractor cu tipuri date reduce variația.
  • Rularea extractorilor LLM pe tot corpusul fără un test pe un eșantion. Fiecare chunk înseamnă cel puțin un apel LLM.
  • Să confunzi extractorii cu retriever-ii: ImplicitPathExtractor construiește graful, LLMSynonymRetriever și VectorContextRetriever îl interoghează.

Noțiuni și module înrudite

Învață AI • Comunitate & Q&A

Întrebări & Exemple practice: PropertyGraphIndex (grafuri de proprietăți în LlamaIndex)

Ai o întrebare despre PropertyGraphIndex (grafuri de proprietăți în LlamaIndex) sau ai descoperit un truc, prompt sau fragment de cod util? Distribuie-l cu ceilalți membri ai comunității!

🤖

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau resurse pentru această pagină. Dacă ai testat un prompt sau ai un snippet util, adaugă-l mai jos pentru comunitate.

Comunitate AI Adaugă o întrebare sau distribuie un cod / prompt

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.