From e5d6b6979b4b2218d324c8e0af823b758fe6dbe0 Mon Sep 17 00:00:00 2001 From: tt-P607 <68868379+tt-P607@users.noreply.github.com> Date: Tue, 26 Aug 2025 12:07:30 +0800 Subject: [PATCH] =?UTF-8?q?fix(chat):=20=E4=BF=AE=E5=A4=8D=E5=85=B3?= =?UTF-8?q?=E9=94=AE=E8=AF=8D=E9=9D=9E=E5=88=97=E8=A1=A8=E5=BD=A2=E5=BC=8F?= =?UTF-8?q?=E6=97=B6=E5=AF=BC=E8=87=B4=E7=9A=84=E8=A7=A3=E6=9E=90=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在处理记忆关键词时,旧代码使用 `ast.literal_eval` 来解析存储为字符串的关键词列表。当关键词字段为空或格式不正确时,这会引发 `ValueError` 或 `SyntaxError`。 本次修改将解析方式更换为 `json.loads`,并增加了 `try-except` 块来处理可能的 `json.JSONDecodeError`。同时,在添加记忆时,使用 `json.dumps` 来确保关键词列表被正确地序列化为 JSON 字符串,从而保证了数据存储和读取的健壮性和一致性。 --- src/chat/memory_system/instant_memory.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/chat/memory_system/instant_memory.py b/src/chat/memory_system/instant_memory.py index c969c70a7..025c4c680 100644 --- a/src/chat/memory_system/instant_memory.py +++ b/src/chat/memory_system/instant_memory.py @@ -109,7 +109,7 @@ class InstantMemory: memory_id=memory_item.memory_id, chat_id=memory_item.chat_id, memory_text=memory_item.memory_text, - keywords=memory_item.keywords, + keywords=json.dumps(memory_item.keywords, ensure_ascii=False), create_time=memory_item.create_time, last_view_time=memory_item.last_view_time, ) @@ -171,11 +171,10 @@ class InstantMemory: query = session.execute(select(Memory).where(Memory.chat_id == self.chat_id)).scalars() for mem in query: # 对每条记忆 - mem_keywords = mem.keywords or "" - parsed = ast.literal_eval(mem_keywords) - if isinstance(parsed, list): - mem_keywords = [str(k).strip() for k in parsed if str(k).strip()] - else: + mem_keywords_str = mem.keywords or "[]" + try: + mem_keywords = json.loads(mem_keywords_str) + except json.JSONDecodeError: mem_keywords = [] # logger.info(f"mem_keywords: {mem_keywords}") # logger.info(f"keywords_list: {keywords_list}")