You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

150 lines
4.3 KiB

#!/usr/bin/env python3
"""
mem0 OpenClaw Commands
处理 /memory 命令
"""
import os
import sys
# 设置环境变量
os.environ['OPENAI_API_BASE'] = 'https://dashscope.aliyuncs.com/compatible-mode/v1'
os.environ['OPENAI_API_KEY'] = 'sk-c1715ee0479841399fd359c574647648'
sys.path.insert(0, os.path.dirname(__file__))
from mem0_client import Mem0Client
# 初始化客户端
mem0 = Mem0Client()
def handle_memory_command(args: str, context: dict) -> str:
"""
处理 /memory 命令
Args:
args: 命令参数
context: 上下文信息 (user_id, agent_id 等)
Returns:
回复文本
"""
parts = args.split(' ', 2)
action = parts[0] if parts else 'help'
user_id = context.get('user_id', 'default')
agent_id = context.get('agent_id', 'main')
if action == 'add':
content = parts[1] if len(parts) > 1 else ''
return handle_add(content, user_id, agent_id)
elif action == 'search':
query = parts[1] if len(parts) > 1 else ''
return handle_search(query, user_id, agent_id)
elif action == 'list':
return handle_list(user_id, agent_id)
elif action == 'delete':
memory_id = parts[1] if len(parts) > 1 else ''
return handle_delete(memory_id, user_id, agent_id)
elif action == 'status':
return handle_status()
else:
return get_help()
def handle_add(content: str, user_id: str, agent_id: str) -> str:
"""添加记忆"""
if not content:
return "❌ 请提供记忆内容\n\n用法:/memory add <内容>"
result = mem0.add([{"role": "user", "content": content}], user_id=user_id)
if result and 'error' in result:
return f"❌ 添加失败:{result['error']}"
return f"✅ 记忆已添加\n\n📝 内容:{content[:200]}..."
def handle_search(query: str, user_id: str, agent_id: str) -> str:
"""搜索记忆"""
if not query:
return "❌ 请提供搜索关键词\n\n用法:/memory search <关键词>"
results = mem0.search(query, user_id=user_id, limit=5)
if not results:
return f"🔍 未找到与 \"{query}\" 相关的记忆"
response = f"🔍 找到 {len(results)} 条相关记忆:\n\n"
for i, mem in enumerate(results, 1):
memory_text = mem.get('memory', 'N/A')
response += f"{i}. {memory_text}\n"
if mem.get('created_at'):
response += f" 📅 {mem['created_at']}\n"
response += "\n"
return response
def handle_list(user_id: str, agent_id: str) -> str:
"""列出所有记忆"""
results = mem0.get_all(user_id=user_id)
if not results:
return "📭 暂无记忆"
response = f"📋 共 {len(results)} 条记忆:\n\n"
for i, mem in enumerate(results[:20], 1):
memory_text = mem.get('memory', 'N/A')
truncated = memory_text[:100] + '...' if len(memory_text) > 100 else memory_text
response += f"{i}. {truncated}\n"
response += f" 🆔 {mem.get('id', 'N/A')}\n\n"
if len(results) > 20:
response += f"... 还有 {len(results) - 20} 条记忆\n"
return response
def handle_delete(memory_id: str, user_id: str, agent_id: str) -> str:
"""删除记忆"""
if not memory_id:
return "❌ 请提供记忆 ID\n\n用法:/memory delete <ID>"
success = mem0.delete(memory_id, user_id=user_id)
if success:
return f"✅ 记忆已删除:{memory_id}"
else:
return f"❌ 删除失败:记忆不存在或权限不足"
def handle_status() -> str:
"""查看状态"""
status = mem0.get_status()
response = "📊 mem0 状态:\n\n"
response += f"本地记忆:{'' if status['initialized'] else ''}\n"
response += f"Qdrant 地址:{status['qdrant']}\n"
return response
def get_help() -> str:
"""获取帮助文本"""
return """📖 mem0 记忆管理命令
用法:/memory <命令> [参数]
可用命令:
add <内容> - 添加记忆
search <关键词> - 搜索记忆
list - 列出所有记忆
delete <ID> - 删除记忆
status - 查看状态
help - 显示帮助
示例:
/memory add 用户偏好使用 UTC 时区
/memory search 时区
/memory list
/memory status"""
# 测试
if __name__ == '__main__':
print("测试 /memory 命令...")
print(handle_status())