AI Agent 30天速成|Day4 笔记

AI Agent 30天速成|Day4 笔记

引言欢迎来到第四天的AI Agent学习!今天我们将深入探讨Agent的感知与决策机制 ,重点解决一个核心问题:Agent如何从环境中获取信息,并基于这些信息做出智能决策?我们将通过两个实战案例来演示:一个是简单的环境感知与状态机决策,另一个是带记忆的强化学习Agent。本文假设你已掌握Python基础,并安装了openainumpy等库。## 核心概念在构建AI Agent时,我们通常遵循感知-思考-行动 循环:1. 感知(Perception) :Agent通过传感器或API获取环境状态2. 决策(Decision)) :基于当前状态和历史记忆,选择最优动作3. 行动(Action) :执行动作并影响环境今天我们将用代码实现一个完整的感知决策循环,并引入有限状态机Q-learning 两种决策策略。## 实战一:基于状态机的环境感知Agent这个Agent将模拟一个简单的"清洁机器人",它感知房间的清洁度,并决定是清洁、充电还是空闲。python# 示例1:感知状态机Agentimport randomimport timeclass CleaningAgent: """清洁机器人Agent,基于状态机决策""" def __init__(self): # 感知状态:电池电量、房间清洁度 self.battery = 100 # 0-100 self.room_cleanliness = 50 # 0-100,0最脏 # 状态机:'clean', 'charge', 'idle' self.state = 'idle' self.reward = 0 # 累计奖励(用于评估) def perceive(self): """感知环境并返回状态字典""" # 模拟传感器数据:电池消耗、房间变脏 self.battery -= random.randint(0, 3) self.room_cleanliness -= random.randint(0, 5) # 随时间变脏 # 限制范围 self.battery = max(0, min(100, self.battery)) self.room_cleanliness = max(0, min(100, self.room_cleanliness)) return { 'battery': self.battery, 'cleanliness': self.room_cleanliness } def decide(self, state): """基于状态机决策下一步动作""" # 状态1:电量<20% -> 充电 if state['battery'] < 20: return 'charge' # 状态2:房间脏(清洁度<30)-> 清洁 elif state['cleanliness'] < 30: return 'clean' # 状态3:其他情况 -> 空闲 else: return 'idle' def act(self, action): """执行动作并更新环境""" if action == 'clean': self.room_cleanliness += 20 self.battery -= 10 print(f" [动作] 清洁房间,清洁度+20,电池-10") elif action == 'charge': self.battery += 30 print(f" [动作] 充电,电池+30") elif action == 'idle': self.battery -= 2 # 空闲也耗电 print(f" [动作] 空闲中...") # 更新奖励:清洁度越高,奖励越大 self.reward += self.room_cleanliness * 0.1 def run(self, steps=10): """主循环:感知-决策-行动""" print("=== 开始清洁任务 ===") for step in range(steps): print(f"\n步骤 {step+1}:") state = self.perceive() print(f" 感知状态: 电池={state['battery']}%, 清洁度={state['cleanliness']}") action = self.decide(state) print(f" 决策: 执行 {action}") self.act(action) time.sleep(0.5) # 模拟时间流逝 print(f"\n=== 任务结束,累计奖励: {self.reward:.2f} ===")# 运行Agentagent = CleaningAgent()agent.run(steps=8)代码解读 :- perceive() 模拟传感器,随机改变电池和清洁度- decide() 基于状态机规则决策:电量低则充电,房间脏则清洁- act() 执行动作并更新环境,同时计算奖励- 运行结果展示了Agent如何在清洁、充电、空闲间切换,实现自主平衡## 实战二:带记忆的强化学习Agent(Q-learning)为了展示更高级的决策能力,我们实现一个简单的Q-learning Agent 。它通过与环境交互来学习最优策略,并维护一个"记忆"表(Q表)。python# 示例2:Q-learning Agent(带记忆的决策)import numpy as npimport randomclass QLearningAgent: """基于Q-learning的决策Agent,带记忆""" def __init__(self, state_size=10, action_size=3, learning_rate=0.1, discount=0.9): # Q表:存储状态-动作价值,初始化为0 self.q_table = np.zeros((state_size, action_size)) self.lr = learning_rate # 学习率 self.gamma = discount # 折扣因子 self.epsilon = 1.0 # 探索率 self.epsilon_decay = 0.995 self.min_epsilon = 0.01 self.memory = [] # 记忆:存储经验 (state, action, reward, next_state) # 动作空间:0=左,1=右,2=不动 self.actions = ['left', 'right', 'stay'] def get_state(self, position): """将连续位置离散化为状态索引""" # 假设环境有10个离散状态(0-9) return int(position) # 简化处理 def choose_action(self, state): """ε-贪心策略选择动作""" if random.random() < self.epsilon: # 探索 return random.randint(0, len(self.actions)-1) else: # 利用 return np.argmax(self.q_table[state]) def remember(self, state, action, reward, next_state): """存储经验到记忆""" self.memory.append((state, action, reward, next_state)) if len(self.memory) > 1000: # 限制记忆长度 self.memory.pop(0) def learn(self): """从记忆中采样并更新Q表""" if len(self.memory) < 5: # 至少需要5条经验 return # 随机采样小批量 batch = random.sample(self.memory, min(5, len(self.memory))) for state, action, reward, next_state in batch: # Q-learning更新公式 best_next_q = np.max(self.q_table[next_state]) target = reward + self.gamma * best_next_q self.q_table[state][action] += self.lr * (target - self.q_table[state][action]) # 衰减探索率 self.epsilon = max(self.min_epsilon, self.epsilon * self.epsilon_decay) def run_episode(self, steps=20): """运行一个完整的学习周期""" print(" [开始新回合]") # 随机初始位置 position = random.randint(0, 9) total_reward = 0 for step in range(steps): state = self.get_state(position) action = self.choose_action(state) # 模拟环境反馈:向左或向右移动 if action == 0: # 左 position = max(0, position - 1) elif action == 1: # 右 position = min(9, position + 1) # action ==2 不动 # 奖励设计:越靠近目标(位置5)奖励越高 target = 5 reward = -abs(position - target) # 距离越近,负值越小(奖励越大) next_state = self.get_state(position) self.remember(state, action, reward, next_state) self.learn() total_reward += reward # 如果到达目标附近,结束 if position == target: print(f" 步骤{step+1}: 到达目标!位置={position}") break print(f" [结束] 总奖励: {total_reward:.2f}, 探索率: {self.epsilon:.3f}") return total_reward# 训练Agentagent = QLearningAgent()print("=== 开始Q-learning训练 ===")for episode in range(5): print(f"\n回合 {episode+1}:") reward = agent.run_episode(steps=15)print("\n=== 训练后的Q表(部分) ===")# 显示前5个状态的Q值for state in range(5): print(f"状态{state}: {agent.q_table[state].round(2)}")代码解读 :- q_table 存储每个状态-动作对的价值,是Agent的"记忆"- remember() 将经验存入记忆缓冲区- learn() 从记忆中采样并更新Q表,实现离线学习 - 奖励设计引导Agent向目标位置靠近,最终学会最优路径- 训练后Q表显示了不同状态下各动作的价值,例如状态0时向右移动的价值更高## 总结通过今天的实战,我们完成了AI Agent感知与决策的完整实现:1. 状态机Agent :基于硬编码规则决策,适合简单、可预测的环境2. Q-learning Agent :通过记忆和强化学习自动发现最优策略,适合复杂、动态环境关键收获:- 感知层负责将环境数据转化为结构化状态- 决策层可以是规则(状态机)或学习(Q-learning)- 记忆机制(Q表或经验缓冲区)是高级Agent的核心- ε-贪心策略平衡了探索与利用明天我们将学习如何让这些Agent具备自然语言理解能力,与LLM结合实现更复杂的交互。敬请期待!

相关推荐
EAIReport1 小时前
企业GEO全域运营技术落地路线与量化效果验证方案(AI大数据行业适配)
大数据·人工智能
小保CPP1 小时前
OpenCV C++车型识别1-图像预处理
c++·人工智能·opencv·计算机视觉
普密斯科技1 小时前
如何一键解决手机镜头磨切片微米级尺寸测量难题?
人工智能·计算机视觉·智能手机·测量
qq_454245031 小时前
认知自举:LLM自我指令泛化的三层逻辑
人工智能·架构·prompt
Luminbox紫创测控1 小时前
可调UV宽光谱高功率的LED太阳能模拟器
人工智能·测试工具·汽车·安全性测试·uv·测试标准
董员外2 小时前
RAG 系统进化论(一):纵览 RAG 的发展历程
前端·人工智能·后端
殷紫川2 小时前
Agent Skills:把团队里"只会做一遍"的经验,变成 Agent 能反复调用的能力包
人工智能·agent
AI搅拌机2 小时前
LoRA训练实战10:Wan2.2人物变火特效LoRA极简训练法,上手指南!
人工智能
京东云开发者2 小时前
别再守着 Claude Code 了——学会指挥它自主干活
人工智能