Minnesgrafar

Graph RAG med LangChain och Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Minne i RAG-applikationer

Korttidsminne

  • Kortlivat, begränsat omfång
  • Konversationshistorik

 

goldfish.png

Långtidsminne

  • Semantiskt minne: fakta om världen
  • Användbart för hyperpersonalisering

elephant.png

Graph RAG med LangChain och Neo4j

Korttidsminne

Graph RAG med LangChain och Neo4j

Korttidsminne

Graph RAG med LangChain och Neo4j

Korttidsminne

Graph RAG med LangChain och Neo4j

Från korttidsminne till långtidsminne

Graph RAG med LangChain och Neo4j

Från korttidsminne till långtidsminne

Graph RAG med LangChain och Neo4j

Från korttidsminne till långtidsminne

Graph RAG med LangChain och Neo4j

Från korttidsminne till långtidsminne

Graph RAG med LangChain och Neo4j

Från korttidsminne till långtidsminne

Graph RAG med LangChain och Neo4j

Neo4j chattmeddelandehistorik

from langchain_neo4j import Neo4jChatMessageHistory


history = Neo4jChatMessageHistory(
url=NEO4J_URI,
username=NEO4J_USERNAME,
password=NEO4J_PASSWORD,
session_id="session_id_1",
)
# Add a human message history.add_user_message("hi!")
# Add an AI message history.add_ai_message("what's up?")
Graph RAG med LangChain och Neo4j

Problem med att lagra allt

memory_methods.jpg

Graph RAG med LangChain och Neo4j

Neo4j chattmeddelandehistorik

from langchain_neo4j import Neo4jChatMessageHistory

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

window=10 # defaults to 3 messages
)
# Get history print(history.messages)
[HumanMessage(content='hi!', ...), AIMessage(content='whats up?', ...)]
Graph RAG med LangChain och Neo4j

Sammanfatta konversationer

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 med LangChain och Neo4j

Sammanfatta konversationer

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

Sammanfatta konversationer

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 med LangChain och Neo4j

Nu kör vi en övning!

Graph RAG med LangChain och Neo4j

Preparing Video For Download...