在AI发展的过程中,一个重要的任务是赋予AI系统以记忆能力,使其能够在对话中记住用户的意图和上下文信息。Zep是一种服务,旨在为AI助理应用提供长期的记忆功能。本文将详细介绍如何使用Zep来实现这一功能,帮助AI助理回忆过去的对话,以减少虚假响应、降低延迟并节省成本。
技术背景介绍
在AI助理应用中,拥有记忆功能的助理可以显著增强用户体验。这种功能可以让助理在与用户的每次交互中保留上下文,甚至在经过长时间后依然能够回忆起相关对话。Zep提供了一种实现这种长期记忆的解决方案,结合Langchain等框架使用时尤为强大。
核心原理解析
Zep通过持久化聊天历史记录和利用内置的内存管理机制,能够在每次对话中自动获取并处理历史消息。这些消息被存储并在需要时检索,用于分析当前会话的上下文,并生成更加准确和相关的回答。
代码实现演示
在下面的代码示例中,我们将展示如何使用Zep服务来创建一个可以记住过去聊天记录的AI助理。
from uuid import uuid4
import getpass
from langchain_community.chat_message_histories import ZepCloudChatMessageHistory
from langchain_community.memory.zep_cloud_memory import ZepCloudMemory
from langchain_core.messages import AIMessage, HumanMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables import RunnableParallel, RunnableWithMessageHistory
from langchain_openai import ChatOpenAI
# 获取密钥
openai_key = getpass.getpass("Enter your OpenAI API key: ")
zep_api_key = getpass.getpass("Enter your Zep API key: ")
# 创建一个会话ID
session_id = str(uuid4())
# 设置测试聊天记录
test_history = [
{"role": "human", "content": "Who was Octavia Butler?"},
{"role": "ai", "content": "Octavia Estelle Butler was an American science fiction author."},
{"role": "human", "content": "Which books of hers were made into movies?"},
{"role": "ai", "content": "The most well-known adaptation of Octavia Butler's work is the FX series Kindred."},
]
# 创建Zep内存实例
zep_memory = ZepCloudMemory(session_id=session_id, api_key=zep_api_key)
# 加载聊天记录到内存
for msg in test_history:
message = HumanMessage(content=msg["content"]) if msg["role"] == "human" else AIMessage(content=msg["content"])
zep_memory.chat_memory.add_message(message)
# 定义聊天提示模板和执行链
template = "Be helpful and answer the question below using the provided context:"
answer_prompt = ChatPromptTemplate.from_messages([
("system", template),
MessagesPlaceholder(variable_name="chat_history"),
("user", "{question}"),
])
inputs = RunnableParallel({
"question": lambda x: x["question"],
"chat_history": lambda x: x["chat_history"],
})
chain = RunnableWithMessageHistory(
inputs | answer_prompt | ChatOpenAI(openai_api_key=openai_key) | StrOutputParser(),
lambda s_id: ZepCloudChatMessageHistory(session_id=s_id, api_key=zep_api_key, memory_type="perpetual"),
input_messages_key="question",
history_messages_key="chat_history",
)
# 使用链进行会话
response = chain.invoke({
"question": "What is the book's relevance to the challenges facing contemporary society?"
}, config={"configurable": {"session_id": session_id}})
print(response)
应用场景分析
Zep的记忆功能非常适合需要上下文记忆的应用场景,如个性化助手、长期陪伴的机器人、复杂任务管理系统等。通过确保助理能够保持记忆,用户体验得到显著提升,减少了重复信息输入和解释的频率。
实践建议
- 确保在任何生产应用中安全管理API密钥。
- 通过定期审查和清理助理的记忆,确保信息的准确性和相关性。
- 在需要持久记忆的场景中应用Zep以增强系统的自然互动能力。
如果遇到问题欢迎在评论区交流。
—END—
675

被折叠的 条评论
为什么被折叠?



