共计 2391 个字符,预计需要花费 6 分钟才能阅读完成。
什么是 Agent?
在编程领域,Agent(智能代理)是一种能够自主感知环境、做出决策并执行动作的软件实体。与传统程序最大的不同在于:

- 主动性:Agent 会主动响应环境变化,而非被动等待指令
- 目标驱动:具有明确的 goal(目标)并自主规划行动
- 持续性:长期运行并维护内部状态
举个生活化的例子:传统程序像微波炉(按按钮才工作),而 Agent 更像扫地机器人(自动规划路线完成清洁)。
基础 Agent 实现
下面用 Python 构建一个简单的温度调节 Agent:
class ThermostatAgent:
"""温度调节代理示例"""
def __init__(self, ideal_temp=22):
self.ideal_temp = ideal_temp # 目标温度
self.current_temp = None # 环境感知状态
# 环境感知模块
def perceive(self, sensor_input):
self.current_temp = sensor_input
print(f"[感知] 当前温度: {self.current_temp}℃")
# 决策逻辑
def decide(self) -> str:
if self.current_temp > self.ideal_temp + 2:
return "cool"
elif self.current_temp < self.ideal_temp - 2:
return "heat"
return "maintain"
# 动作执行
def act(self, action):
actions = {
"cool": "开启制冷",
"heat": "开启加热",
"maintain": "保持当前状态"
}
print(f"[执行] {actions[action]}")
return action
# 测试用例
def test_agent():
agent = ThermostatAgent()
test_cases = [25, 20, 22] # 测试温度序列
for temp in test_cases:
agent.perceive(temp)
action = agent.decide()
agent.act(action)
print("-"*30)
if __name__ == "__main__":
test_agent()
这个示例实现了经典的三段式架构:
1. perceive() 方法获取温度传感器数据
2. decide() 根据目标温度做出决策
3. act() 执行具体操作
状态管理策略
Agent 需要管理复杂的状态流转,常见方案有:
有限状态机(FSM)
from enum import Enum, auto
class State(Enum):
IDLE = auto()
COOLING = auto()
HEATING = auto()
class FSMAgent:
def __init__(self):
self.state = State.IDLE
def transition(self, temp):
if temp > 25 and self.state != State.COOLING:
print("状态转换: IDLE → COOLING")
self.state = State.COOLING
elif temp < 18 and self.state != State.HEATING:
print("状态转换: IDLE → HEATING")
self.state = State.HEATING
elif 18 <= temp <= 25:
print("状态转换: → IDLE")
self.state = State.IDLE
行为树(Behavior Tree)
更适合复杂决策场景,可以通过 py_trees 库实现:
import py_trees as pt
def create_behavior_tree():
root = pt.composites.Sequence("Root")
# 条件检查
check_temp = pt.behaviours.CheckBlackboardVariable(
name="温度检查",
variable_name="temperature",
expected_value=22,
operator=operator.lt
)
# 动作节点
heat_action = pt.behaviours.Print("执行加热")
root.add_children([check_temp, heat_action])
return root
避坑指南
- 循环决策预防
- 设置决策超时机制
-
记录决策历史避免重复
def decide(self): if time.time() - self.last_decision_time < 1.0: return "wait" # 冷却期 # ... 正常决策逻辑 -
资源竞争处理
-
对共享资源使用锁机制
from threading import Lock class SafeAgent: def __init__(self): self.lock = Lock() def update_state(self, new_state): with self.lock: # 线程安全的状态更新 self.state = new_state -
异常恢复机制
- 实现心跳检测
- 设计 fallback 策略
def run(self): try: while True: self.perceive() self.decide() self.act() except Exception as e: print(f"Agent 崩溃: {e}") self.reset_state() # 恢复初始状态
进阶思考
- 如何让 Agent 记住历史决策并从中学习?
- 当多个 Agent 需要协作时,通信机制如何设计?
- 在资源受限环境下,如何优化 Agent 的决策效率?
结语
构建第一个 Agent 就像教小朋友学走路,从简单的感知 - 决策 - 动作循环开始,逐步增加状态管理和异常处理能力。建议先用 FSM 实现核心逻辑,再根据需要引入更复杂的架构。记住:好的 Agent 不是一次写成的,而是通过不断迭代进化而来。
正文完
