1. 项目概述:从零构建Python极简Agent框架
作为一名在软件架构领域深耕15年的技术老兵,我一直对智能体(Agent)系统充满热情。今天,我将带大家用Python从零开始构建一个极简但功能完整的Agent框架。这个框架将包含感知、决策、行动等核心模块,总代码量控制在500行以内,却能够支撑起各种智能应用场景的开发需求。
为什么选择自己造轮子?现有的LangChain、AutoGPT等框架确实功能强大,但它们的复杂性往往让初学者望而生畏。通过这个手把手实现的极简框架,你不仅能深入理解Agent的核心原理,还能获得一个可自由定制的基础设施,特别适合中小型智能项目的快速原型开发。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心架构设计
2.1 Agent基础模型
我们的框架基于经典的BDI(Belief-Desire-Intention)模型简化而来,包含以下核心组件:
- 感知模块:负责从环境获取信息
- 记忆模块:存储历史经验和知识
- 决策引擎:处理信息并生成行动决策
- 执行模块:将决策转化为具体行动
- 通信接口:与环境或其他Agent交互
python复制class Agent:
def __init__(self):
self.perception = PerceptionModule()
self.memory = EpisodicMemory()
self.decision = DecisionEngine()
self.actions = ActionExecutor()
2.2 工作流程设计
Agent的核心工作循环遵循"感知-思考-行动"模式:
- 通过传感器收集环境数据
- 将感知数据与记忆结合进行分析
- 根据当前状态选择最优行动
- 执行行动并观察结果
- 更新内部状态和记忆
这个循环会持续运行,直到达到终止条件。我们用一个状态机来管理整个生命周期:
python复制class AgentState(Enum):
INITIALIZING = 0
PERCEIVING = 1
THINKING = 2
ACTING = 3
LEARNING = 4
SHUTDOWN = 5
3. 核心模块实现
3.1 感知模块详解
感知模块负责从各种数据源收集信息并转换为统一格式。我们实现了三种典型传感器:
- 轮询传感器:定期检查数据源变化
- 事件驱动传感器:响应外部事件
- 混合传感器:结合前两种模式
python复制class TemperatureSensor(PollingSensor):
def _get_current_state(self):
# 模拟从硬件读取温度
temp = read_temperature()
return State(data={"temperature": temp})
关键实现细节:
- 传感器注册机制
- 数据标准化处理
- 异常值过滤
- 多源数据融合
提示:在实际应用中,建议为每个传感器设置独立的线程或协程,避免阻塞主循环。
3.2 记忆系统实现
记忆系统采用分层设计:
- 情景记忆:存储具体经历和事件
- 语义记忆:保存事实和概念知识
- 程序记忆:记录技能和操作流程
python复制class HybridMemory:
def __init__(self):
self.episodic = EpisodicMemory()
self.semantic = SemanticMemory()
self.procedural = ProceduralMemory()
def remember(self, experience):
# 自动分类存储
if experience.metadata.get('is_fact'):
self.semantic.store(experience)
else:
self.episodic.store(experience)
记忆检索支持多种方式:
- 时间范围查询
- 语义相似度搜索
- 关联记忆唤醒
3.3 决策引擎设计
决策引擎采用策略模式,支持多种决策算法:
- 基于规则:if-then规则集
- 效用理论:成本收益分析
- 强化学习:Q-learning算法
python复制class RLDecisionStrategy(DecisionStrategy):
def __init__(self):
self.q_table = defaultdict(dict)
def decide(self, perception, memory):
state = self._extract_state(perception)
available = self._get_available_actions()
# ε-greedy策略
if random() < self.epsilon:
return random.choice(available)
else:
q_values = [self.q_table[state][a] for a in available]
return available[np.argmax(q_values)]
决策过程可视化工具:
python复制def visualize_decision(perception, decision):
plt.figure()
# 绘制决策树/流程图
plt.show()
4. 完整实现案例
4.1 智能温控Agent实现
下面是一个完整的温度控制Agent示例:
python复制class ThermostatAgent(Agent):
def __init__(self, target_temp):
super().__init__()
self.target = target_temp
self.setup_sensors()
self.setup_actions()
def setup_sensors(self):
temp_sensor = TemperatureSensor()
self.perception.add_sensor(temp_sensor)
def setup_actions(self):
self.actions.register("start_heating", self.start_heater)
self.actions.register("start_cooling", self.start_ac)
def decide_rules(self, perception):
current = perception.state['temperature']
if current < self.target - 2:
return "start_heating"
elif current > self.target + 2:
return "start_cooling"
def run(self):
while True:
perception = self.perception.sense_all()
decision = self.decision.decide(perception)
self.actions.execute(decision)
sleep(10)
4.2 电商推荐Agent
再来看一个更复杂的电商推荐Agent:
python复制class RecommendationAgent(Agent):
def __init__(self):
super().__init__()
self.user_profiles = UserProfileDB()
def process_user_event(self, event):
# 构建感知数据
perception = Perception(
state=State(data=event.data),
source="user_event"
)
# 决策过程
action = self.decision.decide(perception)
# 执行推荐
if action == "recommend_products":
products = self._generate_recommendations()
return products
def _generate_recommendations(self):
# 基于用户画像和协同过滤的混合推荐
pass
5. 高级功能扩展
5.1 多Agent协作
通过消息总线实现Agent间通信:
python复制class MessageBus:
def __init__(self):
self.subscribers = defaultdict(list)
def publish(self, topic, message):
for callback in self.subscribers[topic]:
callback(message)
def subscribe(self, topic, callback):
self.subscribers[topic].append(callback)
5.2 持续学习机制
实现在线学习功能:
python复制class LearningModule:
def update_from_experience(self, experience):
# 更新决策模型
self.decision.learn(experience)
# 知识提炼
if self._should_extract_knowledge(experience):
self.memory.add_fact(
self._extract_knowledge(experience)
)
5.3 可视化监控界面
使用PyQt构建管理界面:
python复制class AgentDashboard(QMainWindow):
def __init__(self, agent):
super().__init__()
self.agent = agent
self.setup_ui()
def setup_ui(self):
# 创建状态显示面板
self.status_view = AgentStatusView(self.agent)
# 创建控制按钮
self.start_btn = QPushButton("Start")
self.start_btn.clicked.connect(self.agent.start)
6. 性能优化技巧
6.1 记忆系统优化
- 分级存储:热数据放内存,冷数据存磁盘
- 索引优化:为常用查询建立专门索引
- 记忆压缩:定期清理无用记忆
python复制class OptimizedMemory(Memory):
def __init__(self):
self.cache = LRUCache(maxsize=1000)
self.storage = DiskStorage()
def get(self, key):
if key in self.cache:
return self.cache[key]
else:
value = self.storage.get(key)
self.cache[key] = value
return value
6.2 决策加速
- 预计算:提前计算常见场景的决策
- 缓存:缓存重复决策结果
- 简化模型:在资源紧张时切换轻量级模型
python复制class CachedDecisionEngine(DecisionEngine):
def __init__(self):
self.cache = {}
def decide(self, perception):
state_key = self._get_state_key(perception)
if state_key in self.cache:
return self.cache[state_key]
decision = super().decide(perception)
self.cache[state_key] = decision
return decision
7. 测试与调试
7.1 单元测试示例
python复制class TestAgent(unittest.TestCase):
def setUp(self):
self.agent = ThermostatAgent(target_temp=22)
def test_heating_decision(self):
perception = Perception(state={"temperature": 18})
action = self.agent.decision.decide(perception)
self.assertEqual(action, "start_heating")
def test_cooling_decision(self):
perception = Perception(state={"temperature": 26})
action = self.agent.decision.decide(perception)
self.assertEqual(action, "start_cooling")
7.2 日志记录策略
python复制class LoggingMixin:
def __init__(self):
self.logger = logging.getLogger(self.__class__.__name__)
def log_decision(self, perception, decision):
self.logger.info(
f"Decision made: {decision} "
f"based on {perception.state}"
)
8. 部署方案
8.1 本地运行
最简单的启动方式:
bash复制python my_agent.py --config agent_config.yaml
8.2 容器化部署
Dockerfile示例:
dockerfile复制FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "agent_service.py"]
8.3 云原生部署
Kubernetes部署配置:
yaml复制apiVersion: apps/v1
kind: Deployment
metadata:
name: agent-service
spec:
replicas: 3
template:
spec:
containers:
- name: agent
image: my-agent:latest
ports:
- containerPort: 8080
9. 常见问题解决
9.1 决策延迟过高
可能原因:
- 感知数据过多
- 决策算法复杂
- 记忆检索效率低
解决方案:
python复制# 简化感知数据
def filter_perception(perception):
return {k: v for k, v in perception.items()
if k in IMPORTANT_KEYS}
# 设置决策超时
decision = timeout(5)(self.decider.decide)(perception)
9.2 记忆占用过大
优化策略:
- 实现记忆淘汰机制
- 使用更紧凑的数据结构
- 定期记忆归档
python复制class OptimizedMemory:
def __init__(self, max_size=10000):
self.data = []
self.max_size = max_size
def add(self, experience):
if len(self.data) >= self.max_size:
self.data.pop(0) # FIFO淘汰
self.data.append(compress(experience))
10. 项目扩展方向
- 集成LLM:接入大语言模型增强推理能力
python复制class LLMEnhancedDecision(DecisionStrategy):
def decide(self, perception):
prompt = self._build_prompt(perception)
response = llm.generate(prompt)
return self._parse_response(response)
- 多模态感知:支持图像、语音等输入
python复制class VisionSensor(Sensor):
def sense(self):
image = camera.capture()
return self._analyze_image(image)
- 分布式协作:实现Agent集群
python复制class DistributedAgent(Agent):
def __init__(self, node_id):
self.cluster = AgentCluster(node_id)
def share_knowledge(self):
self.cluster.broadcast(
KnowledgeMessage(self.memory.export())
)
这个极简Agent框架虽然代码量不大,但包含了构建智能系统所需的核心要素。通过这个项目,我们不仅深入理解了Agent的工作原理,还获得了一个可扩展的基础框架。在实际应用中,你可以根据具体需求添加更多高级功能,比如集成机器学习模型、增加容错机制等。
