使用mem0ai api实现记忆功能

This commit is contained in:
玄凤科技
2025-03-03 15:00:04 +08:00
parent effd79b465
commit f2e68060de
7 changed files with 151 additions and 7 deletions
+22 -3
View File
@@ -23,7 +23,7 @@ TAG = __name__
class ConnectionHandler:
def __init__(self, config: Dict[str, Any], _vad, _asr, _llm, _tts, _music):
def __init__(self, config: Dict[str, Any], _vad, _asr, _llm, _tts, _music, _memory):
self.config = config
self.logger = setup_logging()
self.auth = AuthMiddleware(config)
@@ -50,7 +50,7 @@ class ConnectionHandler:
self.asr = _asr
self.llm = _llm
self.tts = _tts
self.dialogue = None
self.memory = _memory
# vad相关变量
self.client_audio_buffer = bytes()
@@ -99,6 +99,7 @@ class ConnectionHandler:
await self.auth.authenticate(self.headers)
device_id = self.headers.get("device-id", None)
self.memory.set_role_id(device_id)
# Load private configuration if device_id is provided
bUsePrivateConfig = self.config.get("use_private_config", False)
@@ -161,6 +162,8 @@ class ConnectionHandler:
self.logger.bind(tag=TAG).error(f"Connection error: {str(e)}-{stack_trace}")
await ws.close()
return
finally:
await self.memory.save_memory(self.dialogue.dialogue)
async def _route_message(self, message):
"""消息路由"""
@@ -199,6 +202,15 @@ class ConnectionHandler:
return False
return not self.is_device_verified
def async_run(self, coro):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
try:
return loop.run_until_complete(coro)
finally:
loop.close()
def chat(self, query):
if self.isNeedAuth():
self.llm_finish_task = True
@@ -215,7 +227,14 @@ class ConnectionHandler:
processed_chars = 0 # 跟踪已处理的字符位置
try:
start_time = time.time()
llm_responses = self.llm.response(self.session_id, self.dialogue.get_llm_dialogue())
# 使用带记忆的对话
memory_str = self.async_run(self.memory.query_memory(query))
self.logger.bind(tag=TAG).info(f"记忆内容: {memory_str}")
llm_responses = self.llm.response(
self.session_id,
self.dialogue.get_llm_dialogue_with_memory(memory_str)
)
except Exception as e:
self.logger.bind(tag=TAG).error(f"LLM 处理出错 {query}: {e}")
return None