使用 Zep 开源长久记忆服务为 AI 助手构建个性化体验

技术背景介绍

随着人工智能助手的广泛应用,如何让 AI 能够记住用户的历史对话,提供更个性化的互动体验,已经成为一个重要的技术挑战。Zep 是一种专为 AI 助手应用设计的长久记忆服务,可以帮助 AI 助手在对话中抓取、理解和提取历史数据,从而增强其个性化服务能力。

核心原理解析

Zep 通过提供一个可检索和自动总结的对话历史存储,帮助减少 AI 的幻觉(hallucinations)、降低延迟和成本。Zep 的长久记忆功能使得即便是较为久远的对话内容,也能被回忆和检索。

代码实现演示

下文将演示如何使用 Zep 来为你的聊天机器人提供记忆功能。

from uuid import uuid4
from langchain.agents import AgentType, initialize_agent
from langchain.memory import ZepMemory
from langchain_community.retrievers import ZepRetriever
from langchain_community.utilities import WikipediaAPIWrapper
from langchain_core.messages import AIMessage, HumanMessage
from langchain_core.tools import Tool
from langchain_openai import OpenAI

# Zep 服务器的 URL
ZEP_API_URL = "http://localhost:8000"

session_id = str(uuid4())  # 用户的唯一标识

# 获取您的 OpenAI API 密钥
import getpass

openai_key = getpass.getpass()

# 获取 Zep API 密钥(可选)
zep_api_key = getpass.getpass()

# 初始化 Zep 聊天历史类和代理
search = WikipediaAPIWrapper()
tools = [
    Tool(
        name="Search",
        func=search.run,
        description=(
            "当你需要在线搜索答案时非常有用。你应该提出"
            "针对性的问题"
        ),
    ),
]

# 配置 Zep 聊天历史
memory = ZepMemory(
    session_id=session_id,
    url=ZEP_API_URL,
    api_key=zep_api_key,
    memory_key="chat_history",
)

# 初始化代理
llm = OpenAI(temperature=0, openai_api_key=openai_key)
agent_chain = initialize_agent(
    tools,
    llm,
    agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,
    verbose=True,
    memory=memory,
)

# 预加载对话历史数据
test_history = [
    {"role": "human", "content": "Who was Octavia Butler?"},
    {
        "role": "ai",
        "content": (
            "Octavia Estelle Butler (June 22, 1947 – February 24, 2006) 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, based on her novel of the same name."
        ),
    },
    # 略去部分数据...
]

for msg in test_history:
    memory.chat_memory.add_message(
        (
            HumanMessage(content=msg["content"])
            if msg["role"] == "human"
            else AIMessage(content=msg["content"])
        ),
        metadata=msg.get("metadata", {}),
    )

# 运行代理,将输入和响应自动添加到 Zep 记忆中。
agent_chain.run(
    input="What is the book's relevance to the challenges facing contemporary society?",
)

# 检查 Zep 记忆
def print_messages(messages):
    for m in messages:
        print(m.type, ":\n", m.dict())

print(memory.chat_memory.zep_summary)
print("\n")
print_messages(memory.chat_memory.messages)

在上述代码中,我们设置了一个 Zep 内存实例,并利用它来记录与用户的交互历史。通过运行 agent_chain.run() 方法,我们可以自动将对话历史保存到 Zep 中。

应用场景分析

这套技术适用于任何需要保持和利用用户对话记忆的 AI 助手应用,例如客服机器人、个人助理应用等。通过长久记忆,AI 能够在未来的交互中保持一致性,并更好地理解和响应用户需求。

实践建议

  • 优化内存存储:根据应用需求定制内存储存策略,比如自动总结、关键点存储以优化性能。
  • 用户隐私保护:确保对话数据的存储和处理符合隐私保护政策。
  • 结合搜索工具:通过如 WikipediaAPIWrapper 等工具,增强对话内容的广度和深度。

如果遇到问题欢迎在评论区交流。

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值