反应集框架:从事件驱动到智能交互的工程实践
最近在开发游戏AI助手时,发现一个很有意思的现象:很多开发者习惯性地把AI助手当作"万能工具箱",结果在实际项目中却频频碰壁。直到我深入研究了一个名为"反应集"的技术框架,才意识到问题出在哪里——我们往往只关注AI能做什么,却忽略了它应该在什么场景下、以什么方式被触发。
这个认知转变源于一个具体的项目需求:为游戏角色开发智能交互系统。传统做法是给每个角色编写大量if-else逻辑,但这种方法在角色数量增多时会变得难以维护。而"反应集"框架提供了一种更优雅的解决方案——通过定义明确的触发条件和响应动作,让AI行为变得可预测、可管理。
1. 反应集框架要解决的核心问题
在游戏开发、智能助手、自动化脚本等场景中,我们经常需要处理"当X发生时,执行Y操作"这类需求。传统实现方式有三大痛点:
代码耦合严重:业务逻辑散落在各个角落,修改一个触发条件可能需要改动多个文件可维护性差:随着规则数量增加,代码会变得像意大利面条一样难以理解扩展成本高:每增加一个新规则,都需要重新测试整个系统
反应集框架通过声明式的规则定义,将"触发条件"与"响应动作"解耦。具体来说,它解决了以下问题:
- 规则集中管理:所有交互逻辑在一个地方定义和维护
- 条件动态匹配:支持复杂的条件组合和优先级判断
- 行为可预测:每个触发条件对应明确的响应序列
- 系统可扩展:新增规则不会影响现有功能
2. 反应集的核心概念与工作原理
2.1 基本组成元素
反应集框架包含三个核心组件:
触发器(Trigger):定义什么情况下会激活反应集,可以是事件、状态变化、时间条件等条件(Condition):进一步筛选是否执行反应的约束条件动作(Action):被触发后要执行的具体操作序列
# 反应集规则示例 reaction_set: - trigger: "player_enters_room" conditions: - "time between 08:00 and 20:00" - "player_relationship > 50" actions: - "show_greeting_animation" - "play_voice_line: 'welcome'" - "start_dialogue_tree: friendly_chat"2.2 工作流程解析
反应集框架的执行流程可以概括为以下步骤:
- 事件监听:框架监听所有可能触发反应的事件源
- 条件匹配:当事件发生时,检查所有注册的反应集,找到匹配的触发器
- 优先级评估:如果多个反应集同时匹配,根据优先级规则确定执行顺序
- 动作执行:按顺序执行匹配反应集中定义的动作
- 状态更新:执行完成后更新相关状态,避免重复触发
2.3 与传统方法的对比
为了更直观地理解反应集的价值,我们通过一个表格对比两种实现方式:
| 维度 | 传统if-else方式 | 反应集框架 |
|---|---|---|
| 代码组织 | 逻辑分散在各个业务模块 | 规则集中声明式管理 |
| 维护成本 | 修改需要定位多个文件 | 单一配置文件修改 |
| 可读性 | 需要阅读大量代码理解逻辑 | 规则直观,易于理解 |
| 扩展性 | 新增规则可能影响现有逻辑 | 规则独立,互不影响 |
| 调试难度 | 需要跟踪复杂的调用链 | 规则执行轨迹清晰 |
3. 环境准备与基础配置
3.1 开发环境要求
在开始实现反应集框架前,需要准备以下环境:
- Python 3.8+:本文示例使用Python实现,确保安装正确版本
- IDE配置:推荐使用VS Code或PyCharm,安装Python插件
- 版本控制:Git用于代码管理,建议初始化仓库
- 测试框架:pytest用于单元测试验证
3.2 项目结构规划
创建清晰的项目结构有助于后续维护:
reaction_framework/ ├── src/ │ ├── core/ # 核心框架代码 │ │ ├── __init__.py │ │ ├── trigger.py # 触发器基类 │ │ ├── condition.py # 条件判断逻辑 │ │ └── action.py # 动作执行器 │ ├── rules/ # 规则定义文件 │ │ └── game_rules.yaml │ └── utils/ # 工具函数 ├── tests/ # 测试用例 ├── requirements.txt # 依赖列表 └── README.md # 项目说明3.3 基础依赖安装
创建requirements.txt文件定义项目依赖:
# requirements.txt PyYAML>=6.0 pytest>=7.0 loguru>=0.7.0 typing-extensions>=4.0.0安装依赖:
pip install -r requirements.txt4. 核心框架实现详解
4.1 触发器系统设计
触发器是反应集的入口点,负责监听和识别触发事件:
# src/core/trigger.py from abc import ABC, abstractmethod from typing import Any, Dict, List from dataclasses import dataclass @dataclass class TriggerEvent: """触发事件数据类""" event_type: str source: Any data: Dict[str, Any] timestamp: float class BaseTrigger(ABC): """触发器基类""" def __init__(self, trigger_id: str, config: Dict[str, Any]): self.trigger_id = trigger_id self.config = config self._listeners = [] @abstractmethod def check_condition(self, event: TriggerEvent) -> bool: """检查事件是否满足触发条件""" pass def add_listener(self, listener): """添加事件监听器""" self._listeners.append(listener) def notify_listeners(self, event: TriggerEvent): """通知所有监听器""" for listener in self._listeners: listener.on_trigger(event) class TimeTrigger(BaseTrigger): """时间触发器示例""" def check_condition(self, event: TriggerEvent) -> bool: if event.event_type != "time_update": return False current_time = event.data.get("current_time") target_time = self.config.get("target_time") return current_time == target_time class EventTrigger(BaseTrigger): """事件触发器示例""" def check_condition(self, event: TriggerEvent) -> bool: target_event = self.config.get("event_type") return event.event_type == target_event4.2 条件判断系统
条件系统用于在触发器匹配后进一步筛选是否执行动作:
# src/core/condition.py from abc import ABC, abstractmethod from typing import Any, Dict class BaseCondition(ABC): """条件基类""" def __init__(self, condition_id: str, config: Dict[str, Any]): self.condition_id = condition_id self.config = config @abstractmethod def evaluate(self, context: Dict[str, Any]) -> bool: """评估条件是否满足""" pass class RelationshipCondition(BaseCondition): """关系条件:检查角色关系值""" def evaluate(self, context: Dict[str, Any]) -> bool: required_relationship = self.config.get("min_relationship", 0) current_relationship = context.get("relationship", 0) return current_relationship >= required_relationship class InventoryCondition(BaseCondition): """库存条件:检查是否拥有特定物品""" def evaluate(self, context: Dict[str, Any]) -> bool: required_item = self.config.get("item_id") player_inventory = context.get("inventory", []) return required_item in player_inventory class CompositeCondition(BaseCondition): """组合条件:支持AND/OR逻辑""" def evaluate(self, context: Dict[str, Any]) -> bool: conditions = self.config.get("conditions", []) logic_type = self.config.get("logic", "AND") if logic_type == "AND": return all(cond.evaluate(context) for cond in conditions) else: # OR return any(cond.evaluate(context) for cond in conditions)4.3 动作执行系统
动作系统定义具体的执行逻辑:
# src/core/action.py from abc import ABC, abstractmethod from typing import Any, Dict, List import logging logger = logging.getLogger(__name__) class BaseAction(ABC): """动作基类""" def __init__(self, action_id: str, config: Dict[str, Any]): self.action_id = action_id self.config = config @abstractmethod def execute(self, context: Dict[str, Any]) -> bool: """执行动作""" pass class DialogueAction(BaseAction): """对话动作:显示对话内容""" def execute(self, context: Dict[str, Any]) -> bool: dialogue_text = self.config.get("text", "") character = self.config.get("character", "NPC") logger.info(f"[{character}]: {dialogue_text}") # 在实际游戏中,这里会调用UI系统显示对话 return True class AnimationAction(BaseAction): """动画动作:播放角色动画""" def execute(self, context: Dict[str, Any]) -> bool: animation_name = self.config.get("animation") target_character = context.get("character") logger.info(f"播放动画: {target_character} -> {animation_name}") return True class SequenceAction(BaseAction): """序列动作:按顺序执行多个动作""" def __init__(self, action_id: str, config: Dict[str, Any]): super().__init__(action_id, config) self.actions = self._create_actions(config.get("actions", [])) def _create_actions(self, action_configs: List[Dict]) -> List[BaseAction]: """根据配置创建动作实例""" # 简化实现,实际项目中需要更复杂的工厂逻辑 actions = [] for i, action_config in enumerate(action_configs): action_type = action_config.get("type") if action_type == "dialogue": actions.append(DialogueAction(f"action_{i}", action_config)) return actions def execute(self, context: Dict[str, Any]) -> bool: """顺序执行所有动作""" for action in self.actions: if not action.execute(context): logger.error(f"动作执行失败: {action.action_id}") return False return True5. 反应集引擎整合
5.1 核心引擎实现
将各个组件整合成完整的反应集引擎:
# src/core/engine.py from typing import Dict, List, Any from .trigger import BaseTrigger, TriggerEvent from .condition import BaseCondition from .action import BaseAction import logging logger = logging.getLogger(__name__) class ReactionRule: """反应规则封装类""" def __init__(self, rule_id: str, priority: int = 0): self.rule_id = rule_id self.priority = priority self.trigger = None self.conditions = [] self.actions = [] def set_trigger(self, trigger: BaseTrigger): self.trigger = trigger def add_condition(self, condition: BaseCondition): self.conditions.append(condition) def add_action(self, action: BaseAction): self.actions.append(action) def evaluate_conditions(self, context: Dict[str, Any]) -> bool: """评估所有条件""" return all(condition.evaluate(context) for condition in self.conditions) def execute_actions(self, context: Dict[str, Any]) -> bool: """执行所有动作""" for action in self.actions: if not action.execute(context): return False return True class ReactionEngine: """反应集引擎""" def __init__(self): self.rules = [] self.context = {} def register_rule(self, rule: ReactionRule): """注册反应规则""" self.rules.append(rule) # 按优先级排序,优先级高的先执行 self.rules.sort(key=lambda x: x.priority, reverse=True) def update_context(self, new_context: Dict[str, Any]): """更新执行上下文""" self.context.update(new_context) def process_event(self, event: TriggerEvent): """处理触发事件""" matched_rules = [] # 查找匹配的规则 for rule in self.rules: if rule.trigger and rule.trigger.check_condition(event): # 合并事件数据到上下文 event_context = {**self.context, **event.data} if rule.evaluate_conditions(event_context): matched_rules.append(rule) # 按优先级执行匹配的规则 for rule in matched_rules: logger.info(f"执行规则: {rule.rule_id}") event_context = {**self.context, **event.data} if not rule.execute_actions(event_context): logger.warning(f"规则执行失败: {rule.rule_id}")5.2 规则配置与加载
使用YAML文件定义反应规则:
# src/rules/game_rules.yaml rules: - id: "welcome_high_relationship" priority: 10 trigger: type: "event" event_type: "player_enters_room" conditions: - type: "relationship" min_relationship: 70 - type: "time" min_hour: 8 max_hour: 20 actions: - type: "sequence" actions: - type: "animation" animation: "wave_hand" - type: "dialogue" character: "训练员" text: "欢迎回来!今天训练得怎么样?" - id: "neutral_greeting" priority: 5 trigger: type: "event" event_type: "player_enters_room" conditions: - type: "relationship" min_relationship: 30 max_relationship: 69 actions: - type: "dialogue" character: "训练员" text: "你好,需要什么帮助吗?"对应的规则加载器:
# src/core/loader.py import yaml from typing import Dict, Any from .trigger import EventTrigger, TimeTrigger from .condition import RelationshipCondition from .action import DialogueAction, AnimationAction, SequenceAction from .engine import ReactionRule class RuleLoader: """规则加载器""" @staticmethod def load_from_yaml(file_path: str) -> list[ReactionRule]: """从YAML文件加载规则""" with open(file_path, 'r', encoding='utf-8') as f: data = yaml.safe_load(f) rules = [] for rule_data in data.get('rules', []): rule = ReactionRule(rule_data['id'], rule_data.get('priority', 0)) # 创建触发器 trigger_data = rule_data['trigger'] if trigger_data['type'] == 'event': rule.set_trigger(EventTrigger(f"trigger_{rule_data['id']}", trigger_data)) # 创建条件 for cond_data in rule_data.get('conditions', []): if cond_data['type'] == 'relationship': condition = RelationshipCondition(f"cond_{rule_data['id']}", cond_data) rule.add_condition(condition) # 创建动作 for action_data in rule_data.get('actions', []): if action_data['type'] == 'dialogue': action = DialogueAction(f"action_{rule_data['id']}", action_data) rule.add_action(action) elif action_data['type'] == 'sequence': action = SequenceAction(f"action_{rule_data['id']}", action_data) rule.add_action(action) rules.append(rule) return rules6. 完整示例:游戏角色交互系统
6.1 场景设定与初始化
让我们实现一个完整的游戏角色交互示例:
# examples/game_example.py import logging from src.core.engine import ReactionEngine, TriggerEvent from src.core.loader import RuleLoader # 配置日志 logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') def setup_game_engine(): """设置游戏反应引擎""" engine = ReactionEngine() # 加载规则 rules = RuleLoader.load_from_yaml('src/rules/game_rules.yaml') for rule in rules: engine.register_rule(rule) # 设置初始上下文 engine.update_context({ "player_name": "训练员", "current_time": 14, # 下午2点 "relationship": 75, # 关系值75 "inventory": ["训练手册", "能量饮料"] }) return engine def simulate_game_interaction(): """模拟游戏交互场景""" engine = setup_game_engine() # 模拟玩家进入房间事件 enter_room_event = TriggerEvent( event_type="player_enters_room", source="game_system", data={"room_type": "training_room", "character_present": True}, timestamp=1620000000.0 ) print("=== 玩家进入训练室 ===") engine.process_event(enter_room_event) # 模拟关系值变化后的交互 print("\n=== 关系值降低后的交互 ===") engine.update_context({"relationship": 40}) engine.process_event(enter_room_event) if __name__ == "__main__": simulate_game_interaction()6.2 运行结果分析
运行上述示例,可以看到不同的关系值触发不同的交互行为:
=== 玩家进入训练室 === 2024-01-15 10:30:00 - INFO - 执行规则: welcome_high_relationship 2024-01-15 10:30:00 - INFO - 播放动画: None -> wave_hand 2024-01-15 10:30:00 - INFO - [训练员]: 欢迎回来!今天训练得怎么样? === 关系值降低后的交互 === 2024-01-15 10:30:00 - INFO - 执行规则: neutral_greeting 2024-01-15 10:30:00 - INFO - [训练员]: 你好,需要什么帮助吗?这个示例展示了反应集框架的核心价值:相同的触发事件(进入房间),根据不同的上下文条件(关系值),产生了完全不同的交互结果。
7. 高级特性与扩展实现
7.1 条件优先级与冲突解决
在实际项目中,经常会出现多个规则同时匹配的情况。我们需要更精细的优先级管理:
# src/core/advanced_engine.py class AdvancedReactionEngine(ReactionEngine): """增强型反应引擎""" def process_event(self, event: TriggerEvent) -> bool: """处理事件,返回是否成功执行""" matched_rules = [] for rule in self.rules: if rule.trigger and rule.trigger.check_condition(event): event_context = {**self.context, **event.data} if rule.evaluate_conditions(event_context): matched_rules.append(rule) if not matched_rules: return False # 使用更复杂的优先级逻辑 executed = False for rule in self._prioritize_rules(matched_rules): event_context = {**self.context, **event.data} if rule.execute_actions(event_context): executed = True # 如果规则标记为独占,则停止执行后续规则 if getattr(rule, 'exclusive', False): break return executed def _prioritize_rules(self, rules: list) -> list: """规则优先级排序""" # 1. 按显式优先级排序 rules.sort(key=lambda x: x.priority, reverse=True) # 2. 相同优先级时,按条件特异性排序 # 条件越具体、约束越多的规则优先级越高 for i, rule in enumerate(rules): rule.specificity_score = self._calculate_specificity(rule) # 稳定性排序,保持优先级顺序 rules.sort(key=lambda x: (x.priority, x.specificity_score), reverse=True) return rules def _calculate_specificity(self, rule) -> int: """计算规则的条件特异性""" score = 0 for condition in rule.conditions: # 根据条件类型和约束数量计算特异性 if hasattr(condition, 'config'): score += len(condition.config) return score7.2 状态管理与持久化
对于需要保持状态的复杂系统,我们需要实现状态管理:
# src/core/state_manager.py import json from typing import Dict, Any from datetime import datetime class StateManager: """状态管理器""" def __init__(self, storage_path: str = "game_state.json"): self.storage_path = storage_path self.state = self._load_state() def _load_state(self) -> Dict[str, Any]: """加载持久化状态""" try: with open(self.storage_path, 'r', encoding='utf-8') as f: return json.load(f) except FileNotFoundError: return { "relationships": {}, "last_interaction": {}, "global_flags": {} } def save_state(self): """保存当前状态""" with open(self.storage_path, 'w', encoding='utf-8') as f: json.dump(self.state, f, ensure_ascii=False, indent=2) def update_relationship(self, character_id: str, delta: int): """更新角色关系值""" current = self.state["relationships"].get(character_id, 50) new_value = max(0, min(100, current + delta)) self.state["relationships"][character_id] = new_value self.state["last_interaction"][character_id] = datetime.now().isoformat() def set_global_flag(self, flag_name: str, value: Any): """设置全局标志""" self.state["global_flags"][flag_name] = value def get_relationship(self, character_id: str) -> int: """获取角色关系值""" return self.state["relationships"].get(character_id, 50)8. 性能优化与最佳实践
8.1 规则匹配优化
当规则数量增多时,简单的遍历匹配会成为性能瓶颈。以下是优化方案:
# src/core/optimized_engine.py from collections import defaultdict from typing import Dict, Set class OptimizedReactionEngine(ReactionEngine): """优化版反应引擎""" def __init__(self): super().__init__() self._event_index = defaultdict(set) # 事件类型到规则的索引 def register_rule(self, rule: ReactionRule): """注册规则并建立索引""" super().register_rule(rule) # 建立事件类型索引 if hasattr(rule.trigger, 'config'): event_type = rule.trigger.config.get('event_type') if event_type: self._event_index[event_type].add(rule) def process_event(self, event: TriggerEvent) -> bool: """使用索引优化的事件处理""" # 只检查与事件类型相关的规则 candidate_rules = self._event_index.get(event.event_type, set()) matched_rules = [] for rule in candidate_rules: if rule.trigger.check_condition(event): event_context = {**self.context, **event.data} if rule.evaluate_conditions(event_context): matched_rules.append(rule) # 执行逻辑保持不变 return self._execute_matched_rules(matched_rules, event)8.2 内存管理与资源清理
长期运行的系统需要关注内存使用:
# src/core/resource_manager.py import weakref from typing import List class ResourceManager: """资源管理器""" def __init__(self): self._rules = [] self._weak_refs = weakref.WeakSet() def register_rule(self, rule): """注册规则并管理资源""" self._rules.append(rule) # 对大型资源对象使用弱引用 if hasattr(rule, 'large_resource'): self._weak_refs.add(rule.large_resource) def cleanup_unused_rules(self): """清理未使用的规则""" self._rules = [rule for rule in self._rules if rule.is_active] # 强制垃圾回收 import gc gc.collect()9. 测试策略与质量保证
9.1 单元测试覆盖
为核心组件编写全面的单元测试:
# tests/test_reaction_engine.py import pytest from src.core.engine import ReactionEngine, TriggerEvent from src.core.trigger import EventTrigger from src.core.condition import RelationshipCondition from src.core.action import DialogueAction class TestReactionEngine: """反应引擎测试类""" def setup_method(self): """测试前置设置""" self.engine = ReactionEngine() self.engine.update_context({"relationship": 60}) def test_basic_rule_matching(self): """测试基本规则匹配""" # 创建测试规则 rule = ReactionRule("test_rule", priority=10) rule.set_trigger(EventTrigger("test_trigger", {"event_type": "test_event"})) rule.add_condition(RelationshipCondition("test_cond", {"min_relationship": 50})) # 模拟对话动作 dialogue_executed = [False] # 使用列表实现可修改的闭包 class TestAction(DialogueAction): def execute(self, context): dialogue_executed[0] = True return True rule.add_action(TestAction("test_action", {"text": "测试对话"})) self.engine.register_rule(rule) # 触发事件 event = TriggerEvent("test_event", "test_source", {}, 1234567890.0) self.engine.process_event(event) assert dialogue_executed[0] == True def test_condition_failure(self): """测试条件不满足的情况""" rule = ReactionRule("test_rule") rule.set_trigger(EventTrigger("test_trigger", {"event_type": "test_event"})) rule.add_condition(RelationshipCondition("test_cond", {"min_relationship": 70})) action_executed = [False] class TestAction(DialogueAction): def execute(self, context): action_executed[0] = True return True rule.add_action(TestAction("test_action", {"text": "不应执行的对话"})) self.engine.register_rule(rule) event = TriggerEvent("test_event", "test_source", {}, 1234567890.0) self.engine.process_event(event) assert action_executed[0] == False if __name__ == "__main__": pytest.main([__file__])9.2 集成测试场景
模拟真实游戏场景进行集成测试:
# tests/integration/test_game_scenarios.py class TestGameScenarios: """游戏场景集成测试""" def test_complex_interaction_chain(self): """测试复杂交互链""" # 设置包含多个规则的引擎 engine = setup_complex_engine() # 模拟玩家完成一系列动作 events = [ TriggerEvent("enter_area", "player", {"area": "training_ground"}, 0), TriggerEvent("start_training", "player", {"training_type": "sprint"}, 0), TriggerEvent("complete_training", "system", {"success": True}, 0), ] executed_rules = [] for event in events: result = engine.process_event(event) executed_rules.extend(engine.get_last_executed_rules()) # 验证预期的规则序列 expected_rule_sequence = [ "welcome_training", "training_advice", "training_complete_congrats" ] assert executed_rules == expected_rule_sequence10. 生产环境部署建议
10.1 配置管理
生产环境需要更严格的配置管理:
# config/production.yaml reaction_engine: max_rules: 1000 execution_timeout: 5000 # 毫秒 enable_caching: true cache_ttl: 300 # 秒 logging: level: INFO file_path: /var/log/reaction_engine.log max_size: 100MB backup_count: 5 monitoring: enable_metrics: true metrics_port: 9090 health_check_interval: 3010.2 监控与告警
实现系统健康监控:
# src/monitoring/health_check.py import time from threading import Thread from dataclasses import dataclass from typing import Dict, Any @dataclass class SystemMetrics: """系统指标数据类""" rule_count: int events_processed: int avg_processing_time: float memory_usage_mb: float class HealthMonitor: """健康监控器""" def __init__(self, engine): self.engine = engine self.metrics = SystemMetrics(0, 0, 0.0, 0.0) self._running = False def start_monitoring(self): """启动监控""" self._running = True monitor_thread = Thread(target=self._monitor_loop) monitor_thread.daemon = True monitor_thread.start() def _monitor_loop(self): """监控循环""" while self._running: self._collect_metrics() self._check_thresholds() time.sleep(30) # 30秒采集一次 def _collect_metrics(self): """收集系统指标""" self.metrics.rule_count = len(self.engine.rules) # 实际实现中需要收集更多指标 def _check_thresholds(self): """检查阈值并触发告警""" if self.metrics.rule_count > 1000: self._trigger_alert("规则数量超过阈值") if self.metrics.avg_processing_time > 1000: # 1秒 self._trigger_alert("处理时间过长")11. 常见问题与解决方案
11.1 规则冲突处理
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 同一事件触发多个规则 | 规则条件重叠 | 调整优先级或增加更具体的条件 |
| 规则执行顺序不稳定 | 优先级设置不合理 | 明确优先级数值,避免使用相同优先级 |
| 某些规则从不执行 | 条件过于严格或被高优先级规则阻塞 | 检查条件逻辑,调整优先级顺序 |
11.2 性能问题排查
| 性能症状 | 排查重点 | 优化建议 |
|---|---|---|
| 事件处理延迟 | 规则数量过多 | 使用规则索引,优化匹配算法 |
| 内存占用过高 | 规则资源未释放 | 实现资源管理,使用弱引用 |
| CPU使用率异常 | 条件评估复杂度高 | 缓存评估结果,优化条件逻辑 |
11.3 调试技巧
- 启用详细日志:在开发阶段设置DEBUG级别日志
- 规则执行追踪:记录每个规则的匹配和执行过程
- 条件评估记录:记录每个条件的评估结果和耗时
- 上下文快照:在规则执行前后保存上下文状态
12. 扩展应用场景
反应集框架不仅适用于游戏开发,还可以应用于:
12.1 智能客服系统
# config/customer_service_rules.yaml rules: - id: "greeting_new_user" trigger: type: "event" event_type: "user_connected" conditions: - type: "user_status" is_new_user: true actions: - type: "send_message" text: "欢迎使用我们的服务!我是智能助手,有什么可以帮您?" - id: "handle_complaint" trigger: type: "event" event_type: "user_message" conditions: - type: "message_sentiment" sentiment: "negative" - type: "keyword_match" keywords: ["投诉", "不满意", "问题"] actions: - type: "escalate_to_human" priority: "high"12.2 物联网自动化
# config/iot_automation_rules.yaml rules: - id: "turn_on_lights_at_dusk" trigger: type: "time" condition: "sunset" conditions: - type: "presence" room: "living_room" someone_present: true actions: - type: "device_control" device: "living_room_lights" command: "turn_on" brightness: 70 - id: "energy_saving_mode" trigger: type: "event" event_type: "high_energy_usage" actions: - type: "adjust_thermostat" temperature: -2 - type: "notify_user" message: "检测到高能耗,已自动调整温度设置"反应集框架的价值在于它提供了一种声明式、可维护的方式来管理复杂的行为逻辑。无论是游戏中的角色交互、客服系统中的对话流程,还是物联网设备的自动化控制,都可以通过统一的规则引擎来管理。
在实际项目中,建议先从简单的规则开始,逐步复杂化。重点关注规则的可读性和可维护性,建立清晰的命名规范和文档体系。随着规则数量的增加,要适时引入性能监控和优化措施,确保系统的长期稳定运行。
