共计 1778 个字符,预计需要花费 5 分钟才能阅读完成。
技术背景:Agent 是什么?
Agent(智能代理)可以理解为一个能自主感知环境、做出决策并执行动作的 AI 程序单元。和传统程序最大的区别在于:传统程序是「输入 - 输出」的固定流水线,而 Agent 具备自主决策能力——就像人类员工接到任务后,会自己判断怎么完成。

典型应用场景包括:
- 电商客服机器人(自动理解用户问题并推荐解决方案)
- 游戏 NPC(根据玩家行为动态调整对话和动作)
- 智能家居中枢(分析传感器数据后控制家电)
第一个 Python Agent 实战
我们用一个天气预报查询 Agent 演示基本架构,包含感知、决策、执行三个核心环节:
class WeatherAgent:
def __init__(self):
self.memory = {} # 记忆最近查询过的城市
# 感知环节:接收用户输入
def perceive(self, user_input):
city = user_input.strip().lower()
return {'city': city, 'from_memory': city in self.memory}
# 决策环节:判断是否查询新数据
def decide(self, perception):
if perception['from_memory']:
return 'respond_from_memory'
return 'fetch_new_data'
# 执行环节:具体动作实现
def act(self, decision, perception):
if decision == 'respond_from_memory':
return f"{perception['city']}的天气是{self.memory[perception['city']]}"
else:
# 模拟 API 调用(实际项目替换为真实请求)weather_data = {"sunny": "晴天", "rainy": "雨天"}
result = weather_data.get(perception['city'], "未知")
self.memory[perception['city']] = result # 存入记忆
return f"{perception['city']}的天气是{result}"
# 使用示例
agent = WeatherAgent()
print(agent.act(agent.decide(agent.perceive("sunny")), # 决策链调用
agent.perceive("sunny")
))
关键点说明:
perceive()处理原始输入(如去除空格、转小写)decide()根据业务逻辑选择策略(这里优先使用缓存)act()执行具体操作并更新内部状态
新手避坑指南
状态管理三原则
- 避免全局变量:像示例中用
self.memory封装状态 - 重要操作加日志:决策前后打印
print(f'Decision: {decision}') - 定期清理记忆:长时间运行的 Agent 需要设置
memory过期时间
决策循环安全
典型问题:当 Agent 还在处理上个请求时,新请求已经修改了共享状态。解决方案:
from threading import Lock
class SafeAgent(WeatherAgent):
def __init__(self):
super().__init__()
self.lock = Lock()
def act(self, decision, perception):
with self.lock: # 确保线程安全
return super().act(decision, perception)
调试技巧
- 可视化决策路径:用
graphviz绘制决策树 - 回放测试:保存输入输出日志用于复现问题
- 压力测试:用
locust模拟并发请求
如何让 Agent 更聪明?
进阶优化方向
- 记忆优化:用
SQLite替代字典存储历史记录 - 决策增强:接入 LLM 处理复杂语义(如
langchain框架) - 容错机制:当 API 调用失败时自动重试 3 次
推荐学习路径
- 基础:Python 面向对象编程
- 进阶:《AI 代理设计模式》(豆瓣 8.2 分)
- 实战:GitHub 搜索 ”agent framework” 参考开源项目
课后思考题
- 如果想让 Agent 记住用户的偏好(如喜欢温度用华氏度显示),代码需要怎么修改?
- 当两个用户同时查询同一个城市天气时,怎样避免重复调用 API?
- 除了天气查询,你觉得哪些场景适合用 Agent 技术重构?
正文完
