feat(action): 重构 Action 激活机制并添加 go_activate() 方法

引入新的 Action 激活机制,允许通过重写 go_activate() 方法来自定义激活逻辑。提供了三个工具函数:
- _random_activation(): 随机概率激活
- _keyword_match(): 关键词匹配激活
- _llm_judge_activation(): LLM 智能判断激活

主要变更:
- 在 BaseAction 中添加 go_activate() 抽象方法和相关工具函数
- 更新 ActionModifier 使用新的激活判断逻辑
- 在 hello_world_plugin 中添加新的激活方式示例
- 更新文档说明新的激活机制
- 保持向后兼容,旧的激活类型配置仍然可用

BREAKING CHANGE: Action 激活判断现在通过 go_activate() 方法进行,旧的激活类型字段已标记为废弃但仍然兼容
This commit is contained in:
Windpicker-owo
2025-10-17 20:16:15 +08:00
parent ce3fe95b37
commit f22e6365cc
7 changed files with 961 additions and 65 deletions

View File

@@ -18,8 +18,36 @@ logger = get_logger("emoji")
class EmojiAction(BaseAction):
"""表情动作 - 发送表情包"""
"""表情动作 - 发送表情包
注意:此 Action 使用旧的激活类型配置方式(已废弃但仍然兼容)。
BaseAction.go_activate() 的默认实现会自动处理这些旧配置。
推荐的新写法(迁移示例):
----------------------------------------
# 移除下面的 activation_type 相关配置,改为重写 go_activate 方法:
async def go_activate(self, chat_content: str = "", llm_judge_model=None) -> bool:
# 根据配置选择激活方式
if global_config.emoji.emoji_activate_type == "llm":
return await self._llm_judge_activation(
chat_content=chat_content,
judge_prompt=\"""
判定是否需要使用表情动作的条件:
1. 用户明确要求使用表情包
2. 这是一个适合表达情绪的场合
3. 发表情包能使当前对话更有趣
4. 不要发送太多表情包
\""",
llm_judge_model=llm_judge_model
)
else:
# 使用随机激活
return await self._random_activation(global_config.emoji.emoji_chance)
----------------------------------------
"""
# ========== 以下使用旧的激活配置(已废弃但兼容) ==========
# 激活设置
if global_config.emoji.emoji_activate_type == "llm":
activation_type = ActionActivationType.LLM_JUDGE