Commit Graph

38 Commits

Author SHA1 Message Date
minecraft1024a
f9c02520d0 feat(llm): 在负载均衡中引入延迟作为考量因素
为了更智能地选择模型,负载均衡算法现在会考虑模型的平均响应延迟。延迟较高的模型将受到惩罚,从而优先选择响应更快的模型。

- 使用 `namedtuple` (`ModelUsageStats`) 替代了原有的元组来存储模型使用统计信息,提高了代码的可读性和可维护性。
- 在模型选择的评分公式中增加了 `avg_latency` 权重,使算法能够动态适应模型的性能变化。
- 更新了 `LLMRequest` 类,以在每次成功请求后计算并更新模型的平均延迟。
2025-10-07 20:29:09 +08:00
sunbiz1024
8f4f7d19af ruff 2025-10-06 09:38:16 +08:00
Windpicker-owo
28afc09d31 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-10-06 01:07:08 +08:00
Windpicker-owo
82ba5e2ed8 feat(model): 优化客户端缓存和事件循环检测机制
- 在 ClientRegistry 中添加事件循环变化检测,自动处理缓存失效
- 为 OpenaiClient 实现全局 AsyncOpenAI 客户端缓存,提升连接池复用效率
- 将 utils_model 中的同步方法改为异步,确保与事件循环兼容
- 移除 embedding 请求的特殊处理,现在所有请求都能享受缓存优势
- 添加缓存统计功能,便于监控和调试
2025-10-06 01:05:50 +08:00
minecraft1024a
9d705463ce ruff fix但指定了--unsafe-fixes 2025-10-05 21:48:32 +08:00
John Richard
7923eafef3 re-style: 格式化代码 2025-10-02 20:26:01 +08:00
John Richard
ecb02cae31 style: 格式化代码 2025-10-02 19:38:39 +08:00
Windpicker-owo
bce623a58b refactor(storage): 迁移记忆系统架构至现代化Vector DB方案
重构记忆存储层,采用ChromaDB作为核心向量数据库引擎,提升系统可扩展性和查询性能。通过引入VectorMemoryStorage替代原有的UnifiedMemoryStorage实现,实现了更高效的向量索引和检索机制。

主要变更包括:
- 架构层面:完全重构记忆存储抽象层,移除577行旧存储实现代码
- 配置系统:新增41项Vector DB专用配置参数,支持细粒度性能调优
- 查询优化:增强ChromaDB查询条件处理器,添加智能回退机制
- 系统集成:更新记忆系统初始化流程,适配新的存储接口
- 类型安全:修复异步调用类型不匹配问题

BREAKING CHANGE: 记忆存储API接口发生重大变更,UnifiedMemoryStorage相关类已废弃
2025-10-02 00:28:55 +08:00
tt-P607
9608a040a6 refactor(llm_models): 将用量记录函数改为异步以支持数据库写入
将 `LLMUsageRecorder` 中的 `record_usage_to_database` 和 `LLMRequest` 中的 `_record_usage` 方法从同步转换为异步。

此项重构是为了支持异步数据库操作,避免在记录模型用量时阻塞事件循环,从而提升应用的整体性能和响应能力。
2025-09-26 21:59:38 +08:00
minecraft1024a
50835498f0 refactor(llm_models): 将 LLMRequest 重构为模块化的策略驱动架构
此次重构旨在分解原有的单体 `LLMRequest` 类,以提高代码的可维护性、可扩展性和健壮性。通过引入多个遵循单一职责原则的内部辅助类,请求生命周期的各个阶段被清晰地分离开来。

主要变更包括:

- **引入 `_ModelSelector`**: 专门负责模型的动态选择、负载均衡和失败惩罚策略。该策略现在能对网络错误和服务器错误等严重问题施加更高的惩罚。

- **引入 `_PromptProcessor`**: 封装所有与提示词相关的处理逻辑,包括内容混淆、反截断指令注入以及响应内容的后处理(如提取思考过程)。

- **引入 `_RequestExecutor`**: 负责执行底层的API请求,包含自动重试、异常分类和消息体压缩等功能。

- **引入 `_RequestStrategy`**: 实现高阶请求策略,如模型间的故障转移(Failover),确保单个模型的失败不会导致整个请求失败。

`LLMRequest` 类现在作为外观(Facade),协调这些内部组件,为上层调用提供了更简洁、稳定的接口。
2025-09-26 21:17:34 +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
a6f2fb78e1 refactor(llm): 重构 LLM 请求处理,引入通用故障转移执行器
之前的代码里,处理文本、图片、语音的请求方法都各自为战,写了一大堆重复的故障转移逻辑,简直乱糟糟的,看得我头疼。

