Skip to content

Commit 2ce5114

Browse files
committed
feat:给动作添加了选择器,并添加了新api
1 parent 5ef3139 commit 2ce5114

19 files changed

Lines changed: 1661 additions & 104 deletions

CORRECTED_ARCHITECTURE.md

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
# 修正后的动作激活架构
2+
3+
## 架构原则
4+
5+
### 正确的职责分工
6+
- **主循环 (`modify_actions`)**: 负责完整的动作管理,包括传统观察处理和新的激活类型判定
7+
- **规划器 (`Planner`)**: 专注于从最终确定的动作集中进行决策,不再处理动作筛选
8+
9+
### 关注点分离
10+
- **动作管理** → 主循环处理
11+
- **决策制定** → 规划器处理
12+
- **配置解析** → ActionManager处理
13+
14+
## 修正后的调用流程
15+
16+
### 1. 主循环阶段 (heartFC_chat.py)
17+
18+
```python
19+
# 在主循环中调用完整的动作管理流程
20+
async def modify_actions_task():
21+
# 提取聊天上下文信息
22+
observed_messages_str = ""
23+
chat_context = ""
24+
25+
for obs in self.observations:
26+
if hasattr(obs, 'get_talking_message_str_truncate'):
27+
observed_messages_str = obs.get_talking_message_str_truncate()
28+
elif hasattr(obs, 'get_chat_type'):
29+
chat_context = f"聊天类型: {obs.get_chat_type()}"
30+
31+
# 调用完整的动作修改流程
32+
await self.action_modifier.modify_actions(
33+
observations=self.observations,
34+
observed_messages_str=observed_messages_str,
35+
chat_context=chat_context,
36+
extra_context=extra_context
37+
)
38+
```
39+
40+
**处理内容:**
41+
- 传统观察处理(循环历史分析、类型匹配等)
42+
- 激活类型判定(ALWAYS, RANDOM, LLM_JUDGE, KEYWORD)
43+
- 并行LLM判定
44+
- 智能缓存
45+
- 动态关键词收集
46+
47+
### 2. 规划器阶段 (planner_simple.py)
48+
49+
```python
50+
# 规划器直接获取最终的动作集
51+
current_available_actions_dict = self.action_manager.get_using_actions()
52+
53+
# 获取完整的动作信息
54+
all_registered_actions = self.action_manager.get_registered_actions()
55+
current_available_actions = {}
56+
for action_name in current_available_actions_dict.keys():
57+
if action_name in all_registered_actions:
58+
current_available_actions[action_name] = all_registered_actions[action_name]
59+
```
60+
61+
**处理内容:**
62+
- 仅获取经过完整处理的最终动作集
63+
- 专注于从可用动作中进行决策
64+
- 不再处理动作筛选逻辑
65+
66+
## 核心优化功能
67+
68+
### 1. 并行LLM判定
69+
```python
70+
# 同时判定多个LLM_JUDGE类型的动作
71+
task_results = await asyncio.gather(*tasks, return_exceptions=True)
72+
```
73+
74+
### 2. 智能缓存系统
75+
```python
76+
# 基于上下文哈希的缓存机制
77+
cache_key = f"{action_name}_{context_hash}"
78+
if cache_key in self._llm_judge_cache:
79+
return cached_result
80+
```
81+
82+
### 3. 直接LLM判定
83+
```python
84+
# 直接对所有LLM_JUDGE类型的动作进行并行判定
85+
llm_results = await self._process_llm_judge_actions_parallel(llm_judge_actions, ...)
86+
```
87+
88+
### 4. 动态关键词收集
89+
```python
90+
# 从动作配置中动态收集关键词,避免硬编码
91+
for action_name, action_info in llm_judge_actions.items():
92+
keywords = action_info.get("activation_keywords", [])
93+
if keywords:
94+
# 检查消息中的关键词匹配
95+
```
96+
97+
## 四种激活类型
98+
99+
### 1. ALWAYS - 始终激活
100+
```python
101+
activation_type = ActionActivationType.ALWAYS
102+
# 基础动作,如 reply, no_reply
103+
```
104+
105+
### 2. RANDOM - 随机激活
106+
```python
107+
activation_type = ActionActivationType.RANDOM
108+
random_probability = 0.3 # 激活概率
109+
# 用于增加惊喜元素,如随机表情
110+
```
111+
112+
### 3. LLM_JUDGE - 智能判定
113+
```python
114+
activation_type = ActionActivationType.LLM_JUDGE
115+
llm_judge_prompt = "自定义判定提示词"
116+
# 需要理解上下文的复杂动作,如情感表达
117+
```
118+
119+
### 4. KEYWORD - 关键词触发
120+
```python
121+
activation_type = ActionActivationType.KEYWORD
122+
activation_keywords = ["", "图片", "生成"]
123+
# 明确指令触发的动作,如图片生成
124+
```
125+
126+
## 性能提升
127+
128+
### 理论性能改进
129+
- **并行LLM判定**: 1.5-2x 提升
130+
- **智能缓存**: 20-30% 额外提升
131+
- **整体预期**: 2-3x 性能提升
132+
133+
### 缓存策略
134+
- **缓存键**: `{action_name}_{context_hash}`
135+
- **过期时间**: 30秒
136+
- **哈希算法**: MD5 (消息内容+上下文)
137+
138+
## 向后兼容性
139+
140+
### 废弃方法处理
141+
```python
142+
async def process_actions_for_planner(...):
143+
"""[已废弃] 此方法现在已被整合到 modify_actions() 中"""
144+
logger.warning("process_actions_for_planner() 已废弃")
145+
# 仍然返回结果以保持兼容性
146+
return current_using_actions
147+
```
148+
149+
### 迁移指南
150+
1. **主循环**: 使用 `modify_actions(observations, messages, context, extra)`
151+
2. **规划器**: 直接使用 `ActionManager.get_using_actions()`
152+
3. **移除**: 规划器中对 `process_actions_for_planner()` 的调用
153+
154+
## 测试验证
155+
156+
### 运行测试
157+
```bash
158+
python test_corrected_architecture.py
159+
```
160+
161+
### 测试内容
162+
- 架构正确性验证
163+
- 数据一致性检查
164+
- 职责分离确认
165+
- 性能测试
166+
- 向后兼容性验证
167+
168+
## 优势总结
169+
170+
### 1. 清晰的架构
171+
- **单一职责**: 每个组件专注于自己的核心功能
172+
- **关注点分离**: 动作管理与决策制定分离
173+
- **可维护性**: 逻辑清晰,易于理解和修改
174+
175+
### 2. 高性能
176+
- **并行处理**: 多个LLM判定同时进行
177+
- **智能缓存**: 避免重复计算
178+
179+
### 3. 智能化
180+
- **动态配置**: 从动作配置中收集关键词
181+
- **上下文感知**: 基于聊天内容智能激活
182+
- **冲突避免**: 防止重复激活
183+
184+
### 4. 可扩展性
185+
- **插件式**: 新的激活类型易于添加
186+
- **配置驱动**: 通过配置控制行为
187+
- **模块化**: 各组件独立可测试
188+
189+
这个修正后的架构实现了正确的职责分工,确保了主循环负责动作管理,规划器专注于决策,同时集成了并行判定和智能缓存等优化功能。

0 commit comments

Comments
 (0)