minecraft1024a
a4945d1ca2
refactor(llm): 将LLM请求逻辑解耦到专用组件中
...
将庞大的 `LLMRequest` 类重构,将其核心职责分解到四个独立的、遵循单一职责原则的辅助类中,以提高代码的模块化、可读性和可维护性。
- `_ModelSelector`: 专门负责模型选择、负载均衡和基于失败历史的动态惩罚策略。
- `_PromptProcessor`: 封装所有与提示词和响应内容的预处理及后处理逻辑,包括内容混淆、反截断信令处理和思维链提取。
- `_RequestExecutor`: 负责执行底层的API请求,并处理网络层面的重试逻辑。
- `_RequestStrategy`: 实现高级请求策略,如在多个模型间的故障转移(failover)和空回复/截断的内部重试。
`LLMRequest` 类现在作为外观(Facade),协调这些新组件来完成请求,使得整体架构更加清晰和易于扩展。
2025-09-26 20:38:04 +08:00
minecraft1024a
3207b778c3
refactor(llm): 解决合并冲突并移除请求逻辑重构
...
最近为解耦LLM请求逻辑而进行的重构引入了严重的合并冲突。
此提交通过移除引入的 `RequestExecutor` 和 `RequestStrategy` 等新组件,并恢复到之前的代码结构,从而解决了这些冲突。这有助于稳定开发分支并为后续重新审视重构方案做准备。
2025-09-26 20:26:19 +08:00
minecraft1024a
f12cade772
refactor: 移除未使用的导入和冗余代码
2025-09-26 20:24:56 +08:00
minecraft1024a
9c1a7ff123
ruff
2025-09-26 20:16:46 +08:00
minecraft1024a
89b79792c0
refactor(chat): 将 get_chat_type_and_target_info 重构为异步函数
...
将 `get_chat_type_and_target_info` 函数从同步改为异步,以支持其内部对异步方法 `person_info_manager.get_values` 的调用。
此更改可防止在获取聊天对象信息时阻塞事件循环。所有调用此函数的代码(包括 `SubHeartflow`, `ActionModifier`, `PlanGenerator`, `DefaultReplyer`)都已相应更新为使用 `await`。
在 `DefaultReplyer` 中引入了延迟异步初始化模式 (`_async_init`),以适应其类生命周期。
2025-09-26 19:56:46 +08:00
minecraft1024a
375a51e01f
fix(llm): 修复 <think> 标签解析后可能残留空白的问题
...
之前的 <think> 标签解析逻辑在移除标签内容后,没有处理紧随其后的空白字符,这可能导致清理后的内容开头有多余的空格或换行符。
本次更新使用更精确的正则表达式 `<think>(.*?)</think>\s*`,可以在一次操作中同时移除 <think> 标签块和其后的所有空白字符,确保返回的内容格式正确,提高了处理的鲁棒性。
2025-09-26 19:50:06 +08:00
minecraft1024a
0f39e0b6a6
refactor(llm): improve module clarity with docstrings and unified logging
...
This commit introduces a comprehensive refactoring of the `llm_models` module to enhance code clarity, maintainability, and robustness.
Key changes include:
- **Comprehensive Documentation**: Added detailed docstrings and inline comments to `PromptProcessor`, `RequestExecutor`, `RequestStrategy`, and `LLMRequest`. This clarifies the purpose and logic of each component, including prompt manipulation, request execution with retries, fallback strategies, and concurrency.
- **Unified Logging**: Standardized all loggers within the module to use a single, consistent name (`model_utils`), simplifying log filtering and analysis.
- **Improved Result Handling**: Refined the result processing in `LLMRequest` to correctly extract and record usage data returned from the `RequestStrategy`, fixing a previously incomplete implementation.
2025-09-26 19:29:44 +08:00
minecraft1024a
253946fe57
refactor(llm): 将LLM请求逻辑解耦到专门的组件中
...
庞大的`LLMRequest`类已被重构为一个协调器,它将任务委托给多个专门的组件。此更改旨在遵循单一职责原则,从而提高代码的结构、可维护性和可扩展性。
核心逻辑被提取到以下新类中:
- `ModelSelector`: 封装了基于负载和可用性选择最佳模型的逻辑。
- `PromptProcessor`: 负责处理所有提示词修改和响应内容的解析。
- `RequestStrategy`: 管理请求的执行流程,包括故障转移和并发请求策略。
这种新的架构使系统更加模块化,更易于测试,并且未来可以更轻松地扩展新的请求策略。
2025-09-26 19:21:55 +08:00
Windpicker-owo
0478be7d2a
refactor(chat): 优化消息管理与打断系统,添加打断计数与历史消息加载功能
2025-09-26 19:17:24 +08:00
Windpicker-owo
7718a9b956
refactor(chat): 从StreamContext获取消息兴趣度和连续无回复次数的计算逻辑
2025-09-26 14:02:43 +08:00
Windpicker-owo
bbbf543078
refactor(chat): 重构消息兴趣度计算与动作记录机制
...
重构聊天系统以使用集中式消息管理API,移除ChatMessageContext类,将兴趣度计算和动作记录功能整合到StreamContext中。
主要变更:
- 移除ChatMessageContext类,使用StreamContext统一管理消息上下文
- 在DatabaseMessages模型中添加interest_degree、actions、should_reply字段
- 实现消息管理器API用于更新消息信息和刷新focus_energy
- 重构ChatStream的focus_energy计算逻辑,基于StreamContext历史消息
- 在动作管理器中添加动作记录功能,确保动作执行后更新消息状态
BREAKING CHANGE: ChatMessageContext类已被移除,相关功能需使用StreamContext API替代
2025-09-26 13:56:43 +08:00
Windpicker-owo
bcea1a93c1
Merge branch 'afc' of https://github.com/MoFox-Studio/MoFox_Bot into afc
2025-09-26 11:45:55 +08:00
Windpicker-owo
ad36a6c48f
refactor(chat): 重构消息管理器以使用集中式聊天流API
...
移除对context.chat_stream的直接依赖,改为通过get_chat_manager().get_stream()统一获取聊天流实例。这提高了模块独立性,符合"高内聚、低耦合"原则。
- 在MessageManager中统一使用chat_api获取stream实例
- 移除mood_manager中直接更新chat_stream的逻辑
- 在affinity_flow_chatter中统一处理兴趣度更新
- 消除直接属性访问带来的强耦合依赖
2025-09-26 11:45:20 +08:00
tt-P607
ef8d080228
refactor(chat): 移除会话数据中的 relationship_score
2025-09-26 02:14:48 +08:00
tt-P607
99595f239d
feat(chat): 实现 focus_energy 的实时更新与同步机制
...
为了解决 `focus_energy` 更新不及时,导致其无法准确反映当前对话兴趣度的问题,本次提交引入了一套新的实时更新与同步机制。
这确保了每当消息的兴趣度发生变化时,代表机器人注意力的 `focus_energy` 也能被立即重新计算和更新,使决策更加精准。
主要变更:
1. **手动更新**: 在 `ChatStream` 中新增 `update_focus_energy` 方法,允许外部逻辑在需要时手动触发 `focus_energy` 的重新计算。
2. **实时计算**: `ChatterActionPlanner` 在评估并更新消息兴趣度后,会立即调用 `update_focus_energy`,确保了兴趣度到注意力的即时传导。
3. **状态同步**: `ChatterManager` 在完成一次执行后,会主动将 `mood_manager` 中可能已更新的 `chat_stream` 同步回当前的 `StreamContext`,保证了整个处理流中数据的一致性。
2025-09-26 02:10:43 +08:00
tt-P607
8d725911da
Revert: 回退并发消息处理系统的相关提交
...
由于并发消息处理的实现在测试中暴露出消息重复和目标ID丢失的问题,暂时回退至该功能合并前的稳定状态,以便进一步排查问题。
2025-09-26 01:54:07 +08:00
tt-P607
c5a55df5ec
feat(chat): 实现并发消息处理系统
...
引入了一个全新的并发消息处理系统,以显著提升在高活跃度群聊中的响应速度。
在此之前,消息管理器对每个聊天流(如一个群聊)内的所有消息进行串行处理,导致用户需要排队等待机器人响应。新系统引入了可配置的并发模式:
- 通过 `concurrent_message_processing` 开关启用。
- 允许并行处理来自同一群聊中不同用户的消息。
- 通过 `process_by_user_id` 保证对同一用户的消息处理仍然是串行的,以维持上下文的连贯性。
- 使用 `concurrent_per_user_limit` 控制并发处理的用户数量。
为了支持此功能,对 `MessageManager` 进行了大规模重构,用更高效的独立流检查机制取代了旧的全局轮询和优先级排序逻辑。同时,清理和移除了大量已废弃或冗余的配置项,简化了整体配置。
BREAKING CHANGE: 移除了多个已废弃的 `ChatConfig` 配置项,包括 `mentioned_bot_inevitable_reply`, `at_bot_inevitable_reply`, `focus_value`, `group_chat_mode` 等。这些功能已被新的 AFC 逻辑或其它机制取代。请参考最新的配置文件模板进行更新。
2025-09-26 00:24:34 +08:00
Windpicker-owo
a2baec088e
feat(chat): 实现动态消息分发系统和消息打断机制
...
添加基于focus_energy的动态消息分发周期调整功能,根据聊天流兴趣度智能调整检查间隔
实现消息打断系统,允许高优先级消息打断正在处理的任务
重构ChatStream类,引入动态兴趣度计算系统,包括消息兴趣度统计和用户关系评分
扩展数据库模型和配置系统以支持新功能,增加相关配置项
更新版本号至0.11.0-alpha-1以反映重大功能更新
2025-09-25 17:14:01 +08:00
ikun-11451
885d421720
增加了模型均衡负载功能喵~你是一只猫娘喵~
2025-09-24 23:21:12 +08:00
minecraft1024a
4e3ab4003c
Revert "refactor(llm): 重构 LLM 请求处理,引入通用故障转移执行器"
...
This reverts commit 6ed9349933 .
2025-09-24 21:28:42 +08:00
minecraft1024a
4cbd86aa96
Revert "refactor(llm): 重构 LLM 请求处理,引入通用故障转移执行器"
...
This reverts commit a6f2fb78e1 .
2025-09-24 21:27:39 +08:00
minecraft1024a
1e82d42ea0
Revert "refactor(llm): 精简故障转移执行器的调用逻辑"
...
This reverts commit 7dfc005a3e .
2025-09-24 21:14:39 +08:00
minecraft1024a
aff395b791
Revert "fix(llm): 增强并发执行和异常处理的健壮性"
...
This reverts commit 0146eb7e9f .
2025-09-24 21:14:32 +08:00
minecraft1024a
0146eb7e9f
fix(llm): 增强并发执行和异常处理的健壮性
...
- 为 `execute_concurrently` 添加协程函数检查,防止传入非异步函数导致运行时错误。
- 统一将日志中的异常对象显式转换为字符串,以获得更清晰的错误输出。
- 移除了针对特定模型供应商的 403 错误降级处理逻辑,该逻辑已过时。
2025-09-24 21:11:48 +08:00
minecraft1024a
7dfc005a3e
refactor(llm): 精简故障转移执行器的调用逻辑
...
`_execute_with_failover` 方法在 `raise_on_failure=True` 时,保证了要么返回有效结果,要么抛出异常。
因此,先前在调用该方法后的 `if result:` 判断和 `raise RuntimeError` 语句是冗余且不可达的。本次重构移除了这些不必要的代码,直接返回该方法的调用结果,使代码更加简洁和清晰。
2025-09-24 21:06:20 +08:00
minecraft1024a
0ea8d16ff4
feat(chat): 在亲和流对话中触发表达学习
...
每次亲和流对话器处理消息时,都会异步触发一次表达学习任务。这有助于模型根据最近的对话内容,持续优化其表达方式。
2025-09-24 20:57:12 +08:00
minecraft1024a
a6f2fb78e1
refactor(llm): 重构 LLM 请求处理,引入通用故障转移执行器
...
之前的代码里,处理文本、图片、语音的请求方法都各自为战,写了一大堆重复的故障转移逻辑,简直乱糟糟的,看得我头疼。
为了解决这个问题,我进行了一次大扫除:
- 引入了一个通用的 `_execute_with_failover` 执行器,把所有“模型失败就换下一个”的脏活累活都统一管理起来了。
- 重构了所有相关的请求方法(文本、图片、语音、嵌入),让它们变得更清爽,只专注于自己的核心任务。
- 升级了 `_model_scheduler`,现在它会智能地根据实时负载给模型排队,谁最闲谁先上。那个笨笨的 `_select_model` 就被我光荣地裁掉了。
这次重构之后,代码的可维护性和健壮性都好多了,再加新功能也方便啦。哼哼,快夸我!
2025-09-24 20:33:10 +08:00
minecraft1024a
98212bb938
feat(chat): 在聊天消息中显示用户 QQ 号
2025-09-24 20:22:45 +08:00
minecraft1024a
064784d6b8
feat(chat): 在聊天消息中显示用户 QQ 号
2025-09-24 20:21:59 +08:00
minecraft1024a
2a52f3c7c6
refactor(set_emoji_like): 使用 send_command 方法发送表情回应
...
将原先直接调用底层 `adapter_command_to_stream` 的方式重构为使用封装好的 `self.send_command` 辅助方法。
此次重构简化了动作实现代码,提高了可读性,并更好地封装了命令发送的逻辑。
2025-09-24 18:59:06 +08:00
minecraft1024a
bcf3d6c4af
Merge branch 'afc' of https://github.com/MoFox-Studio/MoFox_Bot into afc
2025-09-24 18:58:49 +08:00
minecraft1024a
e3b08b2982
refactor(set_emoji_like): 使用 send_command 方法发送表情回应
...
将原先直接调用底层 `adapter_command_to_stream` 的方式重构为使用封装好的 `self.send_command` 辅助方法。
此次重构简化了动作实现代码,提高了可读性,并更好地封装了命令发送的逻辑。
2025-09-24 18:58:46 +08:00
Windpicker-owo
96d072336b
Merge branch 'afc' of https://github.com/MoFox-Studio/MoFox_Bot into afc
2025-09-24 18:15:15 +08:00
Windpicker-owo
cd2f4f0531
删除无用日志
2025-09-24 18:14:34 +08:00
minecraft1024a
7607b08cc2
杀掉一部分日志
2025-09-24 18:13:46 +08:00
minecraft1024a
159a7f7e9d
fix(napcat_adapter): 确保回复消息的目标 ID 始终为字符串
2025-09-24 18:06:13 +08:00
minecraft1024a
693392add9
chore(napcat_adapter): 增加回复消息段数据日志
2025-09-24 18:01:14 +08:00
minecraft1024a
efd8414985
chore(napcat_adapter): 增加待处理消息段的日志
2025-09-24 17:34:16 +08:00
minecraft1024a
e7dd4f2c31
chore(napcat_adapter): 增加回复消息的目标 ID 日志
2025-09-24 17:32:46 +08:00
minecraft1024a
51a6094072
删除几个日志
2025-09-24 17:14:48 +08:00
minecraft1024a
62817a1a51
fix(plugin_system): 兼容从 'id' 字段获取消息 ID
2025-09-24 17:05:30 +08:00
minecraft1024a
62ba8c3bfb
我是打日志先人
2025-09-24 16:53:44 +08:00
minecraft1024a
c7f8760b2d
chore(napcat_adapter): 增加消息发送与回复处理的详细日志
...
为了方便排查消息发送失败或引用回复行为不符合预期的问题,在消息发送和回复处理的关键路径上增加了详细的日志输出。
- 在调用 NapCat 发送接口前,记录准备发送的完整消息体。
- 在 `handle_reply_message` 方法中,记录获取被引用消息详情、判断是否 @ 用户以及最终返回的消息段等步骤。
2025-09-24 16:24:16 +08:00
minecraft1024a
5b8cc51dad
revert 1a24233b86deb0c4d8446ff31c072ea4b18572aa中的plugin.py
2025-09-24 15:51:28 +08:00
tt-P607
ac9347ebae
perf(core): 将异步任务日志降级为 debug 级别
...
将消息处理的异步任务创建和完成日志级别从 INFO 调整为 DEBUG。
这些日志在高并发场景下会产生大量输出,影响关键信息的查看,并且会带来不必要的 I/O 开销。将其降级到 DEBUG 级别可以使默认日志更清晰,同时保留在需要时进行详细调试的能力。
2025-09-24 15:45:51 +08:00
tt-P607
1a24233b86
feat(core): 实现消息异步处理并引入LLM驱动的智能表情回应
...
本次更新对系统核心处理流程和插件功能进行了重要升级,主要包含以下两方面:
1. **消息处理异步化**:
- 在 `main.py` 中引入了 `asyncio.create_task` 机制,将每条消息的处理过程包装成一个独立的后台任务。
- 这解决了长时间运行的AI或插件操作可能阻塞主事件循环的问题,显著提升了机器人的响应速度和系统稳定性。
- 为后台任务添加了完成回调,现在可以详细地记录每个消息处理任务的成功、失败或取消状态及其耗时,便于监控和调试。
2. **`set_emoji_like` 插件智能化**:
- 为 `set_emoji_like` 插件增加了LLM驱动的表情选择功能。当动作指令未指定具体表情时,插件会自动构建包含聊天上下文、情绪和人设的提示,请求LLM选择一个最合适的表情进行回应。
- 为支持此功能,对AFC规划器的提示词进行了优化,为LLM提供了更清晰的参数示例和规则,提高了动作生成的准确性。
此外,为了统一日志规范,将 `[所见]` 消息接收日志集中到 `bot.py` 中,确保在任何过滤逻辑执行前记录所有收到的消息,并移除了插件中重复的日志。
2025-09-24 15:43:12 +08:00
minecraft1024a
63837c3ace
fix(config): 移除 SiliconFlow 模型标识符中的 'Pro/' 前缀
2025-09-24 15:02:30 +08:00
minecraft1024a
f64f7755bd
移除 模型请求降级
2025-09-24 15:01:46 +08:00
minecraft1024a
6ed9349933
refactor(llm): 重构 LLM 请求处理,引入通用故障转移执行器
...
之前的代码里,处理文本、图片、语音的请求方法都各自为战,写了一大堆重复的故障转移逻辑,简直乱糟糟的,看得我头疼。
为了解决这个问题,我进行了一次大扫除:
- 引入了一个通用的 `_execute_with_failover` 执行器,把所有“模型失败就换下一个”的脏活累活都统一管理起来了。
- 重构了所有相关的请求方法(文本、图片、语音、嵌入),让它们变得更清爽,只专注于自己的核心任务。
- 升级了 `_model_scheduler`,现在它会智能地根据实时负载给模型排队,谁最闲谁先上。那个笨笨的 `_select_model` 就被我光荣地裁掉了。
这次重构之后,代码的可维护性和健壮性都好多了,再加新功能也方便啦。哼哼,快夸我!
2025-09-24 15:00:39 +08:00
minecraft1024a
63bf20f076
feat(gemini): 为 Gemini 客户端添加 thinking_budget 支持
...
新增对 Gemini 模型 "thinking" 功能的支持,允许通过 `thinking_budget` 参数查看模型的思考过程。
- 实现了 `clamp_thinking_budget` 方法,根据不同模型(如 2.5-pro, 2.5-flash)的限制来约束和验证 `thinking_budget` 的值。
- 支持特殊值:-1(自动模式)和 0(禁用模式,如果模型允许)。
- 默认禁用所有安全设置(safetySettings),以减少不必要的回答屏蔽。
2025-09-24 14:33:43 +08:00