From f4b977fa20549048770fea4583bec77152b15c10 Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Sun, 28 Sep 2025 14:13:43 +0800 Subject: [PATCH] Update Memory_chest.py --- src/chat/memory_system/Memory_chest.py | 62 +++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/src/chat/memory_system/Memory_chest.py b/src/chat/memory_system/Memory_chest.py index 98cca601..d0435a97 100644 --- a/src/chat/memory_system/Memory_chest.py +++ b/src/chat/memory_system/Memory_chest.py @@ -1,3 +1,4 @@ +import asyncio import json import re @@ -295,10 +296,12 @@ class MemoryChest: """ try: # 生成标题 + title = "" title_prompt = f""" 请为以下内容生成一个描述全面的标题,要求描述内容的主要概念和事件: {content} +标题不要分点,不要换行,不要输出其他内容 请只输出标题,不要输出其他内容: """ @@ -309,6 +312,9 @@ class MemoryChest: title, (reasoning_content, model_name, tool_calls) = await self.LLMRequest_build.generate_response_async(title_prompt) + + await asyncio.sleep(0.5) + if title: # 保存到数据库 MemoryChestModel.create( @@ -480,7 +486,7 @@ class MemoryChest: try: content = "" for memory in memory_list: - content += f"{memory.content}\n" + content += f"{memory}\n" prompt = f""" 以下是多段记忆内容,请将它们合并成一段记忆: @@ -498,9 +504,61 @@ class MemoryChest: merged_memory, (reasoning_content, model_name, tool_calls) = await self.LLMRequest_build.generate_response_async(prompt) - return merged_memory + # 生成合并后的标题 + merged_title = await self._generate_title_for_merged_memory(merged_memory) + + # 保存合并后的记忆到数据库 + MemoryChestModel.create( + title=merged_title, + content=merged_memory + ) + + logger.info(f"合并记忆已保存: {merged_title}") + + return merged_title, merged_memory except Exception as e: logger.error(f"合并记忆时出错: {e}") + return "", "" + + async def _generate_title_for_merged_memory(self, merged_content: str) -> str: + """ + 为合并后的记忆生成标题 + + Args: + merged_content: 合并后的记忆内容 + + Returns: + str: 生成的标题 + """ + try: + prompt = f""" +请为以下内容生成一个描述全面的标题,要求描述内容的主要概念和事件: +{merged_content} + +标题不要分点,不要换行,不要输出其他内容 +请只输出标题,不要输出其他内容: +""" + + if global_config.debug.show_prompt: + logger.info(f"生成合并记忆标题 prompt: {prompt}") + else: + logger.debug(f"生成合并记忆标题 prompt: {prompt}") + + title_response, (reasoning_content, model_name, tool_calls) = await self.LLMRequest.generate_response_async(prompt) + + # 清理标题,移除可能的引号或多余字符 + title = title_response.strip().strip('"').strip("'").strip() + + if title: + logger.info(f"生成合并记忆标题: {title}") + return title + else: + logger.warning("生成合并记忆标题失败,使用默认标题") + return f"合并记忆_{int(time.time())}" + + except Exception as e: + logger.error(f"生成合并记忆标题时出错: {e}") + return f"合并记忆_{int(time.time())}" global_memory_chest = MemoryChest() \ No newline at end of file