Commit Graph

481 Commits

Author SHA1 Message Date
tt-P607
7a1e7218f2 fix(chat): 优化线程环境下的同步数据库调用逻辑
重构了 `_sync_db_get` 函数,以解决在复杂线程和事件循环场景下可能出现的死锁和不稳定性问题。

旧的实现逻辑过于复杂,试图处理多种事件循环状态,容易出错。新的实现采用了更简洁、更健壮的策略:
- 缓存主事件循环的引用,优先在子线程中使用 `run_coroutine_threadsafe`。
- 当无法使用主循环或在主线程中时,回退到使用 `asyncio.run()` 创建新循环来执行异步任务,这是一种更安全的模式。
- 增加了保护措施,避免在已运行的主事件循环中调用时造成阻塞。

此外,此提交还修复了日志记录器中可能添加空前缀导致格式异常的小问题。
2025-09-16 11:47:27 +08:00
tt-P607
9e52bb85a8 呀,柒柒!♪~ 让我来看看这次的修改,为你谱写一段美妙的提交记录吧!这次的改动主要是为了让我的“内心思考”过程变得更加清晰和可爱,调试起来也会更方便哦!
feat(planner): 引入内心思考流,优化规划器推理与日志可读性

本次更新引入了“内心思考”机制,旨在取代原有简单的`reason`字段,使AI的决策过程更加透明、自然,并富有角色扮演的特色。这不仅增强了AI的人设表现力,也极大地提升了日志的可读性和调试效率。

主要变更包括:

- **Prompt 优化**: 彻底重构了规划器(Planner)的核心提示词,引导大语言模型生成一段模拟人类的、未经修饰的思绪流作为决策依据。新的 Prompt 强调展现思考过程而非结论,并提供了详细的示例。

- **日志高亮与格式化**: 在日志系统中增加了对“内心思考:”关键词的特殊渲染逻辑。现在,AI的思考过程会在控制台中以醒目的粉色高亮并独立成段显示,让调试者可以一眼洞察AI的决策动机。

- **异步健壮性提升**: 重构了`_sync_db_get`函数,采用`asyncio.run_coroutine_threadsafe`来安全地处理从同步线程调用异步数据库的场景,解决了潜在的事件循环冲突和死锁风险,增强了系统的稳定性。

- **日志完整性**: 移除了对图片描述等日志内容的长度截断,确保在调试过程中可以查看完整信息,方便问题定位。
2025-09-16 10:14:25 +08:00
Windpicker-owo
0d47e237ee 炸飞hfc,引入afc 2025-09-15 17:51:49 +08:00
tt-P607
04f957627e feat(knowledge): 优化知识库返回结构和集成流程
- 重构QAManager.get_knowledge()返回结构化字典包含知识项和摘要
- 在bot.py中添加initialize_lpmm_knowledge()初始化调用
- 更新Prompt类知识库集成逻辑,改进错误处理
- 优化lpmm知识工具显示格式,增强用户体验
- 调整异步任务基础超时时间从10秒增至20秒
2025-09-15 16:47:33 +08:00
Windpicker-owo
c52b4daf1a 初步开始重写聊天系统 2025-09-15 13:11:37 +08:00
tt-P607
d45eb41945 feat(proactive): 优化主动思考逻辑,改进搜索决策与信息融合
升级了搜索决策模型,使其能更准确地区分依赖“外部信息”的话题和依赖“内部信息”的社交话题,从而减少不必要的网络搜索。

- **精确决策**: 新的判断原则引导模型更深入地分析话题本质,避免为个人感受或日常闲聊等话题启动搜索。
- **健壮执行**: 增强了网络搜索功能的健壮性,修正了搜索工具的参数 (`keyword` -> `query`),并增加了对空主题的检查,防止无效调用。
- **自然融合**: 优化了最终回复的生成提示,引导模型将获取到的网络信息更自然地融入对话,作为话题的补充或引子,而不是生硬地复述。
2025-09-15 12:33:13 +08:00
tt-P607
34bce03f17 feat(proactive): 优化主动聊天逻辑,增加搜索前判断与回复前检查
为了提升主动聊天的智能化和自然度,本次更新引入了两个核心优化:

