refactor(core): 延迟初始化知识库并优化导入结构
将LPMM知识库的初始化逻辑封装到`initialize_lpmm_knowledge`函数中,并将其调用移至`main.py`,以实现延迟加载并改善启动流程。 为了解决循环导入问题,将`component_registry`的导入移至`BaseAction.call`方法内部。
This commit is contained in:
@@ -30,50 +30,55 @@ DATA_PATH = os.path.join(ROOT_PATH, "data")
|
|||||||
qa_manager = None
|
qa_manager = None
|
||||||
inspire_manager = None
|
inspire_manager = None
|
||||||
|
|
||||||
# 检查LPMM知识库是否启用
|
|
||||||
if global_config.lpmm_knowledge.enable:
|
|
||||||
logger.info("正在初始化Mai-LPMM")
|
|
||||||
logger.info("创建LLM客户端")
|
|
||||||
|
|
||||||
# 初始化Embedding库
|
def initialize_lpmm_knowledge():
|
||||||
embed_manager = EmbeddingManager()
|
"""初始化LPMM知识库"""
|
||||||
logger.info("正在从文件加载Embedding库")
|
global qa_manager, inspire_manager
|
||||||
try:
|
|
||||||
embed_manager.load_from_file()
|
|
||||||
except Exception as e:
|
|
||||||
logger.warning(f"此消息不会影响正常使用:从文件加载Embedding库时,{e}")
|
|
||||||
# logger.warning("如果你是第一次导入知识,或者还未导入知识,请忽略此错误")
|
|
||||||
logger.info("Embedding库加载完成")
|
|
||||||
# 初始化KG
|
|
||||||
kg_manager = KGManager()
|
|
||||||
logger.info("正在从文件加载KG")
|
|
||||||
try:
|
|
||||||
kg_manager.load_from_file()
|
|
||||||
except Exception as e:
|
|
||||||
logger.warning(f"此消息不会影响正常使用:从文件加载KG时,{e}")
|
|
||||||
# logger.warning("如果你是第一次导入知识,或者还未导入知识,请忽略此错误")
|
|
||||||
logger.info("KG加载完成")
|
|
||||||
|
|
||||||
logger.info(f"KG节点数量:{len(kg_manager.graph.get_node_list())}")
|
# 检查LPMM知识库是否启用
|
||||||
logger.info(f"KG边数量:{len(kg_manager.graph.get_edge_list())}")
|
if global_config.lpmm_knowledge.enable:
|
||||||
|
logger.info("正在初始化Mai-LPMM")
|
||||||
|
logger.info("创建LLM客户端")
|
||||||
|
|
||||||
# 数据比对:Embedding库与KG的段落hash集合
|
# 初始化Embedding库
|
||||||
for pg_hash in kg_manager.stored_paragraph_hashes:
|
embed_manager = EmbeddingManager()
|
||||||
key = f"paragraph-{pg_hash}"
|
logger.info("正在从文件加载Embedding库")
|
||||||
if key not in embed_manager.stored_pg_hashes:
|
try:
|
||||||
logger.warning(f"KG中存在Embedding库中不存在的段落:{key}")
|
embed_manager.load_from_file()
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f"此消息不会影响正常使用:从文件加载Embedding库时,{e}")
|
||||||
|
# logger.warning("如果你是第一次导入知识,或者还未导入知识,请忽略此错误")
|
||||||
|
logger.info("Embedding库加载完成")
|
||||||
|
# 初始化KG
|
||||||
|
kg_manager = KGManager()
|
||||||
|
logger.info("正在从文件加载KG")
|
||||||
|
try:
|
||||||
|
kg_manager.load_from_file()
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f"此消息不会影响正常使用:从文件加载KG时,{e}")
|
||||||
|
# logger.warning("如果你是第一次导入知识,或者还未导入知识,请忽略此错误")
|
||||||
|
logger.info("KG加载完成")
|
||||||
|
|
||||||
# 问答系统(用于知识库)
|
logger.info(f"KG节点数量:{len(kg_manager.graph.get_node_list())}")
|
||||||
qa_manager = QAManager(
|
logger.info(f"KG边数量:{len(kg_manager.graph.get_edge_list())}")
|
||||||
embed_manager,
|
|
||||||
kg_manager,
|
|
||||||
)
|
|
||||||
|
|
||||||
# # 记忆激活(用于记忆库)
|
# 数据比对:Embedding库与KG的段落hash集合
|
||||||
# inspire_manager = MemoryActiveManager(
|
for pg_hash in kg_manager.stored_paragraph_hashes:
|
||||||
# embed_manager,
|
key = f"paragraph-{pg_hash}"
|
||||||
# llm_client_list[global_config["embedding"]["provider"]],
|
if key not in embed_manager.stored_pg_hashes:
|
||||||
# )
|
logger.warning(f"KG中存在Embedding库中不存在的段落:{key}")
|
||||||
else:
|
|
||||||
logger.info("LPMM知识库已禁用,跳过初始化")
|
# 问答系统(用于知识库)
|
||||||
# 创建空的占位符对象,避免导入错误
|
qa_manager = QAManager(
|
||||||
|
embed_manager,
|
||||||
|
kg_manager,
|
||||||
|
)
|
||||||
|
|
||||||
|
# # 记忆激活(用于记忆库)
|
||||||
|
# inspire_manager = MemoryActiveManager(
|
||||||
|
# embed_manager,
|
||||||
|
# llm_client_list[global_config["embedding"]["provider"]],
|
||||||
|
# )
|
||||||
|
else:
|
||||||
|
logger.info("LPMM知识库已禁用,跳过初始化")
|
||||||
|
# 创建空的占位符对象,避免导入错误
|
||||||
|
|||||||
@@ -116,9 +116,9 @@ class MainSystem:
|
|||||||
# 停止消息重组器
|
# 停止消息重组器
|
||||||
from src.plugin_system.core.event_manager import event_manager
|
from src.plugin_system.core.event_manager import event_manager
|
||||||
from src.plugin_system import EventType
|
from src.plugin_system import EventType
|
||||||
|
import asyncio
|
||||||
asyncio.run(event_manager.trigger_event(EventType.ON_STOP,permission_group="SYSTEM"))
|
asyncio.run(event_manager.trigger_event(EventType.ON_STOP,permission_group="SYSTEM"))
|
||||||
from src.utils.message_chunker import reassembler
|
from src.utils.message_chunker import reassembler
|
||||||
import asyncio
|
|
||||||
|
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
if loop.is_running():
|
if loop.is_running():
|
||||||
@@ -250,6 +250,11 @@ MoFox_Bot(第三方修改版)
|
|||||||
self.hippocampus_manager.initialize()
|
self.hippocampus_manager.initialize()
|
||||||
logger.info("记忆系统初始化成功")
|
logger.info("记忆系统初始化成功")
|
||||||
|
|
||||||
|
# 初始化LPMM知识库
|
||||||
|
from src.chat.knowledge.knowledge_lib import initialize_lpmm_knowledge
|
||||||
|
initialize_lpmm_knowledge()
|
||||||
|
logger.info("LPMM知识库初始化成功")
|
||||||
|
|
||||||
# 初始化异步记忆管理器
|
# 初始化异步记忆管理器
|
||||||
try:
|
try:
|
||||||
from src.chat.memory_system.async_memory_optimizer import async_memory_manager
|
from src.chat.memory_system.async_memory_optimizer import async_memory_manager
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from src.common.logger import get_logger
|
|||||||
from src.chat.message_receive.chat_stream import ChatStream
|
from src.chat.message_receive.chat_stream import ChatStream
|
||||||
from src.plugin_system.base.component_types import ActionActivationType, ChatMode, ActionInfo, ComponentType, ChatType
|
from src.plugin_system.base.component_types import ActionActivationType, ChatMode, ActionInfo, ComponentType, ChatType
|
||||||
from src.plugin_system.apis import send_api, database_api, message_api
|
from src.plugin_system.apis import send_api, database_api, message_api
|
||||||
from src.plugin_system.core.component_registry import component_registry
|
|
||||||
|
|
||||||
|
|
||||||
logger = get_logger("base_action")
|
logger = get_logger("base_action")
|
||||||
@@ -397,6 +396,7 @@ class BaseAction(ABC):
|
|||||||
logger.info(f"{log_prefix} 尝试调用Action: {action_name}")
|
logger.info(f"{log_prefix} 尝试调用Action: {action_name}")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
from src.plugin_system.core.component_registry import component_registry
|
||||||
# 1. 从注册中心获取Action类
|
# 1. 从注册中心获取Action类
|
||||||
action_class = component_registry.get_component_class(action_name, ComponentType.ACTION)
|
action_class = component_registry.get_component_class(action_name, ComponentType.ACTION)
|
||||||
if not action_class:
|
if not action_class:
|
||||||
|
|||||||
Reference in New Issue
Block a user