38 lines
1.4 KiB
Python
38 lines
1.4 KiB
Python
from typing import Any, Dict
|
|
from langchain_core.runnables.config import RunnableConfig
|
|
from ..graph.state import MessagesState
|
|
from ..memory.mem0_client import Mem0Client
|
|
from ..logger import info
|
|
|
|
# 全局变量,在 GraphBuilder 中注入
|
|
_mem0_client: Mem0Client = None
|
|
|
|
def set_mem0_client(client: Mem0Client):
|
|
global _mem0_client
|
|
_mem0_client = client
|
|
|
|
async def memory_trigger_node(state: MessagesState, config: RunnableConfig) -> Dict[str, Any]:
|
|
"""检测用户消息中的记忆指令,若命中则主动调用 Mem0 存储"""
|
|
if _mem0_client is None:
|
|
return {}
|
|
|
|
messages = state.get("messages", [])
|
|
if not messages:
|
|
return {}
|
|
|
|
last_msg = messages[-1]
|
|
content = last_msg.content if hasattr(last_msg, 'content') else str(last_msg)
|
|
|
|
# 触发词(可自行扩展)
|
|
trigger_words = ["记住", "记下", "保存", "备忘", "记录下", "别忘了"]
|
|
if any(word in content for word in trigger_words):
|
|
user_id = config.get("metadata", {}).get("user_id", "default_user")
|
|
# 确保 Mem0 已初始化
|
|
if not _mem0_client._initialized:
|
|
await _mem0_client.initialize()
|
|
# 将用户消息作为事实来源提交给 Mem0
|
|
info(f"📌 检测到记忆指令,已主动触发 Mem0 存储")
|
|
mem0_messages = [{"role": "user", "content": content}]
|
|
await _mem0_client.add_memories(mem0_messages, user_id=user_id)
|
|
|
|
return {} # 不修改状态 |