feat(proactive_thinking): 实现一半并重构主动思考功能

重构了主动思考插件的底层逻辑,将其拆分为两个独立的后台任务,以实现更精细和人性化的主动交互策略。

- **`ColdStartTask` (破冰任务)**:
  - 专门处理在私聊白名单中但从未有过交互的用户。
  - 任务启动时,会扫描白名单,为新用户主动创建聊天流并发起初次问候,实现“破冰”效果。
  - 解决了之前版本无法主动与全新用户建立联系的问题。

- **`ProactiveThinkingTask` (日常唤醒任务)**:
  - 负责维护现有聊天流的活跃度。
  - 采用动态间隔机制,结合基础间隔、随机扰动和每日不同时段的活跃度因子,模拟更自然的聊天发起时机。
  - 持续监控已建立的聊天,在对话冷却后适时地重新发起话题。

- **配置结构优化**:
  - 在 `bot_config_template.toml` 中新增了 `[proactive_thinking]` 配置节,统一管理所有相关配置。
  - 提供了更清晰的选项,如总开关、冷启动开关、白名单设置等,提升了易用性和可配置性。
  - 修正了 `config.py` 中错误的字段名 (`ProactiveThinking` -> `proactive_thinking`),确保与配置文件一致。
This commit is contained in:
minecraft1024a
2025-10-02 11:04:45 +08:00
parent 62d0498ea2
commit 6b7c9b5572
4 changed files with 238 additions and 61 deletions

View File

@@ -1,5 +1,5 @@
[inner]
version = "7.1.3"
version = "7.1.4"
#----以下是给开发人员阅读的如果你只是部署了MoFox-Bot不需要阅读----
#如果你想要修改配置文件请递增version的值
@@ -133,54 +133,6 @@ dynamic_distribution_max_interval = 30.0 # 最大分发间隔(秒)
dynamic_distribution_jitter_factor = 0.2 # 分发间隔随机扰动因子
max_concurrent_distributions = 10 # 最大并发处理的消息流数量可以根据API性能和服务器负载调整
talk_frequency_adjust = [
["", "8:00,1", "12:00,1.2", "18:00,1.5", "01:00,0.6"],
["qq:114514:group", "12:20,1", "16:10,2", "20:10,1", "00:10,0.3"],
["qq:1919810:private", "8:20,1", "12:10,2", "20:10,1.5", "00:10,0.2"]
]
# 基于聊天流的个性化活跃度配置
# 格式:[["platform:chat_id:type", "HH:MM,frequency", "HH:MM,frequency", ...], ...]
# 全局配置示例:
# [["", "8:00,1", "12:00,2", "18:00,1.5", "00:00,0.5"]]
# 特定聊天流配置示例:
# [
# ["", "8:00,1", "12:00,1.2", "18:00,1.5", "01:00,0.6"], # 全局默认配置
# ["qq:1026294844:group", "12:20,1", "16:10,2", "20:10,1", "00:10,0.3"], # 特定群聊配置
# ["qq:729957033:private", "8:20,1", "12:10,2", "20:10,1.5", "00:10,0.2"] # 特定私聊配置
# ]
# 说明:
# - 当第一个元素为空字符串""时,表示全局默认配置
# - 当第一个元素为"platform:id:type"格式时,表示特定聊天流配置
# - 后续元素是"时间,频率"格式,表示从该时间开始使用该活跃度,直到下一个时间点
# - 优先级:特定聊天流配置 > 全局配置 > 默认 talk_frequency
# 主动思考功能配置仅在focus模式下生效
enable_proactive_thinking = false # 是否启用主动思考功能
proactive_thinking_interval = 1500 # 主动思考触发间隔时间默认1500秒25分钟
# TIPS:
# 创意玩法可以设置为0设置为0时将基于delta_sigma生成纯随机间隔
# 负数保险:如果出现了负数,会自动使用绝对值
proactive_thinking_in_private = true # 主动思考可以在私聊里面启用
proactive_thinking_in_group = true # 主动思考可以在群聊里面启用
# 主动思考启用范围配置 - 按平台和类型分别配置,建议平台配置为小写
# 格式:["platform:user_id", "platform:user_id", ...]
# 示例:["qq:123456789", "telegram:user123", "bilibili:987654321"]
proactive_thinking_enable_in_private = [] # 启用主动思考的私聊范围,为空则不限制
proactive_thinking_enable_in_groups = [] # 启用主动思考的群聊范围,为空则不限制
delta_sigma = 120 # 正态分布的标准差,控制时间间隔的随机程度
# 特殊用法:
# - 设置为0禁用正态分布使用固定间隔
# - 设置得很大如6000产生高度随机的间隔即使基础间隔为0也能工作
# - 负数会自动转换为正数,不用担心配置错误以及极端边界情况
# 实验建议:试试 proactive_thinking_interval=0 + delta_sigma 非常大 的纯随机模式!
# 结果保证生成的间隔永远为正数负数会取绝对值最小1秒最大24小时
[relationship]
enable_relationship = true # 是否启用关系系统
@@ -570,4 +522,33 @@ relationship_weight = 0.3 # 人物关系分数权重
# 提及bot相关参数
mention_bot_adjustment_threshold = 0.3 # 提及bot后的调整阈值
mention_bot_interest_score = 0.6 # 提及bot的兴趣分
base_relationship_score = 0.3 # 基础人物关系分
base_relationship_score = 0.3 # 基础人物关系分
[proactive_thinking] # 主动思考(主动发起对话)功能配置
# --- 总开关 ---
enable = true # 是否启用主动发起对话功能
# --- 触发时机 ---
# 基础触发间隔AI会围绕这个时间点主动发起对话
interval = 1500 # 默认25分钟
# 间隔随机化标准差让触发时间更自然。设为0则为固定间隔。
interval_sigma = 120
# 每日活跃度调整,格式:[["", "HH:MM,factor", ...], ["stream_id", ...]]
# factor > 1.0 会缩短思考间隔更活跃factor < 1.0 会延长间隔。
talk_frequency_adjust = [['', '8:00,1', '12:00,1.2', '18:00,1.5', '01:00,0.6']]
# --- 作用范围 ---
enable_in_private = true # 是否允许在私聊中主动发起对话
enable_in_group = true # 是否允许在群聊中主动发起对话
# 私聊白名单,为空则对所有私聊生效
# 格式: ["platform:user_id", ...] e.g., ["qq:123456"]
enabled_private_chats = []
# 群聊白名单,为空则对所有群聊生效
# 格式: ["platform:group_id", ...] e.g., ["qq:7891011"]
enabled_group_chats = []
# --- 冷启动配置 (针对私聊) ---
# 对于白名单中不活跃的私聊,是否允许进行一次“冷启动”问候
enable_cold_start = true
# 冷启动后,该私聊的下一次主动思考需要等待的最小时间(秒)
cold_start_cooldown = 86400 # 默认24小时