From 134000996b7b3592ec8378e67e8617e573b09999 Mon Sep 17 00:00:00 2001 From: Sakura-RanChen <1908198662@qq.com> Date: Fri, 9 Jan 2026 16:09:05 +0800 Subject: [PATCH] =?UTF-8?q?query=E5=8F=AA=E4=BC=A0=E9=80=92=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9A=84=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 | 12 +++++++++++- .../core/providers/memory/powermem/powermem.py | 18 +++++++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py b/main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py index 7156ab72..a7efc36e 100644 --- a/main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py +++ b/main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py @@ -1,3 +1,4 @@ +import json import traceback from ..base import MemoryProviderBase, logger @@ -56,7 +57,16 @@ class MemoryProvider(MemoryProviderBase): filters = {"user_id": self.role_id} - results = self.client.search(query, filters=filters) + search_query = query + try: + if query.strip().startswith("{") and query.strip().endswith("}"): + data = json.loads(query) + if "content" in data: + search_query = data["content"] + except (json.JSONDecodeError, KeyError): + pass + + results = self.client.search(search_query, filters=filters) if not results or "results" not in results: return "" diff --git a/main/xiaozhi-server/core/providers/memory/powermem/powermem.py b/main/xiaozhi-server/core/providers/memory/powermem/powermem.py index c33c58da..dc1853f7 100644 --- a/main/xiaozhi-server/core/providers/memory/powermem/powermem.py +++ b/main/xiaozhi-server/core/providers/memory/powermem/powermem.py @@ -11,6 +11,7 @@ """ import asyncio +import json import traceback from typing import Optional, Dict, Any @@ -207,7 +208,7 @@ class MemoryProvider(MemoryProviderBase): Query memories from PowerMem based on similarity search. Args: - query: The search query string + query: The search query string (may be JSON format with metadata) Returns: Formatted string of relevant memories or empty string if none found @@ -221,6 +222,17 @@ class MemoryProvider(MemoryProviderBase): logger.bind(tag=TAG).debug("No role_id set, returning empty memory") return "" + # Extract content from JSON format if present (for ASR with emotion/language tags) + search_query = query + try: + if query.strip().startswith("{") and query.strip().endswith("}"): + data = json.loads(query) + if "content" in data: + search_query = data["content"] + except (json.JSONDecodeError, KeyError): + # If parsing fails, use original query + pass + result_parts = [] # If user profile mode is enabled, include user profile in results @@ -234,14 +246,14 @@ class MemoryProvider(MemoryProviderBase): # UserMemory uses sync search results = await asyncio.to_thread( self.memory_client.search, - query=query, + query=search_query, user_id=self.role_id, limit=30 ) else: # AsyncMemory uses async search results = await self.memory_client.search( - query=query, + query=search_query, user_id=self.role_id, limit=30 )