技术背景介绍
随着人工智能助手的广泛应用,如何让 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—
1231

被折叠的 条评论
为什么被折叠?



