#!/usr/bin/env python3
"""删除 Episode 节点的脚本."""
from src.config_manager import ConfigManager
from src.graphiti_client import GraphitiClient
def delete_all_episodes():
"""删除所有 Episode 节点."""
cm = ConfigManager()
client = GraphitiClient(cm)
if not client.connect():
print("❌ 连接 Neo4j 失败")
return
try:
with client.driver.session() as session:
# 先查找数量
count_result = session.run('MATCH (e:Episode) RETURN count(e) as count')
count = count_result.single()["count"] if count_result.peek() else 0
print(f"📊 当前有 {count} 个 Episode 节点")
if count > 0:
# 删除所有 Episode
session.run('MATCH (e:Episode) DELETE e')
print(f"✅ 已删除 {count} 个 Episode 节点")
else:
print("ℹ️ 没有需要删除的节点")
except Exception as e:
print(f"❌ 错误: {e}")
finally:
client.disconnect()
def delete_specific_episode(content: str):
"""删除特定内容的 Episode."""
cm = ConfigManager()
client = GraphitiClient(cm)
if not client.connect():
print("❌ 连接 Neo4j 失败")
return
try:
# 先查找
find_result = client.query_knowledge_graph(
f'MATCH (e:Episode {{content: $content}}) RETURN count(e) as count',
limit=1
)
# 使用参数化查询更安全
with client.driver.session() as session:
# 先查找
find_query = 'MATCH (e:Episode {content: $content}) RETURN count(e) as count'
find_result = session.run(find_query, content=content)
count = find_result.single()["count"] if find_result.peek() else 0
if count > 0:
# 删除
delete_query = 'MATCH (e:Episode {content: $content}) DELETE e'
session.run(delete_query, content=content)
print(f"✅ 已删除包含 '{content}' 的 Episode 节点(共 {count} 个)")
else:
print(f"ℹ️ 未找到包含 '{content}' 的节点")
except Exception as e:
print(f"❌ 错误: {e}")
finally:
client.disconnect()
if __name__ == "__main__":
import sys
if len(sys.argv) > 1:
# 删除特定内容
content = sys.argv[1]
delete_specific_episode(content)
else:
# 删除所有
print("⚠️ 警告:将删除所有 Episode 节点")
response = input("确认删除?(yes/no): ")
if response.lower() == 'yes':
delete_all_episodes()
else:
print("❌ 已取消")