如皋市建设局网站在哪里,网站建设流程要多少钱,做网站vpn多大内存,辽宁网站seo一、知识点解析Agent 架构是构建智能体系统的核心骨架#xff0c;包含三个关键维度#xff1a;单代理 vs 多代理#xff1a;单代理独立完成任务#xff1b;多代理通过协作#xff08;如分工、辩论、黑板模型#xff09;解决复杂问题#xff1b;Agent Loop#xff1a;主…一、知识点解析Agent 架构是构建智能体系统的核心骨架包含三个关键维度单代理 vs 多代理单代理独立完成任务多代理通过协作如分工、辩论、黑板模型解决复杂问题Agent Loop主控制循环持续执行“感知 → 推理 → 行动 → 记忆更新”Memory 机制存储历史交互短期记忆或长期知识向量/图记忆支持上下文连贯与跨轮推理。本教学将实现一个带记忆的单代理 Loop并扩展为双代理协作架构Manager Executor全部手动编码清晰展示状态流与通信机制。二、可运行代码实例依赖安装pip install openai python-dotenv完整代码单代理 双代理 Memoryimport os from openai import OpenAI from dotenv import load_dotenv load_dotenv() client OpenAI(api_keyos.getenv(OPENAI_API_KEY)) # 简易记忆模块短期对话记忆 class SimpleMemory: def __init__(self, max_turns5): self.history [] self.max_turns max_turns def add(self, role: str, content: str): self.history.append({role: role, content: content}) if len(self.history) self.max_turns * 2: # 每轮含 user assistant self.history self.history[-self.max_turns * 2:] def get(self): return self.history.copy() # 单代理带记忆的 ReAct Agent class SingleAgent: def __init__(self, nameAssistant): self.name name self.memory SimpleMemory() def step(self, user_input: str) - str: self.memory.add(user, user_input) resp client.chat.completions.create( modelgpt-3.5-turbo, messagesself.memory.get(), temperature0.0 ) answer resp.choices[0].message.content.strip() self.memory.add(assistant, answer) return answer # 多代理Manager Executor 协作 class ManagerAgent: def __init__(self): self.memory SimpleMemory() def plan(self, task: str) - str: prompt fBreak down the task into one clear subtask for an executor:\nTask: {task} resp client.chat.completions.create( modelgpt-3.5-turbo, messages[{role: user, content: prompt}], temperature0.0 ) return resp.choices[0].message.content.strip() class ExecutorAgent: def execute(self, subtask: str) - str: resp client.chat.completions.create( modelgpt-3.5-turbo, messages[{role: user, content: fExecute: {subtask}}], temperature0.0 ) return resp.choices[0].message.content.strip() def multi_agent_run(task: str) - str: manager ManagerAgent() executor ExecutorAgent() subtask manager.plan(task) result executor.execute(subtask) # Manager synthesizes final answer final_prompt fTask: {task}\nSubtask Result: {result}\nSummarize concisely. resp client.chat.completions.create( modelgpt-3.5-turbo, messages[{role: user, content: final_prompt}], temperature0.0 ) return resp.choices[0].message.content.strip() # 示例运行 if __name__ __main__: # 单代理测试带记忆 agent SingleAgent() print([Single Agent]) print(agent.step(What is 22?)) print(agent.step(Now multiply that by 3.)) # 应记住前文答案 4 print(\n[Multi Agent]) ans multi_agent_run(Explain how photosynthesis works in simple terms.) print(ans)三、代码逐行讲解▶Memory 机制第 8–18 行SimpleMemory使用列表存储对话历史限制最大轮数防止上下文过长add()方法追加消息get()返回副本供 LLM 调用——这是短期记忆的标准实现设计要点不使用全局变量每个 Agent 拥有独立记忆避免状态污染。▶单代理 Loop第 21–32 行SingleAgent.step()是Agent Loop 的最小单元接收输入 → 查询记忆 → 调用 LLM → 更新记忆 → 返回输出关键messagesself.memory.get()将记忆注入上下文使 LLM 具备历史感知能力温度设为 0.0 确保确定性便于验证记忆是否生效。▶多代理协作第 35–60 行ManagerAgent负责任务分解规划体现“思考”角色ExecutorAgent负责执行子任务体现“行动”角色multi_agent_run()实现两阶段流水线Plan → Execute → Synthesize通信方式通过函数参数传递子任务和结果最简化的消息传递。▶示例逻辑第 63–73 行单代理连续提问验证记忆“224” → “4×312”多代理处理复杂任务由 Manager 拆解Executor 执行Manager 整合。⚠️为什么不用共享内存初学者应先掌握显式消息传递更安全、可追溯再进阶到共享黑板或向量数据库。四、效果验证与输出示例预期输出[Single Agent] 4 12 [Multi Agent] Photosynthesis is how plants use sunlight to turn carbon dioxide and water into sugar (food) and oxygen.关键验证点单代理第二问能正确引用第一问结果证明Memory 机制生效多代理输出简洁准确证明分工协作有效。 若第二问返回“224, then 4*312”说明记忆成功注入上下文。五、扩展优化当前局限性记忆仅支持对话历史无长期知识存储多代理为静态流水线无法动态协商无错误恢复或重试机制。优化方向 1添加长期记忆向量检索# 使用 FAISS sentence-transformers需 pip install faiss-cpu sentence-transformers from sentence_transformers import SentenceTransformer import faiss import numpy as np class VectorMemory: def __init__(self): self.encoder SentenceTransformer(all-MiniLM-L6-v2) self.index faiss.IndexFlatL2(384) self.memories [] def add(self, text: str): emb self.encoder.encode([text]).astype(float32) self.index.add(emb) self.memories.append(text) def search(self, query: str, k1) - list: emb self.encoder.encode([query]).astype(float32) _, idxs self.index.search(emb, k) return [self.memories[i] for i in idxs[0]]优化方向 2多代理动态协商简单投票# 启动多个 ExecutorManager 投票选择最佳答案 executors [ExecutorAgent() for _ in range(3)] results [e.execute(subtask) for e in executors] # Manager 选择最一致的答案简化版 final results[0] # 实际可用 LLM 判断一致性