feat:动作现在区分focus和normal,并且可选不同的激活策略

This commit is contained in:
SengokuCola
2025-06-09 15:10:38 +08:00
parent 2ce5114b8c
commit 97ffbe5145
25 changed files with 1180 additions and 855 deletions

View File

@@ -39,7 +39,7 @@ async def modify_actions_task():
**处理内容:**
- 传统观察处理(循环历史分析、类型匹配等)
- 激活类型判定(ALWAYS, RANDOM, LLM_JUDGE, KEYWORD
- 激活类型判定(Focus模式和Normal模式分别处理
- 并行LLM判定
- 智能缓存
- 动态关键词收集
@@ -94,41 +94,123 @@ for action_name, action_info in llm_judge_actions.items():
# 检查消息中的关键词匹配
```
## 双激活类型系统 🆕
### 系统设计理念
**Focus模式** 和 **Normal模式** 采用不同的激活策略:
- **Focus模式**: 智能化优先支持复杂的LLM判定
- **Normal模式**: 性能优先,使用快速的关键词和随机触发
### 双激活类型配置
```python
class MyAction(BaseAction):
action_name = "my_action"
action_description = "我的动作"
# Focus模式激活类型支持LLM_JUDGE
focus_activation_type = ActionActivationType.LLM_JUDGE
# Normal模式激活类型建议使用KEYWORD/RANDOM/ALWAYS
normal_activation_type = ActionActivationType.KEYWORD
activation_keywords = ["关键词1", "keyword"]
# 模式启用控制
mode_enable = ChatMode.ALL # 在所有模式下启用
# 并行执行控制
parallel_action = False # 是否与回复并行执行
```
### 模式启用类型 (ChatMode)
```python
from src.chat.chat_mode import ChatMode
# 可选值:
mode_enable = ChatMode.FOCUS # 仅在Focus模式启用
mode_enable = ChatMode.NORMAL # 仅在Normal模式启用
mode_enable = ChatMode.ALL # 在所有模式启用(默认)
```
### 并行动作系统 🆕
```python
# 并行动作:可以与回复生成同时进行
parallel_action = True # 不会阻止回复生成
# 串行动作:会替代回复生成
parallel_action = False # 默认值,传统行为
```
**并行动作的优势:**
- 提升用户体验(同时获得回复和动作执行)
- 减少响应延迟
- 适用于情感表达、状态变更等辅助性动作
## 四种激活类型
### 1. ALWAYS - 始终激活
```python
activation_type = ActionActivationType.ALWAYS
focus_activation_type = ActionActivationType.ALWAYS
normal_activation_type = ActionActivationType.ALWAYS
# 基础动作,如 reply, no_reply
```
### 2. RANDOM - 随机激活
```python
activation_type = ActionActivationType.RANDOM
focus_activation_type = ActionActivationType.RANDOM
normal_activation_type = ActionActivationType.RANDOM
random_probability = 0.3 # 激活概率
# 用于增加惊喜元素,如随机表情
```
### 3. LLM_JUDGE - 智能判定
```python
activation_type = ActionActivationType.LLM_JUDGE
llm_judge_prompt = "自定义判定提示词"
focus_activation_type = ActionActivationType.LLM_JUDGE
# 注意Normal模式不建议使用LLM_JUDGE会发出警告
normal_activation_type = ActionActivationType.KEYWORD
# 需要理解上下文的复杂动作,如情感表达
```
### 4. KEYWORD - 关键词触发
```python
activation_type = ActionActivationType.KEYWORD
focus_activation_type = ActionActivationType.KEYWORD
normal_activation_type = ActionActivationType.KEYWORD
activation_keywords = ["画", "图片", "生成"]
# 明确指令触发的动作,如图片生成
```
## 推荐配置模式
### 模式1智能自适应
```python
# Focus模式使用智能判定Normal模式使用关键词
focus_activation_type = ActionActivationType.LLM_JUDGE
normal_activation_type = ActionActivationType.KEYWORD
activation_keywords = ["相关", "关键词"]
```
### 模式2统一关键词
```python
# 两个模式都使用关键词,确保一致性
focus_activation_type = ActionActivationType.KEYWORD
normal_activation_type = ActionActivationType.KEYWORD
activation_keywords = ["画", "图片", "生成"]
```
### 模式3Focus专享
```python
# 仅在Focus模式启用的智能功能
focus_activation_type = ActionActivationType.LLM_JUDGE
normal_activation_type = ActionActivationType.ALWAYS # 不会生效
mode_enable = ChatMode.FOCUS
```
## 性能提升
### 理论性能改进
- **并行LLM判定**: 1.5-2x 提升
- **智能缓存**: 20-30% 额外提升
- **整体预期**: 2-3x 性能提升
- **双模式优化**: Normal模式额外1.5x提升
- **整体预期**: 3-5x 性能提升
### 缓存策略
- **缓存键**: `{action_name}_{context_hash}`
@@ -137,19 +219,43 @@ activation_keywords = ["画", "图片", "生成"]
## 向后兼容性
### 废弃方法处理
### ⚠️ 重大变更说明
**旧的 `action_activation_type` 属性已被移除**,必须更新为新的双激活类型系统:
#### 迁移指南
```python
async def process_actions_for_planner(...):
"""[已废弃] 此方法现在已被整合到 modify_actions() 中"""
logger.warning("process_actions_for_planner() 已废弃")
# 仍然返回结果以保持兼容性
return current_using_actions
# 旧的配置(已废弃)
class OldAction(BaseAction):
action_activation_type = ActionActivationType.LLM_JUDGE # ❌ 已移除
# 新的配置(必须使用)
class NewAction(BaseAction):
focus_activation_type = ActionActivationType.LLM_JUDGE # ✅ Focus模式
normal_activation_type = ActionActivationType.KEYWORD # ✅ Normal模式
activation_keywords = ["相关", "关键词"]
mode_enable = ChatMode.ALL
parallel_action = False
```
### 迁移指南
1. **主循环**: 使用 `modify_actions(observations, messages, context, extra)`
2. **规划器**: 直接使用 `ActionManager.get_using_actions()`
3. **移除**: 规划器中对 `process_actions_for_planner()` 的调用
#### 快速迁移脚本
对于简单的迁移,可以使用以下模式:
```python
# 如果原来是 ALWAYS
focus_activation_type = ActionActivationType.ALWAYS
normal_activation_type = ActionActivationType.ALWAYS
# 如果原来是 LLM_JUDGE
focus_activation_type = ActionActivationType.LLM_JUDGE
normal_activation_type = ActionActivationType.KEYWORD # 需要添加关键词
# 如果原来是 KEYWORD
focus_activation_type = ActionActivationType.KEYWORD
normal_activation_type = ActionActivationType.KEYWORD
# 如果原来是 RANDOM
focus_activation_type = ActionActivationType.RANDOM
normal_activation_type = ActionActivationType.RANDOM
```
## 测试验证
@@ -159,11 +265,12 @@ python test_corrected_architecture.py
```
### 测试内容
- 架构正确性验证
- 双激活类型系统验证
- 数据一致性检查
- 职责分离确认
- 性能测试
- 向后兼容性验证
- 并行动作功能验证
## 优势总结
@@ -175,15 +282,18 @@ python test_corrected_architecture.py
### 2. 高性能
- **并行处理**: 多个LLM判定同时进行
- **智能缓存**: 避免重复计算
- **双模式优化**: Focus智能化Normal快速化
### 3. 智能化
- **动态配置**: 从动作配置中收集关键词
- **上下文感知**: 基于聊天内容智能激活
- **冲突避免**: 防止重复激活
- **模式自适应**: 根据聊天模式选择最优策略
### 4. 可扩展性
- **插件式**: 新的激活类型易于添加
- **配置驱动**: 通过配置控制行为
- **模块化**: 各组件独立可测试
- **双模式支持**: 灵活适应不同使用场景
这个修正后的架构实现了正确的职责分工,确保了主循环负责动作管理,规划器专注于决策,同时集成了并行判定和智能缓存等优化功能。
这个修正后的架构实现了正确的职责分工,确保了主循环负责动作管理,规划器专注于决策,同时集成了双激活类型、并行判定和智能缓存等优化功能。