diff --git a/mofox_bot_statistics.html b/mofox_bot_statistics.html new file mode 100644 index 000000000..0e32cb688 --- /dev/null +++ b/mofox_bot_statistics.html @@ -0,0 +1,833 @@ + + + + + + MoFox-Bot运行统计报告 + + + + +
+

MoFox-Bot运行统计报告

+

统计截止时间: 2025-11-13 12:50:57

+
+ + + + +
+
+
+
+

+ 统计时段: + 2025-11-06 12:50:57 ~ 2025-11-13 12:50:57 +

+ +
+
+

总花费

+

0.0000 ¥

+
+
+

总请求数

+

0

+
+
+

总Token数

+

0

+
+
+

总消息数

+

0

+
+
+

总在线时间

+

4小时31分钟40秒

+
+
+ + +

按模型分类统计

+ + + +
模型名称调用次数平均Token数Token总量TPS每K Token成本累计花费平均耗时(秒)
+ +

按供应商分类统计

+ + + +
供应商名称调用次数Token总量TPS每K Token成本累计花费
+ +

按模块分类统计

+ + + + + +
模块名称调用次数输入Token输出TokenToken总量累计花费平均耗时(秒)标准差(秒)
+ +

按请求类型分类统计

+ + + + + +
请求类型调用次数输入Token输出TokenToken总量累计花费平均耗时(秒)标准差(秒)
+ +

聊天消息统计

+ + + + + +
联系人/群组名称消息数量
+
+ +
+
+
+
+
+

+ 统计时段: + 2025-11-12 12:50:57 ~ 2025-11-13 12:50:57 +

+ +
+
+

总花费

+

0.0000 ¥

+
+
+

总请求数

+

0

+
+
+

总Token数

+

0

+
+
+

总消息数

+

0

+
+
+

总在线时间

+

30分钟8秒

+
+
+ + +

按模型分类统计

+ + + +
模型名称调用次数平均Token数Token总量TPS每K Token成本累计花费平均耗时(秒)
+ +

按供应商分类统计

+ + + +
供应商名称调用次数Token总量TPS每K Token成本累计花费
+ +

按模块分类统计

+ + + + + +
模块名称调用次数输入Token输出TokenToken总量累计花费平均耗时(秒)标准差(秒)
+ +

按请求类型分类统计

+ + + + + +
请求类型调用次数输入Token输出TokenToken总量累计花费平均耗时(秒)标准差(秒)
+ +

聊天消息统计

+ + + + + +
联系人/群组名称消息数量
+
+ +
+
+
+
+
+

+ 统计时段: + 2025-11-13 09:50:57 ~ 2025-11-13 12:50:57 +

+ +
+
+

总花费

+

0.0000 ¥

+
+
+

总请求数

+

0

+
+
+

总Token数

+

0

+
+
+

总消息数

+

0

+
+
+

总在线时间

+

17分钟39秒

+
+
+ + +

按模型分类统计

+ + + +
模型名称调用次数平均Token数Token总量TPS每K Token成本累计花费平均耗时(秒)
+ +

按供应商分类统计

+ + + +
供应商名称调用次数Token总量TPS每K Token成本累计花费
+ +

按模块分类统计

+ + + + + +
模块名称调用次数输入Token输出TokenToken总量累计花费平均耗时(秒)标准差(秒)
+ +

按请求类型分类统计

+ + + + + +
请求类型调用次数输入Token输出TokenToken总量累计花费平均耗时(秒)标准差(秒)
+ +

聊天消息统计

+ + + + + +
联系人/群组名称消息数量
+
+ +
+
+
+
+
+

+ 统计时段: + 2025-11-13 11:50:57 ~ 2025-11-13 12:50:57 +

+ +
+
+

总花费

+

0.0000 ¥

+
+
+

总请求数

+

0

+
+
+

总Token数

+

0

+
+
+

总消息数

+

0

+
+
+

总在线时间

+

13分钟56秒

+
+
+ + +

按模型分类统计

+ + + +
模型名称调用次数平均Token数Token总量TPS每K Token成本累计花费平均耗时(秒)
+ +

按供应商分类统计

+ + + +
供应商名称调用次数Token总量TPS每K Token成本累计花费
+ +