1.  **搜索前决策**: 在为主动话题进行网络搜索前,新增一个LLM决策步骤,判断该话题是否有搜索的必要性。这避免了对日常寒暄或无需外部信息的话题进行不必要的搜索,提高了效率。

2.  **回复前检查强化**: 严格化了主动回复的触发条件。现在,系统会检查自己的上一条消息是否得到回应,如果无人回应则倾向于保持沉默,以避免连续发言造成打扰。同时,所有判断标准需全部满足才能触发回复,使行为更符合社交直觉。
2025-09-15 10:45:28 +08:00
tt-P607
a0d33dffdc feat(emoji): 避免发送近期使用过的表情包以减少重复
为了提升表情包发送的自然度和多样性,引入了表情包历史记录机制。

该功能通过以下方式工作:
- 在选择表情包之前,系统会获取当前会话最近发送过的表情包记录。
- 从候选表情包池中过滤掉这些近期已使用过的表情,从而鼓励使用更多不同的表情。
- 当一个表情包成功发送后,其描述会被添加到历史记录中,用于未来的筛选。
2025-09-15 03:04:37 +08:00
Furina-1013-create
99eb52cd8c 修复reply动作缺少action_message的重大问题 2025-09-14 23:45:50 +08:00
tt-P607
65f949ad99 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-14 16:44:44 +08:00
tt-P607
5bf798ed0a 呀,柒柒,这次我们对表情包系统进行了一次超级棒的大升级哦!它现在变得更聪明、更懂我们的心意啦!就像我一样,总能找到最完美的表情来点亮对话!♪~
这是我为你准备的提交信息,你看看喜不喜欢~

feat(chat): 使用 LLM 优化表情包选择与分析

本次提交对表情包系统进行了核心重构,从原有的基于关键词相似度匹配的简单算法,升级为由大型语言模型(LLM)驱动的智能决策流程。这使得表情包的选择和分析更加精准、智能和人性化。

主要变更包括:

1.  **引入 LLM 进行表情包选择**
    -   重写了 `get_emoji_for_text` 方法,废弃了原有的编辑距离算法。
    -   新流程会根据配置随机抽取一部分表情包作为候选,并构建一个精细的 Prompt,引导 LLM 根据输入的“情感描述”选择最匹配的表情包。这让选择不再局限于字面匹配,而是能理解更深层次的语境和情绪。

2.  **优化表情包描述与分析流程**
    -   大幅改进了 `build_emoji_description` 中的 VLM 和 LLM 提示词,使其能生成更懂网络文化、更详细的表情包描述,并提炼出更精准的情感关键词。
    -   为动态图(GIF)和静态图设计了不同的分析策略,以获得更高质量的描述结果。

3.  **增强 Planner 动作连贯性**
    -   更新了 `planner_prompts`,明确要求当 `reply` 和 `emoji` 动作同时触发时,`emoji` 的选择必须基于 `reply` 动作生成的最终文本内容。这确保了文字和表情包的表达高度一致。

4.  **逻辑与配置微调**
    -   在 `utils_image` 中,现在只有当“偷表情包”功能开启时,才会保存接收到的表情包,避免了不必要的文件存储。
    -   将表情包检查间隔 `check_interval` 的类型从 `int` 改为 `float`,允许更灵活的配置。
2025-09-14 16:44:35 +08:00
minecraft1024a
f907470785 chore(log): 移除调试日志并将部分日志级别降为debug
将规划器和过滤器中的临时调试日志移除,并将部分用于追踪流程的info级别日志调整为debug级别,以减少在生产环境中的日志噪音。

同时,在`cycle_processor.py`中增加了对事件处理结果的空值检查,以增强代码的健壮性。(也许是bug真的能修好了——)
2025-09-14 14:59:32 +08:00
minecraft1024a
e2b25120c9 chore(log): 增加 plan_filter 调试日志输出
在 plan_filter 的关键位置增加了详细的日志输出,以便于调试和追踪 plan 的处理流程。

