Geheugengrafieken

Graph RAG met LangChain en Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Geheugen in RAG-toepassingen

Kortetermijngeheugen

  • Kort leven, beperkt bereik
  • Gespreksgeschiedenis

 

goldvis.png

Langetermijngeheugen

  • Semantisch geheugen: feiten over de wereld
  • Handig voor hyperpersonalisatie

olifant.png

Graph RAG met LangChain en Neo4j

Kortetermijngeheugen

Graph RAG met LangChain en Neo4j

Kortetermijngeheugen

Graph RAG met LangChain en Neo4j

Kortetermijngeheugen

Graph RAG met LangChain en Neo4j

Van kortetermijn- naar langetermijngeheugen

Graph RAG met LangChain en Neo4j

Van kortetermijn- naar langetermijngeheugen

Graph RAG met LangChain en Neo4j

Van kortetermijn- naar langetermijngeheugen

Graph RAG met LangChain en Neo4j

Van kortetermijn- naar langetermijngeheugen

Graph RAG met LangChain en Neo4j

Van kortetermijn- naar langetermijngeheugen

Graph RAG met LangChain en Neo4j

Neo4j-chatberichtgeschiedenis

from langchain_neo4j import Neo4jChatMessageHistory


history = Neo4jChatMessageHistory(
url=NEO4J_URI,
username=NEO4J_USERNAME,
password=NEO4J_PASSWORD,
session_id="session_id_1",
)
# Voeg een menselijk bericht toe history.add_user_message("hi!")
# Voeg een AI-bericht toe history.add_ai_message("what's up?")
Graph RAG met LangChain en Neo4j

Problemen met alles opslaan

problemen_met_opslaan.jpg

Graph RAG met LangChain en Neo4j

Neo4j-chatberichtgeschiedenis

from langchain_neo4j import Neo4jChatMessageHistory

history = Neo4jChatMessageHistory(
    url=NEO4J_URI,
    username=NEO4J_USERNAME,
    password=NEO4J_PASSWORD,
    session_id="session_id_1",

window=10 # standaard 3 berichten
)
# Haal geschiedenis op print(history.messages)
[HumanMessage(content='hi!', ...), AIMessage(content='whats up?', ...)]
Graph RAG met LangChain en Neo4j

Gesprekken samenvatten

from pydantic import BaseModel, Field

class ConversationFact(BaseModel):
    """
    Een klasse die feiten uit een gesprek bewaart als object, subject, predicaat.
    """

object: str = Field(description="Het object van het feit. Bijvoorbeeld: 'Adam' ")
subject: str = Field(description="Het subject van het feit. Bijvoorbeeld: 'IJs' ")
relationship: str = Field(description="De relatie tussen object en subject. Bijv.: 'HOUDT_VAN'")
class ConversationFacts(BaseModel): """ Een klasse met een lijst van ConversationFact-objecten. """ facts: list[ConversationFact] = Field(description="Een lijst met ConversationFact-objecten.")
Graph RAG met LangChain en Neo4j

Gesprekken samenvatten

llm_with_output = (
    init_chat_model("gpt-4o-mini", model_provider="openai", api_key="...")
        .with_structured_output(ConversationFacts)
)
Graph RAG met LangChain en Neo4j

Gesprekken samenvatten

prompt = ChatPromptTemplate.from_messages(

SystemMessagePromptTemplate.from_template("Extract the facts from the conversation."),
MessagesPlaceholder(variable_name="history"),
)
chain = prompt | llm_with_output
chain.invoke({
"history": history.messages,
})
ConversationFacts(facts=[
    ConversationFact(object='child', subject='Bluey', relationship='LOVES')
])
Graph RAG met LangChain en Neo4j

Laten we oefenen!

Graph RAG met LangChain en Neo4j

Preparing Video For Download...