按模块分类统计

+ + + + + +
模块名称调用次数输入Token输出TokenToken总量累计花费平均耗时(秒)标准差(秒)
+ +

按请求类型分类统计

+ + + + + +
请求类型调用次数输入Token输出TokenToken总量累计花费平均耗时(秒)标准差(秒)
+ +

聊天消息统计

+ + + + + +
联系人/群组名称消息数量
+
+ +
+
+
+
+
+

+ 统计时段: + 2025-10-02 21:26:50 ~ 2025-11-13 12:50:57 +

+ +
+
+

总花费

+

2234.0000 ¥

+
+
+

总请求数

+

2234

+
+
+

总Token数

+

1218356

+
+
+

总消息数

+

994

+
+
+

总在线时间

+

4小时57分钟30秒

+
+
+ + +

按模型分类统计

+ + + + + + + + + + + + +
模型名称调用次数平均Token数Token总量TPS每K Token成本累计花费平均耗时(秒)
BAAI/bge-m311210482560.000.0000 ¥1121.0000 ¥78.608 秒
Qwen/Qwen2.5-VL-72B-Instruct500667000.000.0000 ¥50.0000 ¥366.725 秒
Qwen/Qwen3-14B700901910.000.0000 ¥70.0000 ¥31.441 秒
Qwen/Qwen3-30B-A3B45302819440.000.0000 ¥453.0000 ¥75.589 秒
Qwen/Qwen3-8B9066820.000.0000 ¥9.0000 ¥8.275 秒
deepseek-ai/DeepSeek-R1-Distill-Qwen-32B210118110.000.0000 ¥21.0000 ¥11.524 秒
deepseek-ai/DeepSeek-V3.1-Terminus42806232240.000.0000 ¥428.0000 ¥2324.821 秒
deepseek-ai/DeepSeek-V3.2-Exp3042670.000.0000 ¥3.0000 ¥80.927 秒
gemini-2.5-pro690681950.000.0000 ¥69.0000 ¥898.429 秒
moonshotai/Kimi-K2-Instruct100170860.000.0000 ¥10.0000 ¥35.644 秒
+ +

按供应商分类统计

+ + + +
供应商名称调用次数Token总量TPS每K Token成本累计花费
+ +

按模块分类统计

+ + + + + + + + + + + + + + + + + + + + + + + + +
模块名称调用次数输入Token输出TokenToken总量累计花费平均耗时(秒)标准差(秒)
action372210218372210590372.0000 ¥61.562 秒28.224 秒
chat16323381493248716.0000 ¥347.109 秒1.013 秒
chat_stream_impression_update4250492634304.0000 ¥38.162 秒0.000 秒
embedding35631947031947356.0000 ¥71.454 秒12.687 秒
emoji238057744880123.0000 ¥248.367 秒3.224 秒
expressor57461351684630357.0000 ¥453.845 秒282.887 秒
image415260761695877641.0000 ¥268.468 秒31.588 秒
individuality1140231631.0000 ¥1.808 秒0.000 秒
interest_embedding76516309016309765.0000 ¥30.717 秒6.880 秒
interest_generation296531612812.0000 ¥50.171 秒0.000 秒
memory13917718231665208847139.0000 ¥1306.658 秒45.801 秒
monthly_plan274035310932.0000 ¥10.196 秒0.000 秒
mood12640413162142034126.0000 ¥585.337 秒298.293 秒
planner611576721008516775761.0000 ¥310.203 秒18.367 秒
plugin15624858312858261441156.0000 ¥576.318 秒112.317 秒
relationship_tracker199523212271.0000 ¥17.689 秒0.000 秒
schedule15836094611782115.0000 ¥388.476 秒0.000 秒
tool_executor708885813339019170.0000 ¥31.441 秒4.774 秒
unknown21443573761181121.0000 ¥11.524 秒3.068 秒
video_analysis63306274160476.0000 ¥18.737 秒3.772 秒
+ +

