在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—

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