From 167e2b8f5c403f7ffde774a9505e439c7e7b3213 Mon Sep 17 00:00:00 2001 From: jiajiu123 <1771663559@qq.com> Date: Sat, 1 Mar 2025 16:30:32 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=85=BC=E5=AE=B9=E9=AB=98=E7=89=88?= =?UTF-8?q?=E6=9C=AC=20Python?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 +- docker-compose.yml | 2 +- requirements.txt | Bin 908 -> 520 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9e1cf16b3..9f12476a6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,7 @@ RUN mv env.example config/.env \ && mv src/plugins/chat/bot_config_toml config/bot_config.toml RUN ln -s /MaiMBot/config/.env /MaiMBot/.env \ && ln -s /MaiMBot/config/bot_config.toml /MaiMBot/src/plugins/chat/bot_config.toml -RUN pip install -r requirements.txt +RUN pip install --upgrade -r requirements.txt VOLUME [ "/MaiMBot/config" ] EXPOSE 8080 ENTRYPOINT [ "nb","run" ] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index a159c26f3..5cbe87327 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -32,7 +32,7 @@ services: environment: - tz=Asia/Shanghai expose: - - "8080:8080" + - "8080" restart: always depends_on: - mongodb diff --git a/requirements.txt b/requirements.txt index 7ddb691bcc431d9881ceedcd914bf094e10dc2be..3f0fe05ddd8064040ea79e51e0a7998bbc477374 100644 GIT binary patch delta 183 zcmeBS?_gp2|8Jtunu%xRjCdKi7z!9F8B!P$8S)rP7%~}>89-uLKvpV45>OPx%Ll4S z1@I&${7GROC@>$ literal 908 zcmZuv%}&BV82rvAUOk&|uAvBu2aNgxVo3C0JhV^{+5XrT!Hb@a@ezC-pMrPrXyQSg z`Ie<5m}Z-HznS^wo88}^n(WH=)ye$*{PJyEwj_~IJn4&(vDp6l&M?9+ZqsWdywhXet-*a0~VT`$kpB%j8jFRU6^m!PAsI z+1KUjC3x)TflJR3z8@6p16RlL)ibr|G680cZd4<}S4>?o)VxEL^9PC`zlj{2N(xWx z5CG*A4phe~)R6DR^Wy32^~_L>xD*acJel^$!N13pk)~Sc-V~`BJ%bR_k;jz)6>A2r zQ$y!(YBhs)q7xPBgdXX(;?v7#@8e~sN3|GudN7(2&pT8e(>%m#Eqg{l&49^eBJ&lZ zN`P9-ay@q{M{vtz&C1Qu(oqIA-XNRMsdS~caoU`aPW-hj>2w6u9E){MN2hke64h8U zqoY1B?7_Vf&Uv%!Z9E3E1(wZ+*si*y`b=1LH-P!EUQKAvh`rnD&E0|!eFOBIpwfY| VyOowd)anF@w6#vp^j@j6!yh>cjNAYK From 2554f8a931bba90a3d46dd463cf05e1336dc3692 Mon Sep 17 00:00:00 2001 From: KawaiiYusora Date: Sat, 1 Mar 2025 18:52:40 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E4=B8=80=E4=B8=8B=E6=BC=8F?= =?UTF-8?q?=E6=94=B9=E7=9A=84deepseek=20API=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/schedule/schedule_generator.py | 5 ++++- src/plugins/schedule/schedule_llm_module.py | 16 ++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/plugins/schedule/schedule_generator.py b/src/plugins/schedule/schedule_generator.py index 13b6ebb88..b1d07214a 100644 --- a/src/plugins/schedule/schedule_generator.py +++ b/src/plugins/schedule/schedule_generator.py @@ -29,7 +29,10 @@ Database.initialize( class ScheduleGenerator: def __init__(self): - self.llm_scheduler = LLMModel(model_name="Pro/deepseek-ai/DeepSeek-V3") + if global_config.API_USING == "siliconflow": + self.llm_scheduler = LLMModel(model_name="Pro/deepseek-ai/DeepSeek-V3") + elif global_config.API_USING == "deepseek": + self.llm_scheduler = LLMModel(model_name="deepseek-chat",api_using="deepseek") self.db = Database.get_instance() today = datetime.datetime.now() diff --git a/src/plugins/schedule/schedule_llm_module.py b/src/plugins/schedule/schedule_llm_module.py index 0f1e71f6c..13945afb3 100644 --- a/src/plugins/schedule/schedule_llm_module.py +++ b/src/plugins/schedule/schedule_llm_module.py @@ -8,11 +8,19 @@ 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", **kwargs): - self.model_name = model_name + 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") + if model_name != "Pro/deepseek-ai/DeepSeek-R1": + self.model_name = model_name + else: + self.model_name = "deepseek-reasoner" + else: + self.api_key = os.getenv("SILICONFLOW_KEY") + self.base_url = os.getenv("SILICONFLOW_BASE_URL") + self.model_name = model_name self.params = kwargs - self.api_key = os.getenv("SILICONFLOW_KEY") - self.base_url = os.getenv("SILICONFLOW_BASE_URL") def generate_response(self, prompt: str) -> Tuple[str, str]: """根据输入的提示生成模型的响应""" From f501f7d21845090207ad5d53a14a5cbbba59a136 Mon Sep 17 00:00:00 2001 From: HYY1116 Date: Sat, 1 Mar 2025 21:07:54 +0800 Subject: [PATCH 3/3] =?UTF-8?q?chore:=E4=BF=AE=E6=94=B9toml=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E4=BD=8D=E7=BD=AE=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E9=BB=98=E8=AE=A4=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9docs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 33 ++++++++++--------- .../chat/bot_config_toml => bot_config.toml | 18 +++++----- env.example | 4 +-- src/plugins/chat/config.py | 2 +- 4 files changed, 29 insertions(+), 28 deletions(-) rename src/plugins/chat/bot_config_toml => bot_config.toml (68%) diff --git a/README.md b/README.md index 3e2da652a..add3a72b5 100644 --- a/README.md +++ b/README.md @@ -52,11 +52,9 @@ NAPCAT_UID=$(id -u) NAPCAT_GID=$(id -g) docker compose restart #### 手动运行 1. **创建Python环境** - 推荐使用conda或其他环境管理来管理你的python环境 + 推荐使用conda或其他虚拟环境进行依赖安装,防止出现依赖版本冲突问题 ```bash - # 安装requirements(还没检查好,可能有包漏了) - conda activate 你的环境 - cd 对应路径 + # 安装requirements pip install -r requirements.txt ``` 2. **MongoDB设置** @@ -68,8 +66,8 @@ NAPCAT_UID=$(id -u) NAPCAT_GID=$(id -g) docker compose restart - 在Napcat的网络设置中添加ws反向代理:ws://localhost:8080/onebot/v11/ws 4. **配置文件设置** - - 把env.example改成.env,并填上你的apikey(硅基流动或deepseekapi) - - 把bot_config_toml改名为bot_config.toml,并填写相关内容,不然无法正常运行 + - 将.env文件打开,填上你的apikey(硅基流动或deepseekapi) + - 将bot_config.toml文件打开,并填写相关内容,不然无法正常运行 #### .env 文件配置说明 ```ini @@ -92,14 +90,10 @@ NAPCAT_UID=$(id -u) NAPCAT_GID=$(id -g) docker compose restart MONGODB_PASSWORD="" # MongoDB密码(可选) MONGODB_AUTH_SOURCE="" # MongoDB认证源(可选) - # API密钥配置 - CHAT_ANY_WHERE_KEY= # ChatAnyWhere API密钥 - SILICONFLOW_KEY= # 硅基流动 API密钥(必填) - DEEP_SEEK_KEY= # DeepSeek API密钥(必填) - - # API地址配置 - CHAT_ANY_WHERE_BASE_URL=https://api.chatanywhere.tech/v1 + #api配置项,建议siliconflow必填,识图需要这个 + SILICONFLOW_KEY= SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1/ + DEEP_SEEK_KEY= DEEP_SEEK_BASE_URL=https://api.deepseek.com/v1 ``` @@ -158,9 +152,8 @@ NAPCAT_UID=$(id -u) NAPCAT_GID=$(id -g) docker compose restart ``` 5. **运行麦麦** + 在含有bot.py程序的目录下运行(如果使用了虚拟环境需要先进入虚拟环境) ```bash - conda activate 你的环境 - cd 对应路径 nb run ``` 6. **运行其他组件** @@ -205,3 +198,13 @@ NAPCAT_UID=$(id -u) NAPCAT_GID=$(id -g) docker compose restart 纯编程外行,面向cursor编程,很多代码史一样多多包涵 > ⚠️ **警告**:本应用生成内容来自人工智能模型,由 AI 生成,请仔细甄别,请勿用于违反法律的用途,AI生成内容不代表本人观点和立场。 + +## 致谢 +[nonebot2](https://github.com/nonebot/nonebot2): 跨平台 Python 异步聊天机器人框架 +[NapCat](https://github.com/NapNeko/NapCatQQ): 现代化的基于 NTQQ 的 Bot 协议端实现 + +### 贡献者 + +感谢各位大佬! + +[![Contributors](https://contributors-img.web.app/image?repo=SengokuCola/MaiMBot)](https://github.com/SengokuCola/MaiMBot/graphs/contributors) diff --git a/src/plugins/chat/bot_config_toml b/bot_config.toml similarity index 68% rename from src/plugins/chat/bot_config_toml rename to bot_config.toml index fe6b702d8..6730f0481 100644 --- a/src/plugins/chat/bot_config_toml +++ b/bot_config.toml @@ -7,8 +7,8 @@ password = "" # 默认空值 auth_source = "" # 默认空值 [bot] -qq = #填入你的机器人QQ -nickname = "麦麦" +qq = 123456 #填入你的机器人QQ +nickname = "麦麦" #你希望bot被称呼的名字 [message] min_text_length = 2 # 与麦麦聊天时麦麦只会回答文本大于等于此数的消息 @@ -24,7 +24,7 @@ enable_pic_translate = false [response] -api_using = "siliconflow" # 选择大模型API +api_using = "siliconflow" # 选择大模型API,可选值为siliconflow,deepseek,建议使用siliconflow,因为识图api目前只支持siliconflow的deepseek-vl2模型 model_r1_probability = 0.8 # 麦麦回答时选择R1模型的概率 model_v3_probability = 0.1 # 麦麦回答时选择V3模型的概率 model_r1_distill_probability = 0.1 # 麦麦回答时选择R1蒸馏模型的概率 @@ -36,13 +36,13 @@ enable_advance_output = true # 开启后输出更多日志,false关闭true开启 [groups] talk_allowed = [ - #可以回复消息的群 -] + 123456,12345678 +] #可以回复消息的群 talk_frequency_down = [ - #降低回复频率的群 -] + 123456,12345678 +] #降低回复频率的群 ban_user_id = [ - #禁止回复消息的QQ号 -] + 123456,12345678 +] #禁止回复消息的QQ号 diff --git a/env.example b/env.example index c8ed650d6..9988d58f3 100644 --- a/env.example +++ b/env.example @@ -15,10 +15,8 @@ MONGODB_USERNAME = "" # 默认空值 MONGODB_PASSWORD = "" # 默认空值 MONGODB_AUTH_SOURCE = "" # 默认空值 -#key and url -CHAT_ANY_WHERE_KEY= +#api配置项 SILICONFLOW_KEY= -CHAT_ANY_WHERE_BASE_URL=https://api.chatanywhere.tech/v1 SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1/ DEEP_SEEK_KEY= DEEP_SEEK_BASE_URL=https://api.deepseek.com/v1 diff --git a/src/plugins/chat/config.py b/src/plugins/chat/config.py index b9965470c..43df5bb1f 100644 --- a/src/plugins/chat/config.py +++ b/src/plugins/chat/config.py @@ -107,7 +107,7 @@ class BotConfig: return config -global_config = BotConfig.load_config("./src/plugins/chat/bot_config.toml") +global_config = BotConfig.load_config(".bot_config.toml") from dotenv import load_dotenv current_dir = os.path.dirname(os.path.abspath(__file__))