为了解决这个问题,我进行了一次大扫除:

- 引入了一个通用的 `_execute_with_failover` 执行器,把所有“模型失败就换下一个”的脏活累活都统一管理起来了。
- 重构了所有相关的请求方法(文本、图片、语音、嵌入),让它们变得更清爽,只专注于自己的核心任务。
- 升级了 `_model_scheduler`,现在它会智能地根据实时负载给模型排队,谁最闲谁先上。那个笨笨的 `_select_model` 就被我光荣地裁掉了。

这次重构之后,代码的可维护性和健壮性都好多了,再加新功能也方便啦。哼哼,快夸我!
2025-09-24 20:33:10 +08:00
Windpicker-owo
8149731925 修复代码格式和文件名大小写问题 2025-08-31 20:50:17 +08:00
tt-P607
a7b16cae0b refactor(llm_models): 优化反截断机制并迁移配置
将反截断功能的启用配置从API服务商级别迁移到单个模型级别,提供了更细粒度的控制。

主要变更:
- 在`LLMRequest`中,将硬编码的结束标记`[done]`替换为可配置的`self.end_marker`。
- 反截断检查逻辑从`api_provider`配置改为读取`model_info`中的`use_anti_truncation`布尔值。
- 更新了`model_config_template.toml`,移除了全局的反截断开关,并为每个模型增加了可选的`use_anti_truncation`配置项。
2025-08-30 19:08:43 +08:00
minecraft1024a
88f7ea4d8b refactor(llm_models): 优化并发请求的返回值处理
修改了`execute_concurrently`的返回逻辑,将其解包以分别返回`content`和包含`reasoning_content`, `model_name`, `tool_calls`的元组。这使得调用方能更清晰地处理并发请求的结果。
2025-08-29 20:34:23 +08:00
Furina-1013-create
bbebca832f 解决某人不会改的日志刷屏问题,是谁我不说() 2025-08-29 12:09:27 +08:00
minecraft1024a
eb1feeeb0b refactor(cache): 重构工具缓存机制并优化LLM请求重试逻辑
将工具缓存的实现从`ToolExecutor`的装饰器模式重构为直接集成。缓存逻辑被移出`cache_manager.py`并整合进`ToolExecutor.execute_tool_call`方法中,简化了代码结构并使其更易于维护。

主要变更:
- 从`cache_manager.py`中移除了`wrap_tool_executor`函数。
- 在`tool_use.py`中,`execute_tool_call`现在包含完整的缓存检查和设置逻辑。
- 调整了`llm_models/utils_model.py`中的LLM请求逻辑,为模型生成的空回复或截断响应增加了内部重试机制,增强了稳定性。
- 清理了项目中未使用的导入和过时的文档文件,以保持代码库的整洁。
2025-08-28 20:10:32 +08:00
minecraft1024a
1b86fff855 feat(llm):为LLM请求实现模型故障转移机制
重构了LLM请求执行逻辑,以引入一个健壮的模型故障转移和回退系统。这通过在当前模型失败时自动切换到下一个可用模型,增强了服务的可靠性。

- 引入 `_model_scheduler` 以按顺序迭代任务配置的模型列表。
- 当模型请求因API错误、认证问题或超时等原因失败时,系统现在会自动使用列表中的下一个模型重试该请求。
- 移除了先前针对空回复或截断响应的内部重试逻辑。这类响应现在被视为特定模型尝试的最终失败,不会触发故障转移。
2025-08-28 19:56:59 +08:00
Windpicker-owo
bbbb9df112 修复空回复检测,同时修复tool_call 2025-08-27 17:39:28 +08:00
minecraft1024a
51cb1688f8 chore(llm_models): 在 LLMRequest 初始化中定义 model_name 变量,來修复某些神秘的bug 2025-08-26 21:54:20 +08:00
minecraft1024a
c63de5ddd5 refactor(config): 将反截断设置移至模型配置 #真的能算refactor吗
反截断(anti-truncation)功能与特定模型的行为和能力更为相关,而不是任务本身的属性。

此更改将该设置从 `TaskConfig` 移动到 `ModelInfo`,以实现更合理的配置分组和更精细的控制。代码逻辑和配置文件模板也已相应更新。

