From 86b76496f62fa4ae3ee336d4a277777ab17fb0bd Mon Sep 17 00:00:00 2001 From: NepPure Date: Sun, 2 Mar 2025 10:54:31 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E7=BB=9F=E4=B8=80database=20config,?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D.env?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bot.py | 13 ++++++++ config/bot_config_toml | 8 ----- src/plugins/chat/__init__.py | 9 +++-- src/plugins/chat/config.py | 33 ++----------------- src/plugins/chat/llm_generator.py | 6 ---- src/plugins/chat/prompt_builder.py | 6 ---- src/plugins/chat/utils_image.py | 12 +++---- src/plugins/knowledege/knowledge_library.py | 9 +++-- src/plugins/memory_system/draw_memory.py | 10 ++++-- src/plugins/memory_system/llm_module.py | 4 --- .../memory_system/llm_module_memory_make.py | 14 -------- src/plugins/memory_system/memory_make.py | 23 ++++--------- src/plugins/schedule/schedule_generator.py | 13 -------- src/plugins/schedule/schedule_llm_module.py | 4 --- 14 files changed, 46 insertions(+), 118 deletions(-) diff --git a/bot.py b/bot.py index f9544f404..fca7bc5a4 100644 --- a/bot.py +++ b/bot.py @@ -1,5 +1,8 @@ +import os import nonebot from nonebot.adapters.onebot.v11 import Adapter +from dotenv import load_dotenv +from loguru import logger # 初始化 NoneBot nonebot.init( @@ -19,4 +22,14 @@ driver.register_adapter(Adapter) nonebot.load_plugins("src/plugins") if __name__ == "__main__": + # 加载全局环境变量 + root_dir = os.path.dirname(os.path.abspath(__file__)) + env_path=os.path.join(root_dir, "config",'.env') + + logger.info(f"尝试从 {env_path} 加载环境变量配置") + if os.path.exists(env_path): + load_dotenv(env_path) + logger.success("成功加载环境变量配置") + else: + logger.error(f"环境变量配置文件不存在: {env_path}") nonebot.run() \ No newline at end of file diff --git a/config/bot_config_toml b/config/bot_config_toml index b5011c7f9..83a3c4971 100644 --- a/config/bot_config_toml +++ b/config/bot_config_toml @@ -1,11 +1,3 @@ -[database] -host = "127.0.0.1" -port = 27017 -name = "MegBot" -username = "" # 默认空值 -password = "" # 默认空值 -auth_source = "" # 默认空值 - [bot] qq = 123456 #填入你的机器人QQ nickname = "麦麦" #你希望bot被称呼的名字 diff --git a/src/plugins/chat/__init__.py b/src/plugins/chat/__init__.py index 1c25a24f1..6fc896ac8 100644 --- a/src/plugins/chat/__init__.py +++ b/src/plugins/chat/__init__.py @@ -15,9 +15,12 @@ from .willing_manager import willing_manager driver = get_driver() Database.initialize( - global_config.MONGODB_HOST, - global_config.MONGODB_PORT, - global_config.DATABASE_NAME + host= os.getenv("MONGODB_HOST"), + port= int(os.getenv("MONGODB_PORT")), + db_name= os.getenv("DATABASE_NAME"), + username= os.getenv("MONGODB_USERNAME"), + password= os.getenv("MONGODB_PASSWORD"), + auth_source=os.getenv("MONGODB_AUTH_SOURCE") ) print("\033[1;32m[初始化数据库完成]\033[0m") diff --git a/src/plugins/chat/config.py b/src/plugins/chat/config.py index 05d492789..a98ae6f82 100644 --- a/src/plugins/chat/config.py +++ b/src/plugins/chat/config.py @@ -7,22 +7,12 @@ import configparser import tomli import sys from loguru import logger -from dotenv import load_dotenv @dataclass class BotConfig: - """机器人配置类""" - - # 基础配置 - MONGODB_HOST: str = "127.0.0.1" - MONGODB_PORT: int = 27017 - DATABASE_NAME: str = "MegBot" - MONGODB_USERNAME: Optional[str] = None # 默认空值 - MONGODB_PASSWORD: Optional[str] = None # 默认空值 - MONGODB_AUTH_SOURCE: Optional[str] = None # 默认空值 - + """机器人配置类""" BOT_QQ: Optional[int] = 1 BOT_NICKNAME: Optional[str] = None @@ -67,17 +57,7 @@ class BotConfig: if os.path.exists(config_path): with open(config_path, "rb") as f: toml_dict = tomli.load(f) - - # 数据库配置 - if "database" in toml_dict: - db_config = toml_dict["database"] - config.MONGODB_HOST = db_config.get("host", config.MONGODB_HOST) - config.MONGODB_PORT = db_config.get("port", config.MONGODB_PORT) - config.DATABASE_NAME = db_config.get("name", config.DATABASE_NAME) - config.MONGODB_USERNAME = db_config.get("username", config.MONGODB_USERNAME) or None # 空字符串转为 None - config.MONGODB_PASSWORD = db_config.get("password", config.MONGODB_PASSWORD) or None # 空字符串转为 None - config.MONGODB_AUTH_SOURCE = db_config.get("auth_source", config.MONGODB_AUTH_SOURCE) or None # 空字符串转为 None - + if "emoji" in toml_dict: emoji_config = toml_dict["emoji"] config.EMOJI_CHECK_INTERVAL = emoji_config.get("check_interval", config.EMOJI_CHECK_INTERVAL) @@ -135,15 +115,6 @@ env_path = os.path.join(config_dir, '.env') logger.info(f"尝试从 {bot_config_path} 加载机器人配置") global_config = BotConfig.load_config(config_path=bot_config_path) -# 加载环境变量 - -logger.info(f"尝试从 {env_path} 加载环境变量配置") -if os.path.exists(env_path): - load_dotenv(env_path) - logger.success("成功加载环境变量配置") -else: - logger.error(f"环境变量配置文件不存在: {env_path}") - @dataclass class LLMConfig: """机器人配置类""" diff --git a/src/plugins/chat/llm_generator.py b/src/plugins/chat/llm_generator.py index 2ea4d7f24..6affe6002 100644 --- a/src/plugins/chat/llm_generator.py +++ b/src/plugins/chat/llm_generator.py @@ -10,7 +10,6 @@ import random import time import os import numpy as np -from dotenv import load_dotenv from .relationship_manager import relationship_manager from ..schedule.schedule_generator import bot_schedule from .prompt_builder import prompt_builder @@ -18,11 +17,6 @@ from .config import llm_config, global_config from .utils import process_llm_response -# 获取当前文件的绝对路径 -current_dir = os.path.dirname(os.path.abspath(__file__)) -root_dir = os.path.abspath(os.path.join(current_dir, '..', '..', '..')) -load_dotenv(os.path.join(root_dir, '.env')) - class LLMResponseGenerator: def __init__(self, config: BotConfig): self.config = config diff --git a/src/plugins/chat/prompt_builder.py b/src/plugins/chat/prompt_builder.py index da9037cfa..3d86724f3 100644 --- a/src/plugins/chat/prompt_builder.py +++ b/src/plugins/chat/prompt_builder.py @@ -1,6 +1,5 @@ import time import random -from dotenv import load_dotenv from ..schedule.schedule_generator import bot_schedule import os from .utils import get_embedding, combine_messages, get_recent_group_detailed_plain_text @@ -10,11 +9,6 @@ from .topic_identifier import topic_identifier from ..memory_system.memory import memory_graph from random import choice -# 获取当前文件的绝对路径 -current_dir = os.path.dirname(os.path.abspath(__file__)) -root_dir = os.path.abspath(os.path.join(current_dir, '..', '..', '..')) -load_dotenv(os.path.join(root_dir, '.env')) - class PromptBuilder: def __init__(self): diff --git a/src/plugins/chat/utils_image.py b/src/plugins/chat/utils_image.py index 9fe2c40cc..097294010 100644 --- a/src/plugins/chat/utils_image.py +++ b/src/plugins/chat/utils_image.py @@ -37,12 +37,12 @@ def storage_compress_image(image_data: bytes, max_size: int = 200) -> bytes: # 连接数据库 db = Database( - host=global_config.MONGODB_HOST, - port=global_config.MONGODB_PORT, - db_name=global_config.DATABASE_NAME, - username=global_config.MONGODB_USERNAME, - password=global_config.MONGODB_PASSWORD, - auth_source=global_config.MONGODB_AUTH_SOURCE + host= os.getenv("MONGODB_HOST"), + port= int(os.getenv("MONGODB_PORT")), + db_name= os.getenv("DATABASE_NAME"), + username= os.getenv("MONGODB_USERNAME"), + password= os.getenv("MONGODB_PASSWORD"), + auth_source=os.getenv("MONGODB_AUTH_SOURCE") ) # 检查是否已存在相同哈希值的图片 diff --git a/src/plugins/knowledege/knowledge_library.py b/src/plugins/knowledege/knowledge_library.py index 40756b413..cdb591dee 100644 --- a/src/plugins/knowledege/knowledge_library.py +++ b/src/plugins/knowledege/knowledge_library.py @@ -13,9 +13,12 @@ from src.plugins.chat.config import llm_config # 直接配置数据库连接信息 Database.initialize( - "127.0.0.1", # MongoDB 主机 - 27017, # MongoDB 端口 - "MegBot" # 数据库名称 + host= os.getenv("MONGODB_HOST"), + port= int(os.getenv("MONGODB_PORT")), + db_name= os.getenv("DATABASE_NAME"), + username= os.getenv("MONGODB_USERNAME"), + password= os.getenv("MONGODB_PASSWORD"), + auth_source=os.getenv("MONGODB_AUTH_SOURCE") ) class KnowledgeLibrary: diff --git a/src/plugins/memory_system/draw_memory.py b/src/plugins/memory_system/draw_memory.py index 651d5fbca..a24f95a76 100644 --- a/src/plugins/memory_system/draw_memory.py +++ b/src/plugins/memory_system/draw_memory.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import os import sys import jieba from llm_module import LLMModel @@ -153,9 +154,12 @@ class Memory_graph: def main(): # 初始化数据库 Database.initialize( - "127.0.0.1", - 27017, - "MegBot" + host= os.getenv("MONGODB_HOST"), + port= int(os.getenv("MONGODB_PORT")), + db_name= os.getenv("DATABASE_NAME"), + username= os.getenv("MONGODB_USERNAME"), + password= os.getenv("MONGODB_PASSWORD"), + auth_source=os.getenv("MONGODB_AUTH_SOURCE") ) memory_graph = Memory_graph() diff --git a/src/plugins/memory_system/llm_module.py b/src/plugins/memory_system/llm_module.py index fa879afdc..4c9174dac 100644 --- a/src/plugins/memory_system/llm_module.py +++ b/src/plugins/memory_system/llm_module.py @@ -1,12 +1,8 @@ import os import requests -from dotenv import load_dotenv from typing import Tuple, Union import time -# 加载环境变量 -load_dotenv() - class LLMModel: # def __init__(self, model_name="deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", **kwargs): def __init__(self, model_name="Pro/deepseek-ai/DeepSeek-V3", **kwargs): diff --git a/src/plugins/memory_system/llm_module_memory_make.py b/src/plugins/memory_system/llm_module_memory_make.py index 1abfdb2c6..07cecae9d 100644 --- a/src/plugins/memory_system/llm_module_memory_make.py +++ b/src/plugins/memory_system/llm_module_memory_make.py @@ -1,23 +1,9 @@ import os import requests -from dotenv import load_dotenv from typing import Tuple, Union import time from ..chat.config import BotConfig -# 获取当前文件的绝对路径 -current_dir = os.path.dirname(os.path.abspath(__file__)) -root_dir = os.path.abspath(os.path.join(current_dir, '..', '..', '..')) -env_path = os.path.join(root_dir, 'config', '.env') - -# 加载环境变量 -print(f"尝试从 {env_path} 加载环境变量配置") -if os.path.exists(env_path): - load_dotenv(env_path) - print("成功加载环境变量配置") -else: - print(f"环境变量配置文件不存在: {env_path}") - class LLMModel: # def __init__(self, model_name="deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", **kwargs): def __init__(self, model_name="Pro/deepseek-ai/DeepSeek-V3", **kwargs): diff --git a/src/plugins/memory_system/memory_make.py b/src/plugins/memory_system/memory_make.py index 244838e21..0c1c0d219 100644 --- a/src/plugins/memory_system/memory_make.py +++ b/src/plugins/memory_system/memory_make.py @@ -9,7 +9,6 @@ import datetime import random import time import os -from dotenv import load_dotenv # from chat.config import global_config sys.path.append("C:/GitHub/MaiMBot") # 添加项目根目录到 Python 路径 from src.common.database import Database # 使用正确的导入语法 @@ -219,24 +218,14 @@ def calculate_information_content(text): def main(): - # 获取当前文件的绝对路径 - current_dir = os.path.dirname(os.path.abspath(__file__)) - root_dir = os.path.abspath(os.path.join(current_dir, '..', '..', '..')) - env_path = os.path.join(root_dir, 'config', '.env') - - # 加载环境变量 - print(f"尝试从 {env_path} 加载环境变量配置") - if os.path.exists(env_path): - load_dotenv(env_path) - print("成功加载环境变量配置") - else: - print(f"环境变量配置文件不存在: {env_path}") - # 初始化数据库 Database.initialize( - "127.0.0.1", - 27017, - "MegBot" + host= os.getenv("MONGODB_HOST"), + port= int(os.getenv("MONGODB_PORT")), + db_name= os.getenv("DATABASE_NAME"), + username= os.getenv("MONGODB_USERNAME"), + password= os.getenv("MONGODB_PASSWORD"), + auth_source=os.getenv("MONGODB_AUTH_SOURCE") ) memory_graph = Memory_graph() diff --git a/src/plugins/schedule/schedule_generator.py b/src/plugins/schedule/schedule_generator.py index d1778d878..097a89de8 100644 --- a/src/plugins/schedule/schedule_generator.py +++ b/src/plugins/schedule/schedule_generator.py @@ -2,22 +2,9 @@ import datetime import os from typing import List, Dict from .schedule_llm_module import LLMModel -from dotenv import load_dotenv from ...common.database import Database # 使用正确的导入语法 from ..chat.config import global_config - -# import sys -# sys.path.append("C:/GitHub/MegMeg-bot") # 添加项目根目录到 Python 路径 -# from src.plugins.schedule.schedule_llm_module import LLMModel -# from src.common.database import Database # 使用正确的导入语法 - -# 获取当前文件的绝对路径 -#TODO: 这个好几个地方用需要封装 -current_dir = os.path.dirname(os.path.abspath(__file__)) -root_dir = os.path.abspath(os.path.join(current_dir, '..', '..', '..')) -load_dotenv(os.path.join(root_dir, '.env')) - Database.initialize( host= os.getenv("MONGODB_HOST"), port= int(os.getenv("MONGODB_PORT")), diff --git a/src/plugins/schedule/schedule_llm_module.py b/src/plugins/schedule/schedule_llm_module.py index 13945afb3..d4fdfd86b 100644 --- a/src/plugins/schedule/schedule_llm_module.py +++ b/src/plugins/schedule/schedule_llm_module.py @@ -1,11 +1,7 @@ import os import requests -from dotenv import load_dotenv from typing import Tuple, Union -# 加载环境变量 -load_dotenv() - class LLMModel: # def __init__(self, model_name="deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", **kwargs): def __init__(self, model_name="Pro/deepseek-ai/DeepSeek-R1",api_using=None, **kwargs): From bd2f0b258a62d158904ee87612740e40435429d5 Mon Sep 17 00:00:00 2001 From: NepPure Date: Sun, 2 Mar 2025 11:03:11 +0800 Subject: [PATCH 2/4] fix https://github.com/SengokuCola/MaiMBot/issues/23 --- src/plugins/schedule/schedule_llm_module.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/schedule/schedule_llm_module.py b/src/plugins/schedule/schedule_llm_module.py index d4fdfd86b..ebf039c7e 100644 --- a/src/plugins/schedule/schedule_llm_module.py +++ b/src/plugins/schedule/schedule_llm_module.py @@ -6,8 +6,8 @@ class LLMModel: # def __init__(self, model_name="deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", **kwargs): def __init__(self, model_name="Pro/deepseek-ai/DeepSeek-R1",api_using=None, **kwargs): if api_using == "deepseek": - self.api_key = os.getenv("DEEPSEEK_API_KEY") - self.base_url = os.getenv("DEEPSEEK_BASE_URL") + self.api_key = os.getenv("DEEP_SEEK_KEY") + self.base_url = os.getenv("DEEP_SEEK_BASE_URL") if model_name != "Pro/deepseek-ai/DeepSeek-R1": self.model_name = model_name else: From b8624dd1955515e3a6c2bd77e9f37191a3b6a72d Mon Sep 17 00:00:00 2001 From: NepPure Date: Sun, 2 Mar 2025 11:11:50 +0800 Subject: [PATCH 3/4] _env_file=env_path --- bot.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/bot.py b/bot.py index fca7bc5a4..8abdbbbe9 100644 --- a/bot.py +++ b/bot.py @@ -4,6 +4,17 @@ from nonebot.adapters.onebot.v11 import Adapter from dotenv import load_dotenv from loguru import logger + # 加载全局环境变量 +root_dir = os.path.dirname(os.path.abspath(__file__)) +env_path=os.path.join(root_dir, "config",'.env') + +logger.info(f"尝试从 {env_path} 加载环境变量配置") +if os.path.exists(env_path): + load_dotenv(env_path) + logger.success("成功加载环境变量配置") +else: + logger.error(f"环境变量配置文件不存在: {env_path}") + # 初始化 NoneBot nonebot.init( # napcat 默认使用 8080 端口 @@ -11,7 +22,9 @@ nonebot.init( # 设置日志级别 log_level="INFO", # 设置超级用户 - superusers={"你的QQ号"} + superusers={"你的QQ号"}, + # TODO: 这样写会忽略环境变量需要优化 https://nonebot.dev/docs/appendices/config + _env_file=env_path ) # 注册适配器 @@ -22,14 +35,4 @@ driver.register_adapter(Adapter) nonebot.load_plugins("src/plugins") if __name__ == "__main__": - # 加载全局环境变量 - root_dir = os.path.dirname(os.path.abspath(__file__)) - env_path=os.path.join(root_dir, "config",'.env') - - logger.info(f"尝试从 {env_path} 加载环境变量配置") - if os.path.exists(env_path): - load_dotenv(env_path) - logger.success("成功加载环境变量配置") - else: - logger.error(f"环境变量配置文件不存在: {env_path}") nonebot.run() \ No newline at end of file From 0528586ad2ef4c30f99de7d493b3ca2ba4652650 Mon Sep 17 00:00:00 2001 From: NepPure Date: Sun, 2 Mar 2025 11:25:48 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=81=97=E6=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gui/reasoning_gui.py | 9 ++++++--- src/plugins/memory_system/memory.py | 10 +++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/gui/reasoning_gui.py b/src/gui/reasoning_gui.py index 356be3bd1..f12b59798 100644 --- a/src/gui/reasoning_gui.py +++ b/src/gui/reasoning_gui.py @@ -331,9 +331,12 @@ class ReasoningGUI: def main(): """主函数""" Database.initialize( - "127.0.0.1", - 27017, - "MegBot" + host= os.getenv("MONGODB_HOST"), + port= int(os.getenv("MONGODB_PORT")), + db_name= os.getenv("DATABASE_NAME"), + username= os.getenv("MONGODB_USERNAME"), + password= os.getenv("MONGODB_PASSWORD"), + auth_source=os.getenv("MONGODB_AUTH_SOURCE") ) app = ReasoningGUI() diff --git a/src/plugins/memory_system/memory.py b/src/plugins/memory_system/memory.py index af6aab39a..4deb28d63 100644 --- a/src/plugins/memory_system/memory.py +++ b/src/plugins/memory_system/memory.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import os import jieba from .llm_module import LLMModel import networkx as nx @@ -263,9 +264,12 @@ def topic_what(text, topic): start_time = time.time() Database.initialize( - global_config.MONGODB_HOST, - global_config.MONGODB_PORT, - global_config.DATABASE_NAME + host= os.getenv("MONGODB_HOST"), + port= int(os.getenv("MONGODB_PORT")), + db_name= os.getenv("DATABASE_NAME"), + username= os.getenv("MONGODB_USERNAME"), + password= os.getenv("MONGODB_PASSWORD"), + auth_source=os.getenv("MONGODB_AUTH_SOURCE") ) #创建记忆图 memory_graph = Memory_graph()