From 3bdccfea62f7347abbb0d4af3c9d147cd0be5d43 Mon Sep 17 00:00:00 2001 From: Sakura-RanChen <1908198662@qq.com> Date: Mon, 12 Jan 2026 17:47:29 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E6=9E=90json=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E4=B8=B2=E6=8F=90=E5=8F=96=E7=9B=B8=E5=85=B3=E6=96=87=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/providers/memory/mem0ai/mem0ai.py | 25 +++++++++++++++---- .../memory/mem_local_short/mem_local_short.py | 16 ++++++++++-- .../providers/memory/powermem/powermem.py | 24 ++++++++++++++---- 3 files changed, 53 insertions(+), 12 deletions(-) diff --git a/main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py b/main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py index a7efc36e..80dbfeb5 100644 --- a/main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py +++ b/main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py @@ -37,11 +37,26 @@ class MemoryProvider(MemoryProviderBase): try: # Format the content as a message list for mem0 - messages = [ - {"role": message.role, "content": message.content} - for message in msgs - if message.role != "system" - ] + messages = [] + for message in msgs: + if message.role == "system": + continue + + content = message.content + + # Extract content from JSON format if present (for ASR with emotion/language tags) + # Same logic as in query_memory method + try: + if content and content.strip().startswith("{") and content.strip().endswith("}"): + data = json.loads(content) + if "content" in data: + content = data["content"] + except (json.JSONDecodeError, KeyError, TypeError): + # If parsing fails, use original content + pass + + messages.append({"role": message.role, "content": content}) + result = self.client.add(messages, user_id=self.role_id) logger.bind(tag=TAG).debug(f"Save memory result: {result}") except Exception as e: diff --git a/main/xiaozhi-server/core/providers/memory/mem_local_short/mem_local_short.py b/main/xiaozhi-server/core/providers/memory/mem_local_short/mem_local_short.py index 5904d440..bf43d629 100644 --- a/main/xiaozhi-server/core/providers/memory/mem_local_short/mem_local_short.py +++ b/main/xiaozhi-server/core/providers/memory/mem_local_short/mem_local_short.py @@ -149,10 +149,22 @@ class MemoryProvider(MemoryProviderBase): msgStr = "" for msg in msgs: + content = msg.content + + # Extract content from JSON format if present (for ASR with emotion/language tags) + try: + if content and content.strip().startswith("{") and content.strip().endswith("}"): + data = json.loads(content) + if "content" in data: + content = data["content"] + except (json.JSONDecodeError, KeyError, TypeError): + # If parsing fails, use original content + pass + if msg.role == "user": - msgStr += f"User: {msg.content}\n" + msgStr += f"User: {content}\n" elif msg.role == "assistant": - msgStr += f"Assistant: {msg.content}\n" + msgStr += f"Assistant: {content}\n" if self.short_memory and len(self.short_memory) > 0: msgStr += "历史记忆:\n" msgStr += self.short_memory diff --git a/main/xiaozhi-server/core/providers/memory/powermem/powermem.py b/main/xiaozhi-server/core/providers/memory/powermem/powermem.py index 28b78f8f..5c453c07 100644 --- a/main/xiaozhi-server/core/providers/memory/powermem/powermem.py +++ b/main/xiaozhi-server/core/providers/memory/powermem/powermem.py @@ -173,11 +173,25 @@ class MemoryProvider(MemoryProviderBase): try: # Format the content as a message list for PowerMem - messages = [ - {"role": message.role, "content": message.content} - for message in msgs - if message.role != "system" - ] + messages = [] + for message in msgs: + if message.role == "system": + continue + + content = message.content + + # Extract content from JSON format if present (for ASR with emotion/language tags) + # Same logic as in query_memory method + try: + if content and content.strip().startswith("{") and content.strip().endswith("}"): + data = json.loads(content) + if "content" in data: + content = data["content"] + except (json.JSONDecodeError, KeyError, TypeError): + # If parsing fails, use original content + pass + + messages.append({"role": message.role, "content": content}) # Add memory using PowerMem SDK result = self.memory_client.add(