如何开假医院诊断证明
2025/12/25 18:33:03
Agent 架构是构建智能体系统的核心骨架,包含三个关键维度:
本教学将实现一个带记忆的单代理 Loop,并扩展为双代理协作架构(Manager + Executor),全部手动编码,清晰展示状态流与通信机制。
pip install openai python-dotenvimport os from openai import OpenAI from dotenv import load_dotenv load_dotenv() client = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) # ===== 简易记忆模块(短期对话记忆)===== class SimpleMemory: def __init__(self, max_turns=5): 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, name="Assistant"): self.name = name self.memory = SimpleMemory() def step(self, user_input: str) -> str: self.memory.add("user", user_input) resp = client.chat.completions.create( model="gpt-3.5-turbo", messages=self.memory.get(), temperature=0.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 = f"Break down the task into one clear subtask for an executor:\nTask: {task}" resp = client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}], temperature=0.0 ) return resp.choices[0].message.content.strip() class ExecutorAgent: def execute(self, subtask: str) -> str: resp = client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": f"Execute: {subtask}"}], temperature=0.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 = f"Task: {task}\nSubtask Result: {result}\nSummarize concisely." resp = client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": final_prompt}], temperature=0.0 ) return resp.choices[0].message.content.strip() # ===== 示例运行 ===== if __name__ == "__main__": # 单代理测试(带记忆) agent = SingleAgent() print("[Single Agent]") print(agent.step("What is 2+2?")) 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)SimpleMemory使用列表存储对话历史,限制最大轮数防止上下文过长;add()方法追加消息,get()返回副本供 LLM 调用——这是短期记忆的标准实现;SingleAgent.step()是Agent Loop 的最小单元:接收输入 → 查询记忆 → 调用 LLM → 更新记忆 → 返回输出;messages=self.memory.get()将记忆注入上下文,使 LLM 具备历史感知能力;multi_agent_run()实现两阶段流水线:Plan → Execute → Synthesize;⚠️为什么不用共享内存?
初学者应先掌握显式消息传递(更安全、可追溯),再进阶到共享黑板或向量数据库。
预期输出:
[Single Agent] 4 12 [Multi Agent] Photosynthesis is how plants use sunlight to turn carbon dioxide and water into sugar (food) and oxygen.关键验证点:
💡 若第二问返回“2+2=4, then 4*3=12”,说明记忆成功注入上下文。
# 使用 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, k=1) -> list: emb = self.encoder.encode([query]).astype('float32') _, idxs = self.index.search(emb, k) return [self.memories[i] for i in idxs[0]]# 启动多个 Executor,Manager 投票选择最佳答案 executors = [ExecutorAgent() for _ in range(3)] results = [e.execute(subtask) for e in executors] # Manager 选择最一致的答案(简化版) final = results[0] # 实际可用 LLM 判断一致性