feat(memory): 重构记忆系统检索机制并优化召回率
- 实现五阶段检索流程:元数据过滤→向量搜索→语义重排序→上下文过滤→增强重排序 - 添加回退机制保障检索健壮性,当主检索失败时自动降级到文本匹配 - 优化向量相似度阈值配置,提升记忆召回率 - 新增记忆融合候选收集机制,避免重复记忆存储 - 改进记忆格式化器,支持多种展示格式 - 增强向量存储加载和重建逻辑,确保数据持久化 - 优化记忆存储时机,移至回复生成完成后异步执行 - 添加详细的检索调试日志,便于问题排查 - 简化查询规划器提示模板,提升生成效率
This commit is contained in:
99
src/main.py
99
src/main.py
@@ -76,59 +76,78 @@ class MainSystem:
|
||||
|
||||
def signal_handler(signum, frame):
|
||||
logger.info("收到退出信号,正在优雅关闭系统...")
|
||||
self._cleanup()
|
||||
sys.exit(0)
|
||||
|
||||
import asyncio
|
||||
try:
|
||||
loop = asyncio.get_event_loop()
|
||||
if loop.is_running():
|
||||
# 如果事件循环正在运行,创建任务并设置回调
|
||||
async def cleanup_and_exit():
|
||||
await self._async_cleanup()
|
||||
sys.exit(0)
|
||||
|
||||
task = asyncio.create_task(cleanup_and_exit())
|
||||
# 添加任务完成回调,确保程序退出
|
||||
task.add_done_callback(lambda t: None)
|
||||
else:
|
||||
# 如果事件循环未运行,使用同步清理
|
||||
self._cleanup()
|
||||
sys.exit(0)
|
||||
except Exception as e:
|
||||
logger.error(f"信号处理失败: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
signal.signal(signal.SIGTERM, signal_handler)
|
||||
|
||||
def _cleanup(self):
|
||||
"""清理资源"""
|
||||
async def _async_cleanup(self):
|
||||
"""异步清理资源"""
|
||||
try:
|
||||
# 停止消息管理器
|
||||
from src.chat.message_manager import message_manager
|
||||
import asyncio
|
||||
try:
|
||||
from src.chat.message_manager import message_manager
|
||||
await message_manager.stop()
|
||||
logger.info("🛑 消息管理器已停止")
|
||||
except Exception as e:
|
||||
logger.error(f"停止消息管理器时出错: {e}")
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
if loop.is_running():
|
||||
asyncio.create_task(message_manager.stop())
|
||||
else:
|
||||
loop.run_until_complete(message_manager.stop())
|
||||
logger.info("🛑 消息管理器已停止")
|
||||
except Exception as e:
|
||||
logger.error(f"停止消息管理器时出错: {e}")
|
||||
|
||||
try:
|
||||
# 停止消息重组器
|
||||
from src.plugin_system.core.event_manager import event_manager
|
||||
from src.plugin_system import EventType
|
||||
asyncio.run(event_manager.trigger_event(EventType.ON_STOP, permission_group="SYSTEM"))
|
||||
|
||||
from src.utils.message_chunker import reassembler
|
||||
try:
|
||||
from src.plugin_system.core.event_manager import event_manager
|
||||
from src.plugin_system import EventType
|
||||
from src.utils.message_chunker import reassembler
|
||||
|
||||
await event_manager.trigger_event(EventType.ON_STOP, permission_group="SYSTEM")
|
||||
await reassembler.stop_cleanup_task()
|
||||
logger.info("🛑 消息重组器已停止")
|
||||
except Exception as e:
|
||||
logger.error(f"停止消息重组器时出错: {e}")
|
||||
|
||||
# 停止增强记忆系统
|
||||
try:
|
||||
if global_config.memory.enable_memory:
|
||||
await self.enhanced_memory_manager.shutdown()
|
||||
logger.info("🛑 增强记忆系统已停止")
|
||||
except Exception as e:
|
||||
logger.error(f"停止增强记忆系统时出错: {e}")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"异步清理资源时出错: {e}")
|
||||
|
||||
def _cleanup(self):
|
||||
"""同步清理资源(向后兼容)"""
|
||||
import asyncio
|
||||
|
||||
try:
|
||||
loop = asyncio.get_event_loop()
|
||||
if loop.is_running():
|
||||
asyncio.create_task(reassembler.stop_cleanup_task())
|
||||
# 如果循环正在运行,创建异步清理任务
|
||||
asyncio.create_task(self._async_cleanup())
|
||||
else:
|
||||
loop.run_until_complete(reassembler.stop_cleanup_task())
|
||||
logger.info("🛑 消息重组器已停止")
|
||||
# 如果循环未运行,直接运行异步清理
|
||||
loop.run_until_complete(self._async_cleanup())
|
||||
except Exception as e:
|
||||
logger.error(f"停止消息重组器时出错: {e}")
|
||||
|
||||
|
||||
try:
|
||||
# 停止增强记忆系统
|
||||
if global_config.memory.enable_memory:
|
||||
import asyncio
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
if loop.is_running():
|
||||
asyncio.create_task(self.enhanced_memory_manager.shutdown())
|
||||
else:
|
||||
loop.run_until_complete(self.enhanced_memory_manager.shutdown())
|
||||
logger.info("🛑 增强记忆系统已停止")
|
||||
except Exception as e:
|
||||
logger.error(f"停止增强记忆系统时出错: {e}")
|
||||
logger.error(f"同步清理资源时出错: {e}")
|
||||
|
||||
async def _message_process_wrapper(self, message_data: Dict[str, Any]):
|
||||
"""并行处理消息的包装器"""
|
||||
|
||||
Reference in New Issue
Block a user