- 在 filter 方法的入口和出口记录 plan 状态。
- 记录构建后的 LLM prompt。
- 将 LLM 原始返回的日志级别调整为 warning,使其更显眼。
- 记录修复和解析后的 JSON 对象。
2025-09-14 14:17:11 +08:00
minecraft1024a
219c1b296c chore(dev): 临时增加调试日志输出 2025-09-14 14:02:09 +08:00
minecraft1024a
e96b453314 feat(dev): 增加规划器动作日志输出
在动作规划器完成规划后,增加一条日志记录,用于输出规划器生成的具体动作。这有助于在开发和调试过程中,更直观地追踪和理解系统的决策流程。
2025-09-14 13:37:25 +08:00
tt-P607
6793a46f41 refactor(chat): 优化 LLM 消息分段提示词
旧版的消息分段提示词(“消息分段艺术”)过于抽象,可能导致模型的分段行为不够自然或不符合预期。

本次更新将提示词重构为更具体、更具指导性的“消息分段指导”,旨在引导模型生成更贴近真人聊天习惯的、富有节奏感的回复。新的指导方针明确了分段的几个核心场景,如逻辑断点、情绪转折和信息强调,并引入了对分段长度的软性建议,以提升整体对话体验。
2025-09-14 03:08:55 +08:00
minecraft1024a
0a2af13553 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-13 21:43:14 +08:00
minecraft1024a
5b57d58db7 feat(chat): 增加调试日志输出
为了方便调试,在执行文本回复动作时,增加了一条详细的调试日志。这条日志会输出完整的 `action_message` 内容,并带有一个特殊的提示,方便在出现问题时快速定位和反馈。
2025-09-13 21:43:08 +08:00
tt-P607
9eccb7f04d Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-13 21:40:53 +08:00
tt-P607
a27639ea68 refactor(chat): 简化记忆激活方法的参数
更新 `activate_memory_with_chat_history` 的调用方式,使用 `target_message` 对象来替代独立的 `target_user` 和 `chat_id` 参数。

此举将相关上下文封装到单个对象中,使得接口更加清晰,提高了代码的可维护性。
2025-09-13 21:40:46 +08:00
minecraft1024a
f6bd0d4058 feat(chat): 增加回复动作的消息日志输出
在执行回复动作前,增加对 `action_message` 的日志输出,方便调试和追踪回复流程中的具体消息内容。
2025-09-13 21:37:47 +08:00
minecraft1024a
862f0df15f fix(chat): 修复获取用户ID时使用了错误的键名
将 `action_message.get("user_id", "")` 修改为 `action_message.get("chat_info_user_id", "")`,以确保从 `action_message` 字典中正确获取用户ID。

chore: 更新 .gitignore 文件

添加 `src/chat/planner_actions/新建 文本文档.txt` 到忽略列表,以避免将临时文件提交到版本库。
2025-09-13 21:10:49 +08:00
Windpicker-owo
b9fe4b793f 注释 2025-09-13 16:25:13 +08:00
minecraft1024a
7ea769996c refactor(chat): 优化plan_filter中的回复动作处理逻辑
- 引入 `reply_action_added` 标志位,确保在一次处理中只添加一个回复类型的动作(如 `reply` 或 `proactive_reply`)。
- 优化了循环和条件判断逻辑,使代码更清晰、更健壮,防止因LLM返回多个回复动作而导致的意外行为。
2025-09-13 15:14:18 +08:00
minecraft1024a
2db6be9b5b fix(chat): 修复计划过滤器和消息构建器中的潜在空指针问题
- 在 `plan_filter.py` 中,当LLM未指定 `target_message_id` 时,明确将目标消息设置为最新的消息,避免后续操作因 `target_message_dict` 未定义而出错。
- 在 `chat_message_builder.py` 中,为 `replace_user_references_sync` 函数增加了对 `content` 为空的检查,防止后续处理引发异常。
- 将数据库查询从 `.scalar()` 改为 `.scalar_one_or_none()`,以更清晰地处理未找到结果的情况。
2025-09-13 14:46:50 +08:00
minecraft1024a
3edda25ae1 refactor(at_user): 优化艾特用户插件逻辑并移除模糊匹配
重构了艾特用户插件,主要改动如下:
- 移除 `fuzzywuzzy` 依赖和相关的模糊匹配逻辑,改为直接通过 `person_info_manager` 精确查找用户。
- 优化了 `AtAction` 的执行流程,现在通过调用 `DefaultReplyer` 生成更智能、更符合上下文的回复内容,而不是发送固定文本。
- 新增了 `/at` 命令,允许用户通过指令直接艾特指定用户并发送消息。
- 删除了 `proactive_thinker.py` 中不再使用的 `_get_reminder_context` 方法,以清理与旧提醒功能相关的代码。
2025-09-13 12:54:23 +08:00
minecraft1024a
b9984b81f1 Revert "feat(reminder): 增强定时提醒系统,实现智能用户识别与上下文感知回复"
This reverts commit e1ebf41f8d.
2025-09-13 12:52:00 +08:00
minecraft1024a
70c5c289fc refactor(heart_flow): 移除智能提醒分析逻辑
从消息处理流程中移除旧的智能提醒分析模块。

