From 90d169f740230ef637015677f5161d2047d9d5b6 Mon Sep 17 00:00:00 2001 From: Pliosauroidea Date: Wed, 12 Mar 2025 07:44:57 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=B0=86=E4=BB=B7=E6=A0=BCprint=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=AF=B9=E5=BA=94=E7=9A=84logger=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/chat/bot.py | 4 ++-- src/plugins/utils/typo_generator.py | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/plugins/chat/bot.py b/src/plugins/chat/bot.py index f335a2ba3..f179e8ef3 100644 --- a/src/plugins/chat/bot.py +++ b/src/plugins/chat/bot.py @@ -235,10 +235,10 @@ class ChatBot: is_head=not mark_head, is_emoji=False, ) - print(f"bot_message: {bot_message}") + logger.debug(f"bot_message: {bot_message}") if not mark_head: mark_head = True - print(f"添加消息到message_set: {bot_message}") + logger.debug(f"添加消息到message_set: {bot_message}") message_set.add_message(bot_message) # message_set 可以直接加入 message_manager diff --git a/src/plugins/utils/typo_generator.py b/src/plugins/utils/typo_generator.py index aa72c387f..f99a7ab20 100644 --- a/src/plugins/utils/typo_generator.py +++ b/src/plugins/utils/typo_generator.py @@ -13,6 +13,8 @@ from pathlib import Path import jieba from pypinyin import Style, pinyin +from loguru import logger + class ChineseTypoGenerator: def __init__(self, @@ -38,7 +40,9 @@ class ChineseTypoGenerator: self.max_freq_diff = max_freq_diff # 加载数据 - print("正在加载汉字数据库,请稍候...") + # print("正在加载汉字数据库,请稍候...") + logger.info("正在加载汉字数据库,请稍候...") + self.pinyin_dict = self._create_pinyin_dict() self.char_frequency = self._load_or_create_char_frequency() From 126c9af70e8f3bc6ae3e19bf8a29a90c4c4d1155 Mon Sep 17 00:00:00 2001 From: Pliosauroidea Date: Wed, 12 Mar 2025 07:58:27 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=81=AB=E5=B1=B1?= =?UTF-8?q?=E9=83=A8=E5=88=86=E6=B5=81=E5=BC=8F=E8=BE=93=E5=87=BA=E6=B2=A1?= =?UTF-8?q?=E6=9C=89finish=5Freason=E5=AF=BC=E8=87=B4=E7=9A=84=E6=8A=A5?= =?UTF-8?q?=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/models/utils_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/models/utils_model.py b/src/plugins/models/utils_model.py index 75b46f611..5335e3d65 100644 --- a/src/plugins/models/utils_model.py +++ b/src/plugins/models/utils_model.py @@ -235,7 +235,7 @@ class LLM_request: delta_content = "" accumulated_content += delta_content # 检测流式输出文本是否结束 - finish_reason = chunk["choices"][0]["finish_reason"] + finish_reason = chunk["choices"][0].get("finish_reason") if finish_reason == "stop": usage = chunk.get("usage", None) if usage: From 27be42b8f0f683da455c19ce07ee36ea0630e75c Mon Sep 17 00:00:00 2001 From: Pliosauroidea Date: Wed, 12 Mar 2025 08:25:55 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BF=AE=E6=AD=A3willing=5Fmanager?= =?UTF-8?q?=E5=86=85=E5=9B=A0=E4=B8=BA=E4=BB=A3=E7=A0=81=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=9A=84=E5=86=97=E4=BD=99,=E5=8E=BB?= =?UTF-8?q?=E9=99=A4=E5=87=A0=E4=B8=AAprint?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/chat/willing_manager.py | 80 ++++++++++++++--------------- 1 file changed, 39 insertions(+), 41 deletions(-) diff --git a/src/plugins/chat/willing_manager.py b/src/plugins/chat/willing_manager.py index f34afb746..773d40c6e 100644 --- a/src/plugins/chat/willing_manager.py +++ b/src/plugins/chat/willing_manager.py @@ -5,101 +5,98 @@ from typing import Dict from .config import global_config from .chat_stream import ChatStream +from loguru import logger + class WillingManager: def __init__(self): - self.chat_reply_willing: Dict[str, float] = {} # 存储每个聊天流的回复意愿 self.chat_reply_willing: Dict[str, float] = {} # 存储每个聊天流的回复意愿 self._decay_task = None self._started = False - + async def _decay_reply_willing(self): """定期衰减回复意愿""" while True: await asyncio.sleep(5) for chat_id in self.chat_reply_willing: self.chat_reply_willing[chat_id] = max(0, self.chat_reply_willing[chat_id] * 0.6) - for chat_id in self.chat_reply_willing: - self.chat_reply_willing[chat_id] = max(0, self.chat_reply_willing[chat_id] * 0.6) - - def get_willing(self,chat_stream:ChatStream) -> float: + + def get_willing(self, chat_stream: ChatStream) -> float: """获取指定聊天流的回复意愿""" stream = chat_stream if stream: return self.chat_reply_willing.get(stream.stream_id, 0) return 0 - + def set_willing(self, chat_id: str, willing: float): """设置指定聊天流的回复意愿""" self.chat_reply_willing[chat_id] = willing - def set_willing(self, chat_id: str, willing: float): - """设置指定聊天流的回复意愿""" - self.chat_reply_willing[chat_id] = willing - - async def change_reply_willing_received(self, - chat_stream:ChatStream, - topic: str = None, - is_mentioned_bot: bool = False, - config = None, - is_emoji: bool = False, - interested_rate: float = 0) -> float: + + async def change_reply_willing_received( + self, + chat_stream: ChatStream, + topic: str = None, + is_mentioned_bot: bool = False, + config=None, + is_emoji: bool = False, + interested_rate: float = 0, + ) -> float: """改变指定聊天流的回复意愿并返回回复概率""" # 获取或创建聊天流 stream = chat_stream chat_id = stream.stream_id - + current_willing = self.chat_reply_willing.get(chat_id, 0) - - # print(f"初始意愿: {current_willing}") + if is_mentioned_bot and current_willing < 1.0: current_willing += 0.9 - print(f"被提及, 当前意愿: {current_willing}") + logger.debug(f"被提及, 当前意愿: {current_willing}") elif is_mentioned_bot: current_willing += 0.05 - print(f"被重复提及, 当前意愿: {current_willing}") - + logger.debug(f"被重复提及, 当前意愿: {current_willing}") + if is_emoji: current_willing *= 0.1 - print(f"表情包, 当前意愿: {current_willing}") - - print(f"放大系数_interested_rate: {global_config.response_interested_rate_amplifier}") - interested_rate *= global_config.response_interested_rate_amplifier #放大回复兴趣度 + logger.debug(f"表情包, 当前意愿: {current_willing}") + + logger.debug(f"放大系数_interested_rate: {global_config.response_interested_rate_amplifier}") + interested_rate *= global_config.response_interested_rate_amplifier # 放大回复兴趣度 if interested_rate > 0.4: # print(f"兴趣度: {interested_rate}, 当前意愿: {current_willing}") - current_willing += interested_rate-0.4 - - current_willing *= global_config.response_willing_amplifier #放大回复意愿 + current_willing += interested_rate - 0.4 + + current_willing *= global_config.response_willing_amplifier # 放大回复意愿 # print(f"放大系数_willing: {global_config.response_willing_amplifier}, 当前意愿: {current_willing}") - + reply_probability = max((current_willing - 0.45) * 2, 0) - + # 检查群组权限(如果是群聊) - if chat_stream.group_info: + if chat_stream.group_info: if chat_stream.group_info.group_id in config.talk_frequency_down_groups: reply_probability = reply_probability / global_config.down_frequency_rate reply_probability = min(reply_probability, 1) if reply_probability < 0: reply_probability = 0 - + self.chat_reply_willing[chat_id] = min(current_willing, 3.0) return reply_probability - - def change_reply_willing_sent(self, chat_stream:ChatStream): + + def change_reply_willing_sent(self, chat_stream: ChatStream): """开始思考后降低聊天流的回复意愿""" stream = chat_stream if stream: current_willing = self.chat_reply_willing.get(stream.stream_id, 0) self.chat_reply_willing[stream.stream_id] = max(0, current_willing - 2) - - def change_reply_willing_after_sent(self,chat_stream:ChatStream): + + def change_reply_willing_after_sent(self, chat_stream: ChatStream): """发送消息后提高聊天流的回复意愿""" stream = chat_stream if stream: current_willing = self.chat_reply_willing.get(stream.stream_id, 0) if current_willing < 1: self.chat_reply_willing[stream.stream_id] = min(1, current_willing + 0.2) - + async def ensure_started(self): """确保衰减任务已启动""" if not self._started: @@ -107,5 +104,6 @@ class WillingManager: self._decay_task = asyncio.create_task(self._decay_reply_willing()) self._started = True + # 创建全局实例 -willing_manager = WillingManager() \ No newline at end of file +willing_manager = WillingManager() From e9f3ec89d52156e292999b16451e10000af98305 Mon Sep 17 00:00:00 2001 From: Pliosauroidea Date: Wed, 12 Mar 2025 08:28:00 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E7=BB=99cq=5Fcode=E5=8A=A0=E4=B8=AAimport?= =?UTF-8?q?=20os?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/chat/cq_code.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/chat/cq_code.py b/src/plugins/chat/cq_code.py index 0a8a71df3..bc40cff80 100644 --- a/src/plugins/chat/cq_code.py +++ b/src/plugins/chat/cq_code.py @@ -4,6 +4,8 @@ import time from dataclasses import dataclass from typing import Dict, List, Optional, Union +import os + import requests # 解析各种CQ码 From 5040e7111a9d523d07a393b4f92780ff632bfe29 Mon Sep 17 00:00:00 2001 From: Pliosauroidea Date: Wed, 12 Mar 2025 08:28:41 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E8=8E=AB=E5=90=8D=E5=85=B6=E5=A6=99=E7=9A=84=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hort --pretty=format-ad -s | 141 ------------------------------------ 1 file changed, 141 deletions(-) delete mode 100644 hort --pretty=format-ad -s diff --git a/hort --pretty=format-ad -s b/hort --pretty=format-ad -s deleted file mode 100644 index faeacdd5f..000000000 --- a/hort --pretty=format-ad -s +++ /dev/null @@ -1,141 +0,0 @@ -cbb569e - Create 如果你更新了版本,点我.txt -a91ef7b - 自动升级配置文件脚本 -ed18f2e - 新增了知识库一键启动漂亮脚本 -80ed568 - fix: 删除print调试代码 -c681a82 - 修复小名无效问题 -e54038f - fix: 从 nixpkgs 增加 numpy 依赖,以避免出现 libc++.so 找不到的问题 -26782c9 - fix: 修复 ENVIRONMENT 变量在同一终端下不能被覆盖的问题 -8c34637 - 提高健壮性 -2688a96 - close SengokuCola/MaiMBot#225 让麦麦可以正确读取分享卡片 -cd16e68 - 修复表情包发送时的缺失参数 -b362c35 - feat: 更新 flake.nix ,采用 venv 的方式生成环境,nixos用户也可以本机运行项目了 -3c8c897 - 屏蔽一个臃肿的debug信息 -9d0152a - 修复了合并过程中造成的代码重复 -956135c - 添加一些注释 -a412741 - 将print变为logger.debug -3180426 - 修复了没有改掉的typo字段 -aea3bff - 添加私聊过滤开关,更新config,增加约束 -cda6281 - chore: update emoji_manager.py -baed856 - 修正了私聊屏蔽词输出 -66a0f18 - 修复了私聊时产生reply消息的bug -3bf5cd6 - feat: 新增运行时重载配置文件;新增根据不同环境(dev;prod)显示不同级别的log -33cd83b - 添加私聊功能 -aa41f0d - fix: 放反了 -ef8691c - fix: 修改message继承逻辑,修复回复消息无法识别 -7d017be - fix:模型降级 -e1019ad - fix: 修复变量拼写错误并优化代码可读性 -c24bb70 - fix: 流式输出模式增加结束判断与token用量记录 -60a9376 - 添加logger的debug输出开关,默认为不开启 -bfa9a3c - fix: 添加群信息获取的错误处理 (#173) -4cc5c8e - 修正.env.prod和.env.dev的生成 -dea14c1 - fix: 模型降级目前只对硅基流动的V3和R1生效 -b6edbea - fix: 图片保存路径不正确 -01a6fa8 - fix: 删除神秘test -20f009d - 修复systemctl强制停止maimbot的问题 -af962c2 - 修复了情绪管理器没有正确导入导致发布出消息 -0586700 - 按照Sourcery提供的建议修改systemctl管理指南 -e48b32a - 在手动部署教程中增加使用systemctl管理 -5760412 - fix: 小修 -1c9b0cc - fix: 修复部分cq码解析错误,merge -b6867b9 - fix: 统一使用os.getenv获取数据库连接信息,避免从config对象获取不存在的值时出现KeyError -5e069f7 - 修复记忆保存时无时间信息的bug -73a3e41 - 修复记忆更新bug -52c93ba - refactor: use Base64 for emoji CQ codes -67f6d7c - fix: 保证能运行的小修改 -c32c4fb - refactor: 修改配置文件的版本号 -a54ca8c - Merge remote-tracking branch 'upstream/debug' into feat_regix -8cbf9bb - feat: 史上最好的消息流重构和图片管理 -9e41c4f - feat: 修改 bot_config 0.0.5 版本的变更日志 -eede406 - fix: 修复nonebot无法加载项目的问题 -00e02ed - fix: 0.0.5 版本的增加分层控制项 -0f99d6a - Update docs/docker_deploy.md -c789074 - feat: 增加ruff依赖 -ff65ab8 - feat: 修改默认的ruff配置文件,同时消除config的所有不符合规范的地方 -bf97013 - feat: 精简日志,禁用Uvicorn/NoneBot默认日志;启动方式改为显示加载uvicorn,以便优雅shutdown -d9a2863 - 优化Docker部署文档更新容器部分 -efcf00f - Docker部署文档追加更新部分 -a63ce96 - fix: 更新情感判断模型配置(使配置文件里的 llm_emotion_judge 生效) -1294c88 - feat: 增加标准化格式化设置 -2e8cd47 - fix: 避免可能出现的日程解析错误 -043a724 - 修一下文档跳转,小美化( -e4b8865 - 支持别名,可以用不同名称召唤机器人 -7b35ddd - ruff 哥又有新点子 -7899e67 - feat: 重构完成开始测试debug -354d6d0 - 记忆系统优化 -6cef8fd - 修复时区,删去napcat用不到的端口 -cd96644 - 添加使用说明 -84495f8 - fix -204744c - 修改配置名与修改过滤对象为raw_message -a03b490 - Update README.md -2b2b342 - feat: 增加 ruff 依赖 -72a6749 - fix: 修复docker部署时区指定问题 -ee579bc - Update README.md -1b611ec - resolve SengokuCola/MaiMBot#167 根据正则表达式过滤消息 -6e2ea82 - refractor: 几乎写完了,进入测试阶段 -2ffdfef - More -e680405 - fix: typo 'discription' -68b3f57 - Minor Doc Update -312f065 - Create linux_deploy_guide_for_beginners.md -ed505a4 - fix: 使用动态路径替换硬编码的项目路径 -8ff7bb6 - docs: 更新文档,修正格式并添加必要的换行符 -6e36a56 - feat: 增加 MONGODB_URI 的配置项,并将所有env文件的注释单独放在一行(python的dotenv有时无法正确处理行内注释) -4baa6c6 - feat: 实现MongoDB URI方式连接,并统一数据库连接代码。 -8a32d18 - feat: 优化willing_manager逻辑,增加回复保底概率 -c9f1244 - docs: 改进README.md文档格式和排版 -e1b484a - docs: 添加CLAUDE.md开发指南文件(用于Claude Code) -a43f949 - fix: remove duplicate message(CR comments) -fddb641 - fix: 修复错误的空值检测逻辑 -8b7876c - fix: 修复没有上传tag的问题 -6b4130e - feat: 增加stable-dev分支的打包 -052e67b - refactor: 日志打印优化(终于改完了,爽了 -a7f9d05 - 修复记忆整理传入格式问题 -536bb1d - fix: 更新情感判断模型配置 -8d99592 - fix: logger初始化顺序 -052802c - refactor: logger promotion -8661d94 - doc: README.md - telegram version information -5746afa - refactor: logger in src\plugins\chat\bot.py -288dbb6 - refactor: logger in src\plugins\chat\__init__.py -8428a06 - fix: memory logger optimization (CR comment) -665c459 - 改进了可视化脚本 -6c35704 - fix: 调用了错误的函数 -3223153 - feat: 一键脚本新增记忆可视化 -3149dd3 - fix: mongodb.zip 无法解压 fix:更换执行命令的方法 fix:当 db 不存在时自动创建 feat: 一键安装完成后启动麦麦 -089d6a6 - feat: 针对硅基流动的Pro模型添加了自动降级功能 -c4b0917 - 一个记忆可视化小脚本 -6a71ea4 - 修复了记忆时间bug,config添加了记忆屏蔽关键词 -1b5344f - fix: 优化bot初始化的日志&格式 -41aa974 - fix: 优化chat/config.py的日志&格式 -980cde7 - fix: 优化scheduler_generator日志&格式 -31a5514 - fix: 调整全局logger加载顺序 -8baef07 - feat: 添加全局logger初始化设置 -5566f17 - refractor: 几乎写完了,进入测试阶段 -6a66933 - feat: 添加开发环境.env.dev初始化 -411ff1a - feat: 安装 MongoDB Compass -0de9eba - feat: 增加实时更新贡献者列表的功能 -f327f45 - fix: 优化src/plugins/chat/__init__.py的import -826daa5 - fix: 当虚拟环境存在时跳过创建 -f54de42 - fix: time.tzset 仅在类 Unix 系统可用 -47c4990 - fix: 修复docker部署场景下时间错误的问题 -e23a371 - docs: 添加 compose 注释 -1002822 - docs: 标注 Python 最低版本 -564350d - feat: 校验 Python 版本 -4cc4482 - docs: 添加傻瓜式脚本 -757173a - 带麦麦看了心理医生,让她没那么容易陷入负面情绪 -39bb99c - 将错别字生成提取到配置,一句一个错别字太烦了! -fe36847 - feat: 超大型重构 -e304dd7 - Update README.md -b7cfe6d - feat: 发布第 0.0.2 版本配置模板 -ca929d5 - 补充Docker部署文档 -1e97120 - 补充Docker部署文档 -25f7052 - fix: 修复兼容性选项和目前第一个版本之间的版本间隙 0.0.0 版,并将所有的直接退出修改为抛出异常 -c5bdc4f - 防ipv6炸,虽然小概率事件 -d86610d - fix: 修复不能加载环境变量的问题 -2306ebf - feat: 因为判断临界版本范围比较麻烦,增加 notice 字段,删除原本的判断逻辑(存在故障) -dd09576 - fix: 修复 TypeError: BotConfig.convert_to_specifierset() takes 1 positional argument but 2 were given -18f839b - fix: 修复 missing 1 required positional argument: 'INNER_VERSION' -6adb5ed - 调整一些细节,docker部署时可选数据库账密 -07f48e9 - fix: 利用filter来过滤环境变量,避免直接删除key造成的 RuntimeError: dictionary changed size during iteration -5856074 - fix: 修复无法进行基础设置的问题 -32aa032 - feat: 发布 0.0.1 版本的配置文件 -edc07ac - feat: 重构配置加载器,增加配置文件版本控制和程序兼容能力 -0f492ed - fix: 修复 BASE_URL/KEY 组合检查中被 GPG_KEY 干扰的问题 \ No newline at end of file