LangChain-13 Memory 通过 ConversationBufferMemory 记录会话的上下文 并在对话中自动检索

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: LangChain-13 Memory 通过 ConversationBufferMemory 记录会话的上下文 并在对话中自动检索

问题背景

平常我们的任务都是一次性会话,大模型是不会记录你的上下文的。如果我们要进行持续会话,或者希望大模型有记忆的话,我们需要对上下文进行管理。但这个过程是比较复杂的,LangChain 提供了一系列的工具来帮助我们简化过程。

安装依赖

pip install --upgrade --quiet  langchain-core langchain langchain-openai
• 1

编写代码

from operator import itemgetter

from langchain.memory import ConversationBufferMemory
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables import RunnableLambda, RunnablePassthrough
from langchain_openai import ChatOpenAI

model = ChatOpenAI()
prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a helpful chatbot"),
        MessagesPlaceholder(variable_name="history"),
        ("human", "{input}"),
    ]
)

memory = ConversationBufferMemory(return_messages=True)
memory.load_memory_variables({})

chain = (
    RunnablePassthrough.assign(
        history=RunnableLambda(memory.load_memory_variables) | itemgetter("history")
    )
    | prompt
    | model
)

inputs1 = {"input": "hi im wzk"}
message1 = chain.invoke(inputs1)
print(f"message1: {message1}")

# no memory
inputs2 = {"input": "whats my name?"}
message2 = chain.invoke(inputs2)
print(f"message2: {message2}")

# save message1 memory
memory.save_context(inputs1, {"output": message1.content})

# 加载 memory
memory.load_memory_variables({})
inputs3 = {"input": "whats my name"}
message3 = chain.invoke(inputs3)
print(f"message3: {message3}")

运行代码

➜ python3 test13.py
message1: content='Hello Wzk! How can I assist you today?' response_metadata={'finish_reason': 'stop', 'logprobs': None}
message2: content="I'm sorry, but I don't know your name. You never told me." response_metadata={'finish_reason': 'stop', 'logprobs': None}
message3: content='Your name is "wzk".' response_metadata={'finish_reason': 'stop', '

从会话中我们可以看到,第一次会话大模型是不知道的我们的名字的,但是在代码中,我们通过Memory的方式保留了记忆,此时我们再询问大模型,大模型就知道了我们的名字,并且正确的回答了。

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
2月前
LangChain-06 RAG With Source Doc 通过文档进行检索增强
LangChain-06 RAG With Source Doc 通过文档进行检索增强
42 3
|
2月前
|
存储 自然语言处理
LangChain-04 RAG Retrieval-Augmented Generation 检索增强生成
LangChain-04 RAG Retrieval-Augmented Generation 检索增强生成
31 3
|
2月前
|
JSON 数据格式
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
135 2
|
2月前
LangChain-15 Manage Prompt Size 管理上下文大小,用Agent的方式询问问题,并去百科检索内容,总结后返回
LangChain-15 Manage Prompt Size 管理上下文大小,用Agent的方式询问问题,并去百科检索内容,总结后返回
43 2
|
2月前
LangChain-05 RAG Conversational 增强检索会话
LangChain-05 RAG Conversational 增强检索会话
33 2
|
2月前
LangChain-24 Agengts 通过TavilySearch Agent实现检索内容并回答 AgentExecutor转换Search 借助Prompt Tools工具
LangChain-24 Agengts 通过TavilySearch Agent实现检索内容并回答 AgentExecutor转换Search 借助Prompt Tools工具
44 0
|
2月前
|
机器学习/深度学习 存储 自然语言处理
LangChain-22 Text Embedding 续接21节 文本切分后 对文本进行embedding向量化处理 后续可保存到向量数据库后进行检索 从而扩展大模型的能力
LangChain-22 Text Embedding 续接21节 文本切分后 对文本进行embedding向量化处理 后续可保存到向量数据库后进行检索 从而扩展大模型的能力
56 0
|
2月前
|
机器学习/深度学习 JSON JavaScript
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
40 0
|
7月前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
606 1
|
7月前
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
167 0