记忆图谱

使用 LangChain 和 Neo4j 的 Graph RAG

Adam Cowley

Manager, Developer Education at Neo4j

RAG 应用中的记忆

短期记忆

  • 生命周期短、作用域限定
  • 对话历史

 

goldfish.png

长期记忆

  • 语义记忆:关于世界的事实
  • 适用于超个性化

elephant.png

使用 LangChain 和 Neo4j 的 Graph RAG

短期记忆

使用 LangChain 和 Neo4j 的 Graph RAG

短期记忆

使用 LangChain 和 Neo4j 的 Graph RAG

短期记忆

使用 LangChain 和 Neo4j 的 Graph RAG

从短期到长期记忆

使用 LangChain 和 Neo4j 的 Graph RAG

从短期到长期记忆

使用 LangChain 和 Neo4j 的 Graph RAG

从短期到长期记忆

使用 LangChain 和 Neo4j 的 Graph RAG

从短期到长期记忆

使用 LangChain 和 Neo4j 的 Graph RAG

从短期到长期记忆

使用 LangChain 和 Neo4j 的 Graph RAG

Neo4j 聊天消息历史

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?")
使用 LangChain 和 Neo4j 的 Graph RAG

存一切的问题

memory_methods.jpg

使用 LangChain 和 Neo4j 的 Graph RAG

Neo4j 聊天消息历史

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?', ...)]
使用 LangChain 和 Neo4j 的 Graph RAG

对话摘要

from pydantic import BaseModel, Field

class ConversationFact(BaseModel):
    """
    以主语、宾语、谓词三元组形式保存对话事实的类。
    """

object: str = Field(description="事实的宾语。例如:'Adam'")
subject: str = Field(description="事实的主语。例如:'Ice cream'")
relationship: str = Field(description="主语与宾语的关系。如:'LOVES'")
class ConversationFacts(BaseModel): """ 保存 ConversationFact 列表的类。 """ facts: list[ConversationFact] = Field(description="ConversationFact 对象列表。")
使用 LangChain 和 Neo4j 的 Graph RAG

对话摘要

llm_with_output = (
    init_chat_model("gpt-4o-mini", model_provider="openai", api_key="...")
        .with_structured_output(ConversationFacts)
)
使用 LangChain 和 Neo4j 的 Graph RAG

对话摘要

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')
])
使用 LangChain 和 Neo4j 的 Graph RAG

让我们一起练习吧!

使用 LangChain 和 Neo4j 的 Graph RAG

Preparing Video For Download...