问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

AI对话系统中的8种记忆维护方案及应用场景详解

创作时间:
2025-01-21 20:31:14
作者:
@小白创作中心

AI对话系统中的8种记忆维护方案及应用场景详解

在多轮对话中,如何让AI保持长期记忆是一个重要的技术问题。本文详细介绍了8种不同的记忆维护方式,并结合具体场景和代码示例进行了说明。这些方法可以帮助AI更好地理解和维护对话历史,提供更连贯、更个性化的服务。

在基于大模型的Agent中,长期记忆的状态维护至关重要。在OpenAI AI应用研究主管Lilian Weng的博客《基于大模型的Agent构成》中,将记忆视为关键的组件之一。下面结合LangChain中的代码,介绍8种不同的记忆维护方式在不同场景中的应用。


基于大模型的Agent构成

1. 获取全量历史对话

一般客服场景

在电信公司的客服聊天机器人场景中,如果用户在对话中先是询问了账单问题,接着又谈到了网络连接问题,ConversationBufferMemory可以用来记住整个与用户的对话历史,可以帮助AI在回答网络问题时还记得账单问题的相关细节,从而提供更连贯的服务。

2. 滑动窗口获取最近部分对话内容

商品咨询场景

在一个电商平台上,如果用户询问关于特定产品的问题(如手机的电池续航时间),然后又问到了配送方式,ConversationBufferWindowMemory可以帮助AI只专注于最近的一两个问题(如配送方式),而不是整个对话历史,以提供更快速和专注的答复。

3. 获取历史对话中实体信息

法律咨询场景

在法律咨询的场景中,客户可能会提到特定的案件名称、相关法律条款或个人信息(如“我在去年的交通事故中受了伤,想了解关于赔偿的法律建议”)。ConversationEntityMemory可以帮助AI记住这些关键实体和实体关系细节,从而在整个对话过程中提供更准确、更个性化的法律建议。

4. 利用知识图谱获取历史对话中的实体及其联系

医疗咨询场景

在医疗咨询中,一个病人可能会描述多个症状和过去的医疗历史(如“我有糖尿病史,最近觉得经常口渴和疲劳”)。ConversationKGMemory可以构建一个包含病人症状、疾病历史和可能的健康关联的知识图谱,从而帮助AI提供更全面和深入的医疗建议。

5. 对历史对话进行阶段性总结摘要

教育辅导场景

在一系列的教育辅导对话中,学生可能会提出不同的数学问题或理解难题(如“我不太理解二次方程的求解方法”)。ConversationSummaryMemory可以帮助AI总结之前的辅导内容和学生的疑问点,以便在随后的辅导中提供更针对性的解释和练习。

6. 需要获取最新对话,又要兼顾较早历史对话

技术支持场景

在处理一个长期的技术问题时(如软件故障排查),用户可能会在多次对话中提供不同的错误信息和反馈。ConversationSummaryBufferMemory可以帮助AI保留最近几次交互的详细信息,同时提供历史问题处理的摘要,以便于更有效地识别和解决问题。

7. 回溯最近和最关键的对话信息

金融咨询场景

在金融咨询聊天机器人中,客户可能会提出多个问题,涉及投资、市场动态或个人财务规划(如“我想了解股市最近的趋势以及如何分配我的投资组合”)。ConversationTokenBufferMemory可以帮助AI聚焦于最近和最关键的几个问题,同时避免由于记忆过多而导致的信息混淆。

8. 基于向量检索对话信息

了解最新新闻事件

用户可能会对特定新闻事件提出问题,如“最近的经济峰会有什么重要决策?”VectorStoreRetrieverMemory能够快速从大量历史新闻数据中检索出与当前问题最相关的信息,即使这些信息在整个对话历史中不是最新的,也能提供及时准确的背景信息和详细报道。

vectorstore = Chroma(embedding_function=OpenAIEmbeddings())
retriever = vectorstore.as_retriever(search_kwargs=dict(k=1))
memory = VectorStoreRetrieverMemory(retriever=retriever)
memory.save_context({"input": "我喜欢吃火锅"}, {"output": "听起来很好吃"})
memory.save_context({"input": "我不喜欢看摔跤比赛"}, {"output": "我也是"})
PROMPT_TEMPLATE = """以下是人类和 AI 之间的友好对话。AI 话语多且提供了许多来自其上下文的具体细节。如果 AI 不知道问题的答案,它会诚实地说不知道。
以前对话的相关片段:
{history}
(如果不相关,你不需要使用这些信息)
当前对话:
人类:{input}
AI:
"""
prompt = PromptTemplate(input_variables=["history", "input"], template=PROMPT_TEMPLATE)
conversation_with_summary = ConversationChain(    
    llm=llm,    
    prompt=prompt,    
    memory=memory,    
    verbose=True
)
print(conversation_with_summary.predict(input="你好,我是莫尔索,你叫什么"))
print(conversation_with_summary.predict(input="我喜欢的食物是什么?"))
print(conversation_with_summary.predict(input="我提到了哪些运动?"))
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号