按请求类型分类统计

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
请求类型调用次数输入Token输出TokenToken总量累计花费平均耗时(秒)标准差(秒)
action.judge372210218372210590372.0000 ¥61.562 秒28.224 秒
chat.replyer16323381493248716.0000 ¥347.109 秒1.013 秒
chat_stream_impression_update4250492634304.0000 ¥38.162 秒0.000 秒
embedding35631947031947356.0000 ¥71.454 秒12.687 秒
emoji238057744880123.0000 ¥248.367 秒3.224 秒
expressor.learner57461351684630357.0000 ¥453.845 秒282.887 秒
image415260761695877641.0000 ¥268.468 秒31.588 秒
individuality.compress1140231631.0000 ¥1.808 秒0.000 秒
interest_embedding76516309016309765.0000 ¥30.717 秒6.880 秒
interest_generation296531612812.0000 ¥50.171 秒0.000 秒
memory.extraction551150322268413771655.0000 ¥1287.156 秒0.000 秒
memory.query_planner724764572625490772.0000 ¥75.871 秒13.881 秒
memory.value_assessment121450517191622412.0000 ¥43.272 秒0.136 秒
monthly_plan274035310932.0000 ¥10.196 秒0.000 秒
mood12640413162142034126.0000 ¥585.337 秒298.293 秒
planner611576721008516775761.0000 ¥310.203 秒18.367 秒
plugin.generate15024168912847254536150.0000 ¥572.632 秒112.215 秒
plugin.set_emoji_like.select_emoji668941169056.0000 ¥3.686 秒0.102 秒
relationship_tracker199523212271.0000 ¥17.689 秒0.000 秒
schedule15836094611782115.0000 ¥388.476 秒0.000 秒
tool_executor708885813339019170.0000 ¥31.441 秒4.774 秒
unknown21443573761181121.0000 ¥11.524 秒3.068 秒
video_analysis63306274160476.0000 ¥18.737 秒3.772 秒
+ +

聊天消息统计

