Memory在Langchain中是用来存储对话状态的组件。通常,在一个复杂的对话系统中,我们需要记住用户之前说过的话,以便生成上下文相关的回答。Langchain提供了多种类型的memory机制,帮助开发者方便地管理对话历史或其他有状态的信息。
总之,LangChain 的记忆组件赋予了语言模型在对话中保持连贯性和逻辑性的能力,使得模型能够像人类一样更好地参与复杂、多轮的对话交流。
它是一种简单的对话缓冲记忆,存储所有的对话历史记录。每次对话更新时,系统会将所有的历史对话串联成一个大块文本供上下文使用。
from langchain_openai import ChatOpenAI
chat_model = ChatOpenAI(
openai_api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
base_url="https://api.siliconflow.cn/v1",
model="Qwen/Qwen2.5-7B-Instruct"
)
from langchain_core.prompts import PromptTemplate
template = """
你是一个与人类对话的机器人。
{chat_history}
Human:{human_input}
Chatbot:
"""
prompt = PromptTemplate(input_variables=["chat_history", "human_input"], template=template)
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(memory_key="chat_history")
from langchain.chains import LLMChain
llm_chain = LLMChain(llm=chat_model, prompt=prompt, verbose=True, memory=memory)
print(llm_chain.predict(human_input="可以介绍一下西安大雁塔吗?"))
print(llm_chain.predict(human_input="我刚刚问了什么?"))
运行效果:
> Entering new LLMChain chain...
Prompt after formatting:
你是一个与人类对话的机器人。
Human:可以介绍一下西安大雁塔吗?
Chatbot:
> Finished chain.
当然可以!西安大雁塔是位于中国陕西省西安市的一座著名佛教塔,也是唐代著名的佛教寺院大慈恩寺的一部分。大雁塔建于公元652年,是为了存放玄奘法师从印度带回的大量佛经和佛像而建的。塔的建筑风格融合了印度、中亚以及中国传统的建筑艺术,是研究中国古代建筑、艺术和佛教文化的重要实物资料。
大雁塔的高度约为64.5米,共有七层,用以象征佛教七大奥义。塔身由砖石结构建成,外部雕刻有精美的佛像和佛经文,内部则设有楼梯,可以攀登至塔顶,俯瞰西安城市的美景。
除了作为重要的历史建筑外,大雁塔还是西安旅游的重要景点之一,每年都会吸引众多国内外游客前来参观。此外,大雁塔景区内还有大慈恩寺,这里是唐代著名高僧玄奘法师翻译佛经的地方,也是了解中国古代佛教文化的重要场所。
近年来,大雁塔及其周边区域经过修缮和改造,成为了集文化展示、休闲娱乐等多种功能于一体的综合性文化景区,不仅保留了历史的厚重感,还增添了现代化的元素,吸引了更多游客前来探索其深厚的文化底蕴。
> Entering new LLMChain chain...
Prompt after formatting:
你是一个与人类对话的机器人。
Human: 可以介绍一下西安大雁塔吗?
AI: 当然可以!西安大雁塔是位于中国陕西省西安市的一座著名佛教塔,也是唐代著名的佛教寺院大慈恩寺的一部分。大雁塔建于公元652年,是为了存放玄奘法师从印度带回的大量佛经和佛像而建的。塔的建筑风格融合了印度、中亚以及中国传统的建筑艺术,是研究中国古代建筑、艺术和佛教文化的重要实物资料。
大雁塔的高度约为64.5米,共有七层,用以象征佛教七大奥义。塔身由砖石结构建成,外部雕刻有精美的佛像和佛经文,内部则设有楼梯,可以攀登至塔顶,俯瞰西安城市的美景。
除了作为重要的历史建筑外,大雁塔还是西安旅游的重要景点之一,每年都会吸引众多国内外游客前来参观。此外,大雁塔景区内还有大慈恩寺,这里是唐代著名高僧玄奘法师翻译佛经的地方,也是了解中国古代佛教文化的重要场所。
近年来,大雁塔及其周边区域经过修缮和改造,成为了集文化展示、休闲娱乐等多种功能于一体的综合性文化景区,不仅保留了历史的厚重感,还增添了现代化的元素,吸引了更多游客前来探索其深厚的文化底蕴。
Human:我刚刚问了什么?
Chatbot:
> Finished chain.
您刚刚问的是可以介绍一下西安大雁塔吗?我已经为您介绍了西安大雁塔的历史背景、建筑特色、文化意义以及它作为旅游景点的情况。如果您还有其他关于西安大雁塔的问题,欢迎继续提问!
观察调试输出,第二次的prompt已经有了上一次对话的内容。
这种Memory会对对话进行总结,而不是逐字存储。它通过提炼对话的关键内容,压缩历史对话的长度。这样可以减少内存消耗,且便于处理长时间的对话。
from langchain_openai import ChatOpenAI
chat_model = ChatOpenAI(
openai_api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
base_url="https://api.siliconflow.cn/v1",
model="Qwen/Qwen2.5-7B-Instruct"
)
from langchain_core.prompts import PromptTemplate
template = """
你是一个与人类对话的机器人。
{chat_history}
Human:{human_input}
Chatbot:
"""
prompt = PromptTemplate(input_variables=["chat_history", "human_input"], template=template)
from langchain.memory import ConversationSummaryMemory
memory = ConversationSummaryMemory(llm =chat_model,memory_key="chat_history")
from langchain.chains import LLMChain
llm_chain = LLMChain(llm=chat_model, prompt=prompt, verbose=True, memory=memory)
print(llm_chain.predict(human_input="可以介绍一下西安城墙吗?"))
print(llm_chain.predict(human_input="我刚刚问了什么?"))
运行效果:
> Entering new LLMChain chain...
Prompt after formatting:
你是一个与人类对话的机器人。
Human:可以介绍一下西安城墙吗?
Chatbot:
> Finished chain.
当然可以!西安城墙是中国现存规模最大、保存最完整的古代城垣,位于中国陕西省西安市,是明代初年在唐、宋、元旧城基础上修筑的。西安城墙周长约13.74公里,墙体高约12米,底宽约为15-18米,顶部宽约12-14米。城墙由青砖砌成,每隔一定距离就有一座城门,共有四座主城门:长乐门(东门)、永宁门(南门)、安定门(西门)和安远门(北门)。
西安城墙不仅是中国古代城市防御系统的杰出代表,也是研究中国古代军事防御工程的重要实物资料。城墙外侧环绕着护城河,内侧则有大面积的绿化带,现在已经成为市民休闲娱乐的好去处,也是游客了解中国古代城市文化和军事历史的重要窗口。
每年春节期间的西安城墙灯会、每年都会吸引大量国内外游客前来参观游览,体验这座古老城墙的魅力。
> Entering new LLMChain chain...
Prompt after formatting:
你是一个与人类对话的机器人。
The human asks for an introduction to the Xi'an City Wall. The AI explains that the Xi'an City Wall is the largest and best-preserved ancient city wall in China, located in Xi'an, Shaanxi Province. It was built during the early Ming Dynasty on the foundation of the Tang, Song, and Yuan dynasties. The wall is about 13.74 kilometers in circumference, with a height of about 12 meters and a base width of 15-18 meters, and a top width of 12-14 meters. The wall is made of blue bricks, and there are four main gates: Changle Gate (East Gate), Yongyang Gate (South Gate), Anjing Gate (West Gate), and Anyuan Gate (North Gate).
The Xi'an City Wall is not only an outstanding representative of ancient Chinese city defense systems but also an important physical material for studying ancient Chinese military defense engineering. The wall is surrounded by a moat on the outside and has large green areas on the inside, now serving as a place for citizens to relax and entertain, as well as a window for visitors to learn about ancient Chinese urban culture and military history. During the Spring Festival, the Xi'an City Wall Lantern Festival attracts a large number of domestic and foreign tourists, allowing them to experience the charm of this ancient city wall.
Human:我刚刚问了什么?
Chatbot:
> Finished chain.
您刚刚询问了关于西安城墙的介绍。西安城墙是中国现存规模最大、保存最完整的古代城墙,位于陕西省西安市。它始建于明朝初期,是在唐代、宋代和元代城墙的基础上修建的。城墙周长约13.74公里,高约12米,底部宽15-18米,顶部宽12-14米,由青砖砌成。城墙上有四个主要的城门:东门(永乐门)、南门(永定门)、西门(安善门)和北门(永安门)。
西安城墙不仅是古代中国城市防御系统的杰出代表,也是研究古代中国军事防御工程的重要实物资料。城墙外有护城河,内侧有大片绿地,现在已成为市民休闲娱乐的地方,也是游客了解中国古代城市文化和军事历史的窗口。春节期间,西安城墙灯会吸引了大量国内外游客,让他们有机会体验这座古老城墙的魅力。
观察调试输出,第二次的prompt已经有了上一次对话的内容,但内容经过了总结。
这种Memory只存储最近的K次对话。与ConversationBufferMemory不同,它不会存储所有的对话历史,而是通过窗口机制保留最新的对话片段。
from langchain_openai import ChatOpenAI
chat_model = ChatOpenAI(
openai_api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
base_url="https://api.siliconflow.cn/v1",
model="Qwen/Qwen2.5-7B-Instruct"
)
from langchain_core.prompts import PromptTemplate
template = """
你是一个与人类对话的机器人。
{chat_history}
Human:{human_input}
Chatbot:
"""
prompt = PromptTemplate(input_variables=["chat_history", "human_input"], template=template)
from langchain.memory import ConversationBufferWindowMemory
memory = ConversationBufferWindowMemory(memory_key="chat_history", k=2)
from langchain.chains import LLMChain
llm_chain = LLMChain(llm=chat_model, prompt=prompt, verbose=True, memory=memory)
print(llm_chain.predict(human_input="可以介绍一下西安吗?"))
print(llm_chain.predict(human_input="西安有什么好玩的?"))
print(llm_chain.predict(human_input="大雁塔在哪里?"))
print(llm_chain.predict(human_input="西安有什么好吃的?"))
运行效果:
> Entering new LLMChain chain...
Prompt after formatting:
你是一个与人类对话的机器人。
Human:可以介绍一下西安吗?
Chatbot:
> Finished chain.
当然可以!西安是中国四大古都之一,拥有超过3100年的建城历史和1100多年的建都历史,是中国历史上建都朝代最多、影响力最大的古城之一。西安是古丝绸之路的起点,也是连接东西方文明的重要通道。以下是一些关于西安的详细介绍:
### 历史文化
- **古代文明**:西安曾是周、秦、汉、唐等13个朝代的都城,具有深厚的历史文化底蕴。
- **文物古迹**:兵马俑、大雁塔、小雁塔、钟楼、鼓楼、城墙等都是不可多得的历史文化瑰宝。
### 旅游资源
- **兵马俑博物馆**:秦始皇陵兵马俑是世界文化遗产,展示了秦朝的军阵和文化。
- **华清池**:唐玄宗和杨贵妃的温泉浴场,是著名的皇家园林。
- **大唐不夜城**:集文化、时尚、餐饮于一体的现代商业区,再现了盛唐繁华景象。
### 美食文化
- **羊肉泡馍**:一道西安的传统美食,以泡馍为主,配以炖煮的羊肉和多种调料。
- **腊汁肉夹馍**:馍夹着炖煮的肥瘦相间的肉,肉质鲜美。
- **凉皮**:一种凉爽可口的小吃,通常搭配蒜水和辣椒油食用。
### 现代风貌
- **现代建筑**:新开发的区域如曲江新区,结合了现代建筑与传统文化,展现了西安的现代化面貌。
- **教育科研**:西安是西北地区的科教文化中心,拥有众多的高等学府和研究机构。
西安是一座充满历史韵味和现代活力的城市,无论是对历史感兴趣的游客,还是热爱美食和自然风光的旅行者,都能在这里找到乐趣。如果你计划前往西安旅行,不妨提前规划一下行程,好好享受这座城市的魅力吧!
> Entering new LLMChain chain...
Prompt after formatting:
你是一个与人类对话的机器人。
Human: 可以介绍一下西安吗?
AI: 当然可以!西安是中国四大古都之一,拥有超过3100年的建城历史和1100多年的建都历史,是中国历史上建都朝代最多、影响力最大的古城之一。西安是古丝绸之路的起点,也是连接东西方文明的重要通道。以下是一些关于西安的详细介绍:
### 历史文化
- **古代文明**:西安曾是周、秦、汉、唐等13个朝代的都城,具有深厚的历史文化底蕴。
- **文物古迹**:兵马俑、大雁塔、小雁塔、钟楼、鼓楼、城墙等都是不可多得的历史文化瑰宝。
### 旅游资源
- **兵马俑博物馆**:秦始皇陵兵马俑是世界文化遗产,展示了秦朝的军阵和文化。
- **华清池**:唐玄宗和杨贵妃的温泉浴场,是著名的皇家园林。
- **大唐不夜城**:集文化、时尚、餐饮于一体的现代商业区,再现了盛唐繁华景象。
### 美食文化
- **羊肉泡馍**:一道西安的传统美食,以泡馍为主,配以炖煮的羊肉和多种调料。
- **腊汁肉夹馍**:馍夹着炖煮的肥瘦相间的肉,肉质鲜美。
- **凉皮**:一种凉爽可口的小吃,通常搭配蒜水和辣椒油食用。
### 现代风貌
- **现代建筑**:新开发的区域如曲江新区,结合了现代建筑与传统文化,展现了西安的现代化面貌。
- **教育科研**:西安是西北地区的科教文化中心,拥有众多的高等学府和研究机构。
西安是一座充满历史韵味和现代活力的城市,无论是对历史感兴趣的游客,还是热爱美食和自然风光的旅行者,都能在这里找到乐趣。如果你计划前往西安旅行,不妨提前规划一下行程,好好享受这座城市的魅力吧!
Human:西安有什么好玩的?
Chatbot:
> Finished chain.
西安不仅有着丰富的历史文化遗迹,还有许多现代的旅游景点和有趣的活动。以下是一些推荐的景点和活动:
### 历史文化景点
1. **兵马俑博物馆**:世界文化遗产,是秦始皇陵的一部分,展示了秦朝时期的军阵和陶俑。
2. **大雁塔**:唐代著名的佛教圣地,登塔可以俯瞰西安市区全景。
3. **小雁塔**:与大雁塔相对,同样具有悠久的历史和文化价值。
4. **钟楼和鼓楼**:位于市中心,是西安的标志性建筑,展示了明清时期的建筑风格。
5. **城墙**:西安古城墙是中国现存规模最大、保存最完整的古代城垣,您可以租一辆自行车绕城墙骑行,体验一番。
### 现代旅游景点和体验
1. **大唐不夜城**:以盛唐文化为主题,夜晚灯光璀璨,商业和文化氛围浓厚。
2. **华清宫**:唐代皇家温泉浴场,可以参观古迹,体验温泉,感受皇家风情。
3. **永兴坊**:一个融合了传统与现代的街区,有许多特色小吃和店铺。
4. **西安碑林博物馆**:收藏了大量珍贵的碑刻和石刻艺术品,可以深入了解中国书法和文化。
5. **西安音乐厅**:举办各种音乐会和文化活动,适合文艺爱好者。
### 其他活动
- **美食体验**:西安的小吃非常丰富,比如羊肉泡馍、肉夹馍、凉皮等,可以尝试不同的地方特色小吃。
- **文化体验**:参加一些文化体验活动,如书法体验、手工艺品制作等。
- **购物**:在回民街或钟楼附近的商业街购物,可以买到当地特色的纪念品和手工艺品。
西安是一座充满魅力的城市,无论是历史爱好者还是普通游客都能找到适合自己的活动。希望这些建议能帮助你更好地规划行程!
> Entering new LLMChain chain...
Prompt after formatting:
你是一个与人类对话的机器人。
Human: 可以介绍一下西安吗?
AI: 当然可以!西安是中国四大古都之一,拥有超过3100年的建城历史和1100多年的建都历史,是中国历史上建都朝代最多、影响力最大的古城之一。西安是古丝绸之路的起点,也是连接东西方文明的重要通道。以下是一些关于西安的详细介绍:
### 历史文化
- **古代文明**:西安曾是周、秦、汉、唐等13个朝代的都城,具有深厚的历史文化底蕴。
- **文物古迹**:兵马俑、大雁塔、小雁塔、钟楼、鼓楼、城墙等都是不可多得的历史文化瑰宝。
### 旅游资源
- **兵马俑博物馆**:秦始皇陵兵马俑是世界文化遗产,展示了秦朝的军阵和文化。
- **华清池**:唐玄宗和杨贵妃的温泉浴场,是著名的皇家园林。
- **大唐不夜城**:集文化、时尚、餐饮于一体的现代商业区,再现了盛唐繁华景象。
### 美食文化
- **羊肉泡馍**:一道西安的传统美食,以泡馍为主,配以炖煮的羊肉和多种调料。
- **腊汁肉夹馍**:馍夹着炖煮的肥瘦相间的肉,肉质鲜美。
- **凉皮**:一种凉爽可口的小吃,通常搭配蒜水和辣椒油食用。
### 现代风貌
- **现代建筑**:新开发的区域如曲江新区,结合了现代建筑与传统文化,展现了西安的现代化面貌。
- **教育科研**:西安是西北地区的科教文化中心,拥有众多的高等学府和研究机构。
西安是一座充满历史韵味和现代活力的城市,无论是对历史感兴趣的游客,还是热爱美食和自然风光的旅行者,都能在这里找到乐趣。如果你计划前往西安旅行,不妨提前规划一下行程,好好享受这座城市的魅力吧!
Human: 西安有什么好玩的?
AI: 西安不仅有着丰富的历史文化遗迹,还有许多现代的旅游景点和有趣的活动。以下是一些推荐的景点和活动:
### 历史文化景点
1. **兵马俑博物馆**:世界文化遗产,是秦始皇陵的一部分,展示了秦朝时期的军阵和陶俑。
2. **大雁塔**:唐代著名的佛教圣地,登塔可以俯瞰西安市区全景。
3. **小雁塔**:与大雁塔相对,同样具有悠久的历史和文化价值。
4. **钟楼和鼓楼**:位于市中心,是西安的标志性建筑,展示了明清时期的建筑风格。
5. **城墙**:西安古城墙是中国现存规模最大、保存最完整的古代城垣,您可以租一辆自行车绕城墙骑行,体验一番。
### 现代旅游景点和体验
1. **大唐不夜城**:以盛唐文化为主题,夜晚灯光璀璨,商业和文化氛围浓厚。
2. **华清宫**:唐代皇家温泉浴场,可以参观古迹,体验温泉,感受皇家风情。
3. **永兴坊**:一个融合了传统与现代的街区,有许多特色小吃和店铺。
4. **西安碑林博物馆**:收藏了大量珍贵的碑刻和石刻艺术品,可以深入了解中国书法和文化。
5. **西安音乐厅**:举办各种音乐会和文化活动,适合文艺爱好者。
### 其他活动
- **美食体验**:西安的小吃非常丰富,比如羊肉泡馍、肉夹馍、凉皮等,可以尝试不同的地方特色小吃。
- **文化体验**:参加一些文化体验活动,如书法体验、手工艺品制作等。
- **购物**:在回民街或钟楼附近的商业街购物,可以买到当地特色的纪念品和手工艺品。
西安是一座充满魅力的城市,无论是历史爱好者还是普通游客都能找到适合自己的活动。希望这些建议能帮助你更好地规划行程!
Human:大雁塔在哪里?
Chatbot:
> Finished chain.
大雁塔位于中国陕西省西安市雁塔区,具体地址是陕西省西安市雁塔路108号。大雁塔是唐朝时期为保存从印度带回的佛教经卷和佛像而建造的,是一座典型的四方楼阁式砖塔。大雁塔不仅是唐代建筑的杰出代表,也是西安的标志性建筑之一。游客可以乘公交车或地铁前往,非常方便。
> Entering new LLMChain chain...
Prompt after formatting:
你是一个与人类对话的机器人。
Human: 西安有什么好玩的?
AI: 西安不仅有着丰富的历史文化遗迹,还有许多现代的旅游景点和有趣的活动。以下是一些推荐的景点和活动:
### 历史文化景点
1. **兵马俑博物馆**:世界文化遗产,是秦始皇陵的一部分,展示了秦朝时期的军阵和陶俑。
2. **大雁塔**:唐代著名的佛教圣地,登塔可以俯瞰西安市区全景。
3. **小雁塔**:与大雁塔相对,同样具有悠久的历史和文化价值。
4. **钟楼和鼓楼**:位于市中心,是西安的标志性建筑,展示了明清时期的建筑风格。
5. **城墙**:西安古城墙是中国现存规模最大、保存最完整的古代城垣,您可以租一辆自行车绕城墙骑行,体验一番。
### 现代旅游景点和体验
1. **大唐不夜城**:以盛唐文化为主题,夜晚灯光璀璨,商业和文化氛围浓厚。
2. **华清宫**:唐代皇家温泉浴场,可以参观古迹,体验温泉,感受皇家风情。
3. **永兴坊**:一个融合了传统与现代的街区,有许多特色小吃和店铺。
4. **西安碑林博物馆**:收藏了大量珍贵的碑刻和石刻艺术品,可以深入了解中国书法和文化。
5. **西安音乐厅**:举办各种音乐会和文化活动,适合文艺爱好者。
### 其他活动
- **美食体验**:西安的小吃非常丰富,比如羊肉泡馍、肉夹馍、凉皮等,可以尝试不同的地方特色小吃。
- **文化体验**:参加一些文化体验活动,如书法体验、手工艺品制作等。
- **购物**:在回民街或钟楼附近的商业街购物,可以买到当地特色的纪念品和手工艺品。
西安是一座充满魅力的城市,无论是历史爱好者还是普通游客都能找到适合自己的活动。希望这些建议能帮助你更好地规划行程!
Human: 大雁塔在哪里?
AI: 大雁塔位于中国陕西省西安市雁塔区,具体地址是陕西省西安市雁塔路108号。大雁塔是唐朝时期为保存从印度带回的佛教经卷和佛像而建造的,是一座典型的四方楼阁式砖塔。大雁塔不仅是唐代建筑的杰出代表,也是西安的标志性建筑之一。游客可以乘公交车或地铁前往,非常方便。
Human:西安有什么好吃的?
Chatbot:
> Finished chain.
西安作为一座拥有悠久历史的城市,其美食文化同样丰富多彩。西安的小吃和菜肴融合了西北地区的特色,既有历史传承下来的名吃,也有现代创新的美食。以下是一些推荐的西安特色美食:
### 经典小吃
1. **羊肉泡馍**:将泡软的馍块和炖煮的羊肉一起食用,汤味鲜美,羊肉酥烂。
2. **肉夹馍**:将烤制的肉夹在馍里食用,肉质鲜嫩,香味浓郁。
3. **凉皮**:用小麦淀粉制作的凉面,搭配蒜水、辣椒油等调料,口感酸爽。
4. **羊肉串**:用羊肉串在烤炉上烤制,肉质鲜嫩多汁,风味独特。
5. **biangbiang面**:一种宽面条,配以特制的调料和食材,面条宽厚有劲,味道独特。
6. **油泼面**:将热油泼在蒜泥和辣椒油上,浇在面条上,味道香辣可口。
### 特色餐馆与美食街
1. **回民街**:位于西大街,是一个集中了众多美食的小吃街,可以品尝到各种地道的西安小吃。
2. **大秦帝国自助餐**:提供各种陕西特色菜肴,适合与家人或朋友一起享用。
3. **老孙家**:以肉夹馍和羊肉泡馍闻名,是品尝西安传统美食的好去处。
4. **德发长**:以羊肉泡馍和凉皮著称,是品尝陕西传统小吃的不错选择。
5. **春发生**:以各种面食和小吃闻名,是感受西安本土美食的好地方。
在西安,不仅可以品尝到这些经典美食,还可以尝试一些创新的美食,让味蕾体验不同的风味。希望这些建议能帮助你享受美味的西安之旅!
观察调试输出,当问题“西安有什么好吃的?”输入时第一次的对话被清除,剩下最新的两轮对话。因此我们可以看到所谓的记忆实际上就是在prompt中加入历史记录,在实际应用中我们可以手动实现加入记忆,仅需要把每次的对话保存下来然后拼接到下一次的prompt中。