BREAKING CHANGE: `anti_truncation` 配置项已从 `[model_task_config]` 部分移动到 `[[models]]` 下的具体模型配置中。用户需要更新其配置文件以适配新结构。
2025-08-26 20:45:04 +08:00
tt-P607
45ccab6033 fix(llm_models): 修复模型信息不存在时引发的属性错误
在处理模型信息 `model_info` 为 `None` 的情况下,直接访问 `model_info.name` 会导致 `AttributeError`。

此提交通过以下方式修复了该问题:
- 在 `_select_model` 调用后立即将 `model_info.name` 赋值给 `model_name` 变量,确保后续使用时该变量已定义。
- 在 `_handle_error` 方法中,当 `model_info` 可能为 `None` 时,增加了一个条件检查,如果 `model_info` 不存在,则将 `model_name` 设为 "unknown",从而避免了潜在的 `AttributeError`。
2025-08-26 12:01:39 +08:00
tt-P607
21aec70e92 我或许修好了反截断?但我无法验证,用gemini 2.5 pro生成日程截断太严重了,连完整的二十四小时都无法输出,gemini 2.5 Flash截断好很多,我试了5次生成的都是完整的,可能修好了?但有待验证,建议在待办上打个问号 2025-08-25 01:55:18 +08:00
雅诺狐
9c8fb929e1 Merge branch 'master' of https://github.com/MaiBot-Plus/MaiMbot-Pro-Max 2025-08-21 21:31:47 +08:00
雅诺狐
618561096d feat: 模型请求降级 2025-08-21 21:31:42 +08:00
minecraft1024a
3c891f08e5 feat(config): 新增反截断功能防止模型输出截断
在任务配置中增加 anti_truncation 开关,支持在生成大段文本时防止被意外截断。启用后会在 prompt 中添加指示模型输出完成信令的指令,并在检测到未正常结束时触发自动重试机制。(我相信这次的一定不会炸飞你们了)
2025-08-21 20:29:37 +08:00
minecraft1024a
3bef6f4bab fix(embedding): 彻底解决事件循环冲突导致的嵌入生成异常
通过以下改动修复嵌入生成过程中的事件循环相关问题:
- 在 EmbeddingStore._get_embedding 中,改为同步创建-使用-销毁的新事件循环模式,彻底避免嵌套事件循环问题
- 调整批量嵌入 _get_embeddings_batch_threaded,确保每个线程使用独立、短生命周期的事件循环
- 新增 force_new 参数,LLM 请求嵌入任务时强制创建新的客户端实例,减少跨循环对象复用
- 在 OpenAI 客户端的 embedding 调用处补充详细日志,方便排查网络连接异常
- get_embedding() 每次都重建 LLMRequest,降低实例在多个事件循环中穿梭的概率

此次改动虽然以同步风格“硬掰”异步接口,但对现有接口零破坏,确保了向量数据库及相关知识检索功能的稳定性。(还有就是把的脚本文件夹移回来了)
2025-08-19 20:41:00 +08:00
minecraft1024a
95bbcaff18 refactor(llm_models): 重构并发请求逻辑以提高代码复用性
将并发请求的通用逻辑提取到一个新的 `execute_concurrently` 辅助函数中。此举简化了 `LLMRequest.get_response` 方法,使其更易于阅读和维护。

现在,`get_response` 方法调用 `execute_concurrently` 来处理并发执行,而不是在方法内部直接管理任务创建和结果收集。同时,改进了单个请求失败时的异常处理和重试逻辑,使其在并发和非并发模式下都更加健壮。

Co-authored-by: 雅诺狐 <foxcyber907@users.noreply.github.com>
2025-08-17 12:12:12 +08:00
雅诺狐
7dfaf54c9c llm统计记录模型反应时间 2025-08-16 14:26:18 +08:00
minecraft1024a
54565a405c 添加并发请求支持,更新LLMRequest类以允许根据配置的并发数量进行异步请求 2025-08-16 13:39:49 +08:00
minecraft1024a
602653c8c0 优化API调用超时提示信息,增加空回复重试逻辑(应该能用) 2025-08-13 17:56:32 +08:00
minecraft1024a
c0720a72cb 优化图片格式处理,统一将'jpg'格式转换为'jpeg',新增标准化和MIME类型转换功能,以确保API兼容性和提高代码可读性(最主要的还是为了gemini) 2025-08-13 13:20:15 +08:00
minecraft1024a
417f5647b5 feat:新增内容混淆功能:在API配置中添加混淆选项及强度设置;更新LLM请求处理逻辑以支持内容混淆,包含随机乱码注入和过滤规则指令(最主要的是防**google的审查) 2025-08-12 14:31:59 +08:00
雅诺狐
2d4745cd58 初始化 2025-08-11 19:34:18 +08:00