+ + + + + + + + + + +
联系人/群组名称消息数量
MaiCore答疑群(尊王攘夷)50
因为没有群了所以只能拿这个测试了331
墨狐狐🌟起源之地590
亚马逊雨林,一处任何人也找不到的角落(4
墨狐5
一闪14
+
+ +
+
+
+

数据图表

+
+ + + + + +
+
+
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/src/chat/utils/attention_optimizer.py b/src/chat/utils/attention_optimizer.py index 770f17da9..e8210a685 100644 --- a/src/chat/utils/attention_optimizer.py +++ b/src/chat/utils/attention_optimizer.py @@ -13,7 +13,7 @@ import hashlib import random import re -from typing import Any, Literal +from typing import Any, ClassVar, Literal from src.common.logger import get_logger from src.config.config import global_config @@ -26,7 +26,7 @@ class AttentionOptimizer: # 可交换的block组定义(组内block可以随机排序) # 每个组是一个列表,包含可以互换位置的block名称 - SWAPPABLE_BLOCK_GROUPS = [ + SWAPPABLE_BLOCK_GROUPS:ClassVar = [ # 用户相关信息组(记忆、关系、表达习惯) ["memory_block", "relation_info_block", "expression_habits_block"], # 上下文增强组(工具、知识、跨群) @@ -37,7 +37,7 @@ class AttentionOptimizer: # 语义等价的文本替换模板 # 格式: {原始文本: [替换选项1, 替换选项2, ...]} - SEMANTIC_VARIANTS = { + SEMANTIC_VARIANTS:ClassVar = { "当前时间": ["当前时间", "现在是", "此时此刻", "时间"], "最近的系统通知": ["最近的系统通知", "系统通知", "通知消息", "最新通知"], "聊天历史": ["聊天历史", "对话记录", "历史消息", "之前的对话"], @@ -125,7 +125,7 @@ class AttentionOptimizer: for group in self.SWAPPABLE_BLOCK_GROUPS: # 过滤出实际存在且非空的block existing_blocks = [ - block for block in group if block in context_data and context_data[block] + block for block in group if context_data.get(block) ] if len(existing_blocks) > 1: diff --git a/src/common/database/config/__init__.py b/src/common/database/config/__init__.py deleted file mode 100644 index 903651d74..000000000 --- a/src/common/database/config/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -"""数据库配置层 - -职责: -- 数据库配置现已集成到全局配置中 -- 通过 src.config.config.global_config.database 访问 -- 优化参数配置 - -注意:此模块已废弃,配置已迁移到 global_config -""" - -__all__ = [] diff --git a/src/common/database/config/old/database_config.py b/src/common/database/config/old/database_config.py deleted file mode 100644 index 71cc9824b..000000000 --- a/src/common/database/config/old/database_config.py +++ /dev/null @@ -1,149 +0,0 @@ -"""数据库配置管理 - -统一管理数据库连接配置 -""" - -import os -from dataclasses import dataclass -from typing import Any -from urllib.parse import quote_plus - -from src.common.logger import get_logger - -logger = get_logger("database_config") - - -@dataclass -class DatabaseConfig: - """数据库配置""" - - # 基础配置 - db_type: str # "sqlite" 或 "mysql" - url: str # 数据库连接URL - - # 引擎配置 - engine_kwargs: dict[str, Any] - - # SQLite特定配置 - sqlite_path: str | None = None - - # MySQL特定配置 - mysql_host: str | None = None - mysql_port: int | None = None - mysql_user: str | None = None - mysql_password: str | None = None - mysql_database: str | None = None - mysql_charset: str = "utf8mb4" - mysql_unix_socket: str | None = None - - -_database_config: DatabaseConfig | None = None - - -def get_database_config() -> DatabaseConfig: - """获取数据库配置 - - 从全局配置中读取数据库设置并构建配置对象 - """ - global _database_config - - if _database_config is not None: - return _database_config - - from src.config.config import global_config - - config = global_config.database - - # 构建数据库URL - if config.database_type == "mysql": - # MySQL配置 - encoded_user = quote_plus(config.mysql_user) - encoded_password = quote_plus(config.mysql_password) - - if config.mysql_unix_socket: - # Unix socket连接 - encoded_socket = quote_plus(config.mysql_unix_socket) - url = ( - f"mysql+aiomysql://{encoded_user}:{encoded_password}" - f"@/{config.mysql_database}" - f"?unix_socket={encoded_socket}&charset={config.mysql_charset}" - ) - else: - # TCP连接 - url = ( - f"mysql+aiomysql://{encoded_user}:{encoded_password}" - f"@{config.mysql_host}:{config.mysql_port}/{config.mysql_database}" - f"?charset={config.mysql_charset}" - ) - - engine_kwargs = { - "echo": False, - "future": True, - "pool_size": config.connection_pool_size, - "max_overflow": config.connection_pool_size * 2, - "pool_timeout": config.connection_timeout, - "pool_recycle": 3600, - "pool_pre_ping": True, - "connect_args": { - "autocommit": config.mysql_autocommit, - "charset": config.mysql_charset, - "connect_timeout": config.connection_timeout, - }, - } - - _database_config = DatabaseConfig( - db_type="mysql", - url=url, - engine_kwargs=engine_kwargs, - mysql_host=config.mysql_host, - mysql_port=config.mysql_port, - mysql_user=config.mysql_user, - mysql_password=config.mysql_password, - mysql_database=config.mysql_database, - mysql_charset=config.mysql_charset, - mysql_unix_socket=config.mysql_unix_socket, - ) - - logger.info( - f"MySQL配置已加载: " - f"{config.mysql_user}@{config.mysql_host}:{config.mysql_port}/{config.mysql_database}" - ) - - else: - # SQLite配置 - if not os.path.isabs(config.sqlite_path): - ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "..", "..")) - db_path = os.path.join(ROOT_PATH, config.sqlite_path) - else: - db_path = config.sqlite_path - - # 确保数据库目录存在 - os.makedirs(os.path.dirname(db_path), exist_ok=True) - - url = f"sqlite+aiosqlite:///{db_path}" - - engine_kwargs = { - "echo": False, - "future": True, - "connect_args": { - "check_same_thread": False, - "timeout": 60, - }, - } - - _database_config = DatabaseConfig( - db_type="sqlite", - url=url, - engine_kwargs=engine_kwargs, - sqlite_path=db_path, - ) - - logger.info(f"SQLite配置已加载: {db_path}") - - return _database_config - - -def reset_database_config(): - """重置数据库配置(用于测试)""" - global _database_config - _database_config = None