该功能已被一个新的、更可靠的提醒系统取代,因此旧的实现被移除以简化代码库并消除冗余。
2025-09-13 12:26:07 +08:00
minecraft1024a
8fcb49a1bb 试图引爆定时提醒,我有一个更好的东西 2025-09-13 12:19:15 +08:00
minecraft1024a
490bf9e7cc chore(planner): 临时禁用执行器调用
为了调试规划器流程的其他部分,暂时注释掉了对 `self.executor.execute(filtered_plan)` 的调用。
2025-09-13 12:07:19 +08:00
minecraft1024a
f1c1a2081a docs(planner): 为规划器相关模块添加详细的文档字符串
为 `plan_executor`、`planner` 和 `planner_prompts` 模块中的类和函数补充了详细的文档字符串(docstrings)。

这提高了代码的可读性和可维护性,阐明了每个组件的职责、参数和返回值,使得其他开发者能更容易地理解和使用这些模块。
2025-09-13 12:04:34 +08:00
minecraft1024a
07f37323b2 修复了**AI写出来的虫子 2025-09-13 11:57:05 +08:00
minecraft1024a
e37ee46d59 refactor(planner): 重构动作规划器为模块化结构
将原有的 `ActionPlanner` 类拆分为三个独立的模块:`PlanGenerator`、`PlanFilter` 和 `PlanExecutor`。`ActionPlanner` 现在作为协调器,按顺序调用这三个模块,使规划流程更加清晰和模块化。

- **PlanGenerator**: 负责根据聊天模式和上下文生成初始规划。
- **PlanFilter**: 负责审查和筛选由生成器产生的动作。
- **PlanExecutor**: 负责执行最终确定的动作。

此重构简化了 `cycle_processor` 中的调用逻辑,并为未来的功能扩展(如更复杂的过滤规则)提供了更好的基础。同时,引入了新的 `Plan` 数据模型来统一规划过程中的数据传递。
2025-09-13 11:48:04 +08:00
tt-P607
fcda224767 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-12 22:50:55 +08:00
tt-P607
5e3efd3148 根据提供的 git diff 分析,这是一个重构变更,主要是修改了异步内存包装器的导入和使用方式。以下是生成的常规提交消息:
refactor(prompt): 重构异步即时内存包装器的导入和使用方式

- 将 async_memory 导入更改为 get_async_instant_memory 函数
- 简化内存获取逻辑,通过工厂函数创建包装器实例
- 更新参数传递方式,使用 target 替代 sender 参数
- 减少代码行数,提高可读性
2025-09-12 22:50:37 +08:00
BuildTools
34d0309d1f Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-12 21:39:11 +08:00
BuildTools
675bd4b75e 优化s4u提示词 2025-09-12 21:39:04 +08:00
minecraft1024a
48567072e9 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-12 21:13:11 +08:00
minecraft1024a
9f084338dc refactor(core): 延迟初始化知识库并优化导入结构
将LPMM知识库的初始化逻辑封装到`initialize_lpmm_knowledge`函数中,并将其调用移至`main.py`,以实现延迟加载并改善启动流程。

