Sözcüksel grafikleri vektör aramayla birleştirme

LangChain ve Neo4j ile Graph RAG

Adam Cowley

Manager, Developer Education at Neo4j

Anlamsal aramada ilişkileri kullanma

Neo4j’de çalışmak nasıl?

Bir Review düğümü ve "Neo4j is a great place to work" metin özelliğine sahip bir grafik diyagramı

LangChain ve Neo4j ile Graph RAG

Anlamsal aramada ilişkileri kullanma

Neo4j’de çalışmak nasıl?

İnceleme, kullanıcı adı @emileifrem olan bir Person tarafından paylaşılmıştır

LangChain ve Neo4j ile Graph RAG

Anlamsal aramada ilişkileri kullanma

Neo4j’de çalışmak nasıl?

Emil Eifrem’in, adı Neo4j olan bir Company düğümüne WORKS_AT ilişkisi vardır

LangChain ve Neo4j ile Graph RAG

Metin özelliklerinden gömülere

 

  • text özelliğinden düğüm gömüleri oluşturun

Bir sahneden, dize özelliğine sahip Chunk düğümlerine HAS_CHUNK ilişkileri

LangChain ve Neo4j ile Graph RAG

Metin özelliklerinden gömülere

 

  • text özelliğinden düğüm gömüleri oluşturun
  • Gömülerde vektör araması
  • Bağlam için ilişkileri kullanın

Düğümlerdeki metin özellikleri bir gömme oluşturmak için kullanılır

LangChain ve Neo4j ile Graph RAG

Vektör deposu olarak Neo4j

from langchain_neo4j import Neo4jVector

 

  • Neo4jVector.from_documents(): Documentlardan düğümler ve alttaki dizini oluşturur
  • Neo4jVector.from_existing_graph(): Mevcut etiket ve özellik kombinasyonlarında dizin oluşturur
LangChain ve Neo4j ile Graph RAG

Mevcut düğüm özelliklerini parçalara ayırma

Bilgi grafiği diyagramı: Act düğümünden Scene düğümüne HAS_SCENE ilişkisi vurgulanmış

res = graph.query("""

MATCH (s:Scene)
WHERE NOT {(s)-[:HAS_LINE]->()}
RETURN s.id AS id, s.text AS text
""")
for scene in res: # Create chunks from scene['text']
LangChain ve Neo4j ile Graph RAG

Mevcut düğüm özelliklerini parçalara ayırma

  • text değerini "\n\n" ile bölün
  • Sahne yönergeleri tek satırdır
  • Konuşma satırları karakter adıyla başlar
    • Sonraki satırlar konuşmayı içerir
 Enter Sampson and Gregory armed with swords..

SAMPSON.
Gregory, on my word...
GREGORY. No, for then we should...
SAMPSON. I mean, if we be in choler, we'll draw...
LangChain ve Neo4j ile Graph RAG

Mevcut düğüm özelliklerini parçalara ayırma

# Metni satırlara böl
lines = [
    line.strip() for line in text.split("\n\n")

if "\n" in line
]
for line in lines: parts = line.split("\n")
character = parts[0]
text = "\n".join(parts[1:])
LangChain ve Neo4j ile Graph RAG

Mevcut düğüm özelliklerini parçalara ayırma

# ...Sahneler üzerinde döngüye devam

line_node = Node(type="Line", id=f"{scene.id}-line-{i}", properties={})
character_node = Node(type="Character", id=character, properties={})


# (:Scene)-[:HAS_LINE]->(:Line) graph_document.relationships.append( Relationship(source=scene, target=line_node, type="HAS_LINE"))
# (:Line)-[:SPOKEN_BY]->(:Character) graph_document.relationships.append(Relationship( source=line_node, target=characters[character], type="SPOKEN_BY"))
LangChain ve Neo4j ile Graph RAG

Mevcut grafikte vektör dizini oluşturma

from langchain.embeddings import init_embeddings
store = Neo4jVector.from_existing_graph(

init_embeddings("openai:text-embedding-3-small"),
url=NEO4J_URI, username=NEO4J_USERNAME, password=NEO4J_PASSWORD,
node_label="Line",
text_node_properties=["text"],
embedding_node_property="embedding",
index_name="lines",
)
LangChain ve Neo4j ile Graph RAG

LCEL ile vektör getirme

# Alıcı (retriever) oluştur
retriever = store.as_retriever()

# Elle çağır retriever.invoke("What does Romeo think of Juliet?") # [ Document, Document, ... ]
LangChain ve Neo4j ile Graph RAG

Hadi pratik yapalım!

LangChain ve Neo4j ile Graph RAG

Preparing Video For Download...