Graphes de mémoire

Graph RAG avec LangChain et Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

La mémoire dans les applications RAG

Mémoire à court terme

  • Brève, portée limitée
  • Historique de conversation

 

goldfish.png

Mémoire à long terme

  • Mémoire sémantique : faits sur le monde
  • Utile pour l’hyper‑personnalisation

elephant.png

Graph RAG avec LangChain et Neo4j

Mémoire à court terme

Graph RAG avec LangChain et Neo4j

Mémoire à court terme

Graph RAG avec LangChain et Neo4j

Mémoire à court terme

Graph RAG avec LangChain et Neo4j

De la mémoire court terme au long terme

Graph RAG avec LangChain et Neo4j

De la mémoire court terme au long terme

Graph RAG avec LangChain et Neo4j

De la mémoire court terme au long terme

Graph RAG avec LangChain et Neo4j

De la mémoire court terme au long terme

Graph RAG avec LangChain et Neo4j

De la mémoire court terme au long terme

Graph RAG avec LangChain et Neo4j

Historique des messages Neo4j

from langchain_neo4j import Neo4jChatMessageHistory


history = Neo4jChatMessageHistory(
url=NEO4J_URI,
username=NEO4J_USERNAME,
password=NEO4J_PASSWORD,
session_id="session_id_1",
)
# Ajouter un message humain history.add_user_message("hi!")
# Ajouter un message IA history.add_ai_message("what's up?")
Graph RAG avec LangChain et Neo4j

Problèmes à tout stocker

memory_methods.jpg

Graph RAG avec LangChain et Neo4j

Historique des messages Neo4j

from langchain_neo4j import Neo4jChatMessageHistory

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

window=10 # valeur par défaut : 3 messages
)
# Obtenir l’historique print(history.messages)
[HumanMessage(content='hi!', ...), AIMessage(content='whats up?', ...)]
Graph RAG avec LangChain et Neo4j

Résumer des conversations

from pydantic import BaseModel, Field

class ConversationFact(BaseModel):
    """
    A class that holds the facts from a conversation in a format of object, subject, predicate.
    """

object: str = Field(description="The object of the fact. For example, 'Adam' ")
subject: str = Field(description="The subject of the fact. For example, 'Ice cream'")
relationship: str = Field(description="The relationship between object and subject. Eg: 'LOVES'")
class ConversationFacts(BaseModel): """ A class that holds a list of ConversationFact objects. """ facts: list[ConversationFact] = Field(description="A list of ConversationFact objects.")
Graph RAG avec LangChain et Neo4j

Résumer des conversations

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

Résumer des conversations

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 avec LangChain et Neo4j

Passons à la pratique !

Graph RAG avec LangChain et Neo4j

Preparing Video For Download...