为了解决循环导入问题,将`component_registry`的导入移至`BaseAction.call`方法内部。
2025-09-12 21:12:13 +08:00
tt-P607
1912f7af17 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-12 20:58:00 +08:00
tt-P607
35403678b2 feat(prompt): 添加安全准则参数并更新工具执行器
- 在PromptParameters类中添加safety_guidelines_block参数
- 更新ToolExecutor初始化,传入chat_id参数用于上下文追踪
- 在所有参数准备方法中集成安全准则配置
- 增强prompt系统的安全性和可追溯性
2025-09-12 20:57:56 +08:00
minecraft1024a
18220e4110 rrrrrrrrrrrrruuuuuuuuuuuuuuuffffffffffffffffffffffffffff x3 2025-09-12 20:42:02 +08:00
minecraft1024a
4fa2122c8d Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-12 20:39:25 +08:00
minecraft1024a
47e504e715 feat(plugin): 允许在Action内部调用其他Action
在`BaseAction`中新增`call_action`方法,使得一个Action可以方便地调用并执行另一个已注册的Action。

该方法会:
- 从组件注册中心查找并获取目标Action类。
- 复用当前Action的上下文信息(如`chat_stream`, `cycle_timers`等)来实例化目标Action。
- 执行目标Action并返回其执行结果。

这为创建更复杂、可组合的插件逻辑提供了基础,提高了代码的复用性和模块化程度。
2025-09-12 20:39:20 +08:00
tt-P607
c996bd28df Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-12 20:36:20 +08:00
BuildTools
5ea90cfe11 Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox_Bot into dev 2025-09-12 20:34:41 +08:00
tt-P607
5f4fea8358 feat(prompt): 添加背景故事与安全准则
本次提交在人设配置中引入了“背景故事”和“安全准则”两个新字段,旨在增强 Bot 的角色深度和互动安全性。

- **背景故事 (`background_story`)**: 允许用户定义详细的世界观或角色背景。这部分内容将作为背景知识注入 Prompt,指导模型在不直接复述的情况下理解和运用,从而塑造更丰富的角色。

- **安全准则 (`safety_guidelines`)**: 用户可以明确定义 Bot 必须遵守的行为红线。这些准则会被整合进系统指令,为模型处理不当或敏感请求提供清晰的、可配置的指导方针,提升了交互的安全性。
2025-09-12 20:34:39 +08:00
BuildTools
69a1f60841 feat(chat): 增强prompt构建功能并优化回复逻辑
- 为HfcContext和ChatStream添加focus_energy配置支持
- 修复默认回复生成器中识别自身消息的逻辑
- 完整实现prompt构建中的表达习惯、记忆、工具信息和知识模块
- 优化错误处理,使用原生异常链式传递
- 确保数据库操作中focus_energy字段的持久化

这些改进提升了聊天系统的上下文感知能力和回复质量,同时增强了模块的健壮性和可维护性。
2025-09-12 20:34:31 +08:00
minecraft1024a
eb5011ada1 refactor(chat): 调整分段指令在提示词中的位置
将回复分割指令从注入到 "现在,你说:" 之前,改为直接添加到整个提示词的顶部。

这种调整简化了提示词的构建逻辑,并确保分割指令作为最高优先级的上下文被模型处理,从而提高其遵循指令的稳定性。
2025-09-12 19:08:16 +08:00
tt-P607
0cb2fa3373 feat(chat): 为回复分割器添加 llmpunctuation 模式
本次更新重构了回复分割功能,引入了 `split_mode` 配置项,允许用户在两种分割模式之间进行选择,提供了更大的灵活性。

- **`llm` 模式**: 延续了由大语言模型通过 `[SPLIT]` 标记决定断句的功能。此模式下的提示词(Prompt)已进一步优化,以引导模型做出更自然的分割。
- **`punctuation` 模式**: 恢复了传统的基于标点符号的分割逻辑。这已设为新的默认模式,确保用户更新后行为与旧版本保持一致。

此外,`at_user` 插件也进行了适配,以正确处理由 `llm` 模式可能产生的多段消息。
2025-09-11 17:12:01 +08:00