diff --git a/src/chat/knowledge/__init__.py b/src/chat/knowledge/__init__.py index e69de29b..38f88e10 100644 --- a/src/chat/knowledge/__init__.py +++ b/src/chat/knowledge/__init__.py @@ -0,0 +1,82 @@ +from src.chat.knowledge.embedding_store import EmbeddingManager +from src.chat.knowledge.qa_manager import QAManager +from src.chat.knowledge.kg_manager import KGManager +from src.chat.knowledge.global_logger import logger +from src.config.config import global_config +import os + +INVALID_ENTITY = [ + "", + "你", + "他", + "她", + "它", + "我们", + "你们", + "他们", + "她们", + "它们", +] + +RAG_GRAPH_NAMESPACE = "rag-graph" +RAG_ENT_CNT_NAMESPACE = "rag-ent-cnt" +RAG_PG_HASH_NAMESPACE = "rag-pg-hash" + + +ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "..")) +DATA_PATH = os.path.join(ROOT_PATH, "data") + + +qa_manager = None +inspire_manager = None + +def lpmm_start_up(): # sourcery skip: extract-duplicate-method + # 检查LPMM知识库是否启用 + if global_config.lpmm_knowledge.enable: + logger.info("正在初始化Mai-LPMM") + logger.info("创建LLM客户端") + + # 初始化Embedding库 + embed_manager = EmbeddingManager() + logger.info("正在从文件加载Embedding库") + 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())}") + logger.info(f"KG边数量:{len(kg_manager.graph.get_edge_list())}") + + # 数据比对:Embedding库与KG的段落hash集合 + for pg_hash in kg_manager.stored_paragraph_hashes: + # 使用与EmbeddingStore中一致的命名空间格式 + key = f"paragraph-{pg_hash}" + if key not in embed_manager.stored_pg_hashes: + logger.warning(f"KG中存在Embedding库中不存在的段落:{key}") + global qa_manager + # 问答系统(用于知识库) + qa_manager = QAManager( + embed_manager, + kg_manager, + ) + + # # 记忆激活(用于记忆库) + # global inspire_manager + # inspire_manager = MemoryActiveManager( + # embed_manager, + # llm_client_list[global_config["embedding"]["provider"]], + # ) + else: + logger.info("LPMM知识库已禁用,跳过初始化") + # 创建空的占位符对象,避免导入错误 diff --git a/src/chat/knowledge/ie_process.py b/src/chat/knowledge/ie_process.py index 340a678d..4f7bb68a 100644 --- a/src/chat/knowledge/ie_process.py +++ b/src/chat/knowledge/ie_process.py @@ -5,7 +5,7 @@ from typing import List, Union from .global_logger import logger from . import prompt_template -from .knowledge_lib import INVALID_ENTITY +from . import INVALID_ENTITY from src.llm_models.utils_model import LLMRequest from json_repair import repair_json diff --git a/src/chat/knowledge/knowledge_lib.py b/src/chat/knowledge/knowledge_lib.py deleted file mode 100644 index f3e6eca6..00000000 --- a/src/chat/knowledge/knowledge_lib.py +++ /dev/null @@ -1,80 +0,0 @@ -from src.chat.knowledge.embedding_store import EmbeddingManager -from src.chat.knowledge.qa_manager import QAManager -from src.chat.knowledge.kg_manager import KGManager -from src.chat.knowledge.global_logger import logger -from src.config.config import global_config -import os - -INVALID_ENTITY = [ - "", - "你", - "他", - "她", - "它", - "我们", - "你们", - "他们", - "她们", - "它们", -] - -RAG_GRAPH_NAMESPACE = "rag-graph" -RAG_ENT_CNT_NAMESPACE = "rag-ent-cnt" -RAG_PG_HASH_NAMESPACE = "rag-pg-hash" - - -ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "..")) -DATA_PATH = os.path.join(ROOT_PATH, "data") - - -qa_manager = None -inspire_manager = None - -# 检查LPMM知识库是否启用 -if global_config.lpmm_knowledge.enable: - logger.info("正在初始化Mai-LPMM") - logger.info("创建LLM客户端") - - # 初始化Embedding库 - embed_manager = EmbeddingManager() - logger.info("正在从文件加载Embedding库") - 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())}") - logger.info(f"KG边数量:{len(kg_manager.graph.get_edge_list())}") - - # 数据比对:Embedding库与KG的段落hash集合 - for pg_hash in kg_manager.stored_paragraph_hashes: - # 使用与EmbeddingStore中一致的命名空间格式 - key = f"paragraph-{pg_hash}" - if key not in embed_manager.stored_pg_hashes: - logger.warning(f"KG中存在Embedding库中不存在的段落:{key}") - - # 问答系统(用于知识库) - qa_manager = QAManager( - embed_manager, - kg_manager, - ) - - # # 记忆激活(用于记忆库) - # inspire_manager = MemoryActiveManager( - # embed_manager, - # llm_client_list[global_config["embedding"]["provider"]], - # ) -else: - logger.info("LPMM知识库已禁用,跳过初始化") - # 创建空的占位符对象,避免导入错误 diff --git a/src/chat/knowledge/open_ie.py b/src/chat/knowledge/open_ie.py index 90977fb8..b7ad2060 100644 --- a/src/chat/knowledge/open_ie.py +++ b/src/chat/knowledge/open_ie.py @@ -4,7 +4,7 @@ import glob from typing import Any, Dict, List -from .knowledge_lib import INVALID_ENTITY, ROOT_PATH, DATA_PATH +from . import INVALID_ENTITY, ROOT_PATH, DATA_PATH # from src.manager.local_store_manager import local_storage diff --git a/src/main.py b/src/main.py index f7d1bc76..c009343b 100644 --- a/src/main.py +++ b/src/main.py @@ -13,6 +13,7 @@ from src.common.logger import get_logger from src.individuality.individuality import get_individuality, Individuality from src.common.server import get_global_server, Server from src.mood.mood_manager import mood_manager +from src.chat.knowledge import lpmm_start_up from rich.traceback import install from src.migrate_helper.migrate import check_and_run_migrations # from src.api.main import start_api_server @@ -83,6 +84,9 @@ class MainSystem: # 启动API服务器 # start_api_server() # logger.info("API服务器启动成功") + + # 启动LPMM + lpmm_start_up() # 加载所有actions,包括默认的和插件的 plugin_manager.load_all_plugins() @@ -96,7 +100,6 @@ class MainSystem: logger.info("情绪管理器初始化成功") # 初始化聊天管理器 - await get_chat_manager()._initialize() asyncio.create_task(get_chat_manager()._auto_save_task()) diff --git a/src/person_info/relationship_manager.py b/src/person_info/relationship_manager.py index 0b5da6d5..151446b6 100644 --- a/src/person_info/relationship_manager.py +++ b/src/person_info/relationship_manager.py @@ -207,7 +207,8 @@ class RelationshipManager: try: user_id = msg.user_info.user_id platform = msg.chat_info.platform - assert isinstance(user_id, str) and isinstance(platform, str) + assert user_id, "用户ID不能为空" + assert platform, "平台不能为空" msg_person = Person(user_id=user_id, platform=platform) except Exception as e: diff --git a/src/plugins/built_in/knowledge/lpmm_get_knowledge.py b/src/plugins/built_in/knowledge/lpmm_get_knowledge.py index fd3d811b..fcbdc918 100644 --- a/src/plugins/built_in/knowledge/lpmm_get_knowledge.py +++ b/src/plugins/built_in/knowledge/lpmm_get_knowledge.py @@ -2,7 +2,7 @@ from typing import Dict, Any from src.common.logger import get_logger from src.config.config import global_config -from src.chat.knowledge.knowledge_lib import qa_manager +from src.chat.knowledge import qa_manager from src.plugin_system import BaseTool, ToolParamType logger = get_logger("lpmm_get_knowledge_tool")