智能体(Intelligent Agents)入门自学教程 4 基于规则的智能体

4.1 规则系统简介:IF–THEN 格式

  • 基本思路
    规则系统由一组“如果 IF …,那么 THEN …”规则组成,智能体不断地:

    1. 感知环境(获取输入数据)
    2. 规则匹配(检查哪些 IF 条件为真)
    3. 动作执行(对满足条件的规则执行对应的 THEN 操作)
  • 规则结构

    IF <条件表达式> THEN <动作或结论>
    
    • 条件表达式:可包含多种感知变量,例如传感器读数、用户输入、环境状态等
    • 动作:可以是输出一条信息、调用一个函数、改变环境或更新内部状态
  • 规则引擎简易伪码

    rules = [ (condition1, action1),
              (condition2, action2),]
    
    while True:
        percept = sense_environment()
        for cond, act in rules:
            if cond(percept):      # 条件匹配
                act(percept)       # 执行动作
                break               # 如果只想触发第一个匹配,可 break
    
  • 冲突解决

    • 优先级:为规则分配优先级,先执行高优先级规则
    • 随机选择:从所有匹配规则中随机选一个执行
    • 最特殊化:选择条件最具体的规则

4.2 示例

示例 1:简单 FAQ 聊天机器人
# 规则库:关键词 → 回复
rules = {
    "你好":      "你好!有什么可以帮您?",
    "价格":      "我们的产品价格在 100–500 元之间,具体视型号而定。",
    "折扣":      "本月折扣高达 20%,详情请咨询客服。",
}

def faq_bot(user_input: str):
    for keyword, reply in rules.items():
        if keyword in user_input:
            return reply
    return "抱歉,我没听懂,请换个说法。"

# 运行示例
print(faq_bot("请问价格是多少?"))   # → 我们的产品价格在 100–500 元之间...
print(faq_bot("折扣力度?"))         # → 本月折扣高达 20%...

思考:这种实现简单易懂,但只能基于“关键词包含”做匹配,无法处理更复杂的语言。


示例 2:智能温控器
# 设定阈值
TEMP_LOW  = 18  # 摄氏度
TEMP_HIGH = 26

def thermostat_agent(temp: float):
    if temp < TEMP_LOW:
        return "启动暖气"     # THEN
    elif temp > TEMP_HIGH:
        return "启动空调制冷"
    else:
        return "温度适宜,保持当前状态"

# 模拟不同温度读数
for t in [16.5, 22.0, 28.3]:
    print(f"当前温度 {t}℃ → {thermostat_agent(t)}")

延伸:加入“湿度”或“空气质量”规则,让代理更加智能。


示例 3:避障小车(二维网格)
import random

# 网格:0 可通行,1 障碍
grid = [
    [0,0,0,1],
    [0,1,0,0],
    [0,0,0,0],
]
pos = [0, 0]         # 起点 (row, col)
directions = [(0,1),(1,0),(0,-1),(-1,0)]  # 右、下、左、上

def sense_obstacle(pos, dir):
    r, c = pos
    dr, dc = dir
    nr, nc = r+dr, c+dc
    if 0 <= nr < len(grid) and 0 <= nc < len(grid[0]):
        return grid[nr][nc] == 1
    return True  # 出界也当做障碍

rules = [
    # 优先尝试向“右”走,否则向“下”,否则随机
    (lambda p: not sense_obstacle(p, directions[0]), lambda p: (p[0], p[1]+1)),
    (lambda p: not sense_obstacle(p, directions[1]), lambda p: (p[0]+1, p[1])),
    (lambda p: True,                               lambda p: random.choice(directions)(p)),
]

# 简易执行一轮
for step in range(5):
    for cond, act in rules:
        if cond(pos):
            pos = act(pos)
            break
    print("移动到", pos)

思考:如何给规则加优先级?如何避免陷入死循环?


4.3 练习

  1. 扩展 FAQ 机器人

    • 将规则库改为列表形式,支持多关键词匹配:
      rules = [
        (["你好","嗨"],      "你好!"),
        (["价格","多少钱"],  "产品价格在..."),]
      
    • 实现:当用户输入包含任一关键词列表时,触发该回复。
  2. 多条件温控器

    • 在“温度”之外加入“湿度”判断:
      • 湿度 > 70% → “启动除湿模式”
      • 温度 < 18 且湿度 > 60 → “同时启动暖气和除湿”
    • 练习:设计不少于 5 条规则并用代码实现。
  3. 规则加载与热更新

    • 将规则库写入一个 JSON 文件,格式例如:
      [
        {"if": "temp < 18",      "then": "启动暖气"},
        {"if": "humid > 70",     "then": "启动除湿"},]
      
    • 实现:程序启动时加载规则;运行中检测到文件变更后自动重载并生效。
  4. 避障小车改进

    • 为小车增加“回溯”能力:若前后左右均有障碍,则往回走;
    • 实现一个“访问记录”列表,避免重复走同一格子。
    • 统计完成 20 步后访问过多少不同格子。
  5. 自行设计小项目

    • 选择一个生活场景(如智能灯光、浇花系统、消息通知等),用至少 6 条 IF–THEN 规则实现一个小型智能体。
    • 编写 README,说明每条规则的含义与优先级策略,并演示运行效果。

以上内容既有原理解析,又通过多个示例让你快速上手;练习部分难度可自行调整,边动手边思考规则引擎的扩展与优化。祝学习愉快!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山海青风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值