defsearch_in_graph(user_id, query_text, center_node_uuid=None):
"""
在 Zep 知识图谱中搜索与 query_text 相关的节点或事实
"""
client = Zep(api_key=ZEP_API_KEY)
if center_node_uuid:
results = client.graph.search(
user_id=user_id,
query=query_text,
reranker="node_distance",
center_node_uuid=center_node_uuid # 可选,指定搜索中心
)
else:
results = client.graph.search(
user_id=user_id,
query=query_text
)
relevant_nodes = results.nodes
relevant_edges = results.edges
print("=== 节点 ===")
if relevant_nodes:
for node in relevant_nodes:
print(node)
print("=== 相关事实 ===")
if relevant_edges:
for edge in relevant_edges:
print(edge.fact)
if __name__ == "__main__":
search_in_graph(user_id, "what does harry like?")
执行结果
=== 节点 ===
=== 相关事实 ===
Harry Liu loves watching movies
Harry Liu loves learning Python
Harry wants to learn Python basics.
ai_bot is teaching Harry Python basics
...
defauto_graph_search(user_id, query_text):
client = Zep(api_key=ZEP_API_KEY)
# 先尝试列出用户所有节点
nodes = client.graph.node.get_by_user_id(user_id=user_id)
# 简单关键词匹配(可以换成更智能的 NER 模型)
center_node_uuid = Nonefor node in nodes:
if node.label.lower() in query_text.lower():
center_node_uuid = node.uuid
break# 如果找到中心节点,就指定搜索,否则全局搜索return search_in_graph(user_id, query_text, center_node_uuid)
3. 搜索图的范围有三种 (edges, nodes , episodes)
query = "What projects is Jane working on?"# Search for edges in a graph
edge_results = client.graph.search(
graph_id=graph_id,
query=query,
scope="edges", # Default is "edges"
limit=5
)
# Search for nodes in a graph
node_results = client.graph.search(
graph_id=graph_id,
query=query,
scope="nodes",
limit=5
)
# Search for episodes in a graph
episode_results = client.graph.search(
graph_id=graph_id,
query=query,
scope="episodes",
limit=5
)
# search for perferences
search_results = client.graph.search(
user_id=user_id,
query="the user's music preferences",
scope="nodes",
search_filters={
"node_labels": ["Preference"]
}
)
for i, node inenumerate(search_results.nodes):
preference = node.attributes
print(f"Preference {i+1}:{preference}")
8. 初步认识与思考
从上面的例子可以看到,Zep 提供了以下几个层次的记忆能力:
对话存储:保留用户与 AI 的消息。
上下文总结:自动生成用户画像和对话摘要。
图谱搜索:以结构化的方式组织知识,方便 AI 检索和推理。
这让 AI 不仅能「记住你说过的话」,还可以「理解你是谁」、「你关心什么」、「你曾经提过的事实」——这就是长期记忆的价值。
总结
传统的聊天机器人往往是「短期记忆」:只记住本轮对话内容。而 Zep 则进一步赋予 AI 「长期记忆」:它能管理用户信息、保存对话线程、抽取知识图谱,并支持高效的检索和推理。
对于想要打造真正个性化 AI 助手的开发者来说,Zep 提供了一套非常实用的工具。未来我们还可以基于这些记忆能力,构建更加智能、持久且个性化的 AI 应用。