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;
SchemaLLMPathExtractorsauDynamicLLMPathExtractorcu 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:
ImplicitPathExtractorconstruiește graful,LLMSynonymRetrieverșiVectorContextRetrieverîl interoghează.
Î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.