阶段 5:多 Agent 协同与角色体系
📖 本阶段目标
- 理解多 Agent 系统的架构模式
- 掌握 Manager-Worker、专家小组等协作模式
- 学习 Agent 间的通信和协调机制
- 实践构建多角色协作的 Agent 系统
🤝 多 Agent 系统架构
为什么需要多 Agent?
单一 Agent 的局限性: - ❌ 知识和能力有限 - ❌ 难以处理多领域任务 - ❌ 缺乏多角度思考 - ❌ 质量控制不足
多 Agent 系统的优势: - ✅ 专业化分工 - ✅ 并行处理能力 - ✅ 互相验证和改进 - ✅ 更好的可扩展性
🏗️ 常见多 Agent 模式
1. Manager-Worker 模式
┌──────────┐
│ Manager │
│ Agent │
└─────┬────┘
│
┌─────┴─────┐
▼ ▼
┌────────┐ ┌────────┐
│Worker 1│ │Worker 2│
└────────┘ └────────┘
适用场景:任务可以明确分解和分配
# examples/stage5/manager_worker.py
from openai import OpenAI
from typing import List, Dict
import json
client = OpenAI()
class ManagerAgent:
"""管理者 Agent - 负责任务分解和协调"""
def __init__(self):
self.workers = {}
def register_worker(self, name: str, worker):
"""注册工作者 Agent"""
self.workers[name] = worker
def decompose_task(self, task: str) -> List[Dict]:
"""分解任务"""
worker_descriptions = "\n".join([
f"- {name}: {worker.description}"
for name, worker in self.workers.items()
])
prompt = f"""
可用的工作者:
{worker_descriptions}
任务:{task}
请将任务分解为子任务,并分配给合适的工作者。
以 JSON 格式返回:
{{
"subtasks": [
{{
"id": 1,
"description": "子任务描述",
"assigned_to": "工作者名称",
"priority": "high/medium/low"
}},
...
]
}}
"""
response = client.chat.completions.create(
model="gpt-4-turbo-preview",
messages=[{"role": "user", "content": prompt}],
response_format={"type": "json_object"}
)
result = json.loads(response.choices[0].message.content)
return result.get("subtasks", [])
def execute_task(self, task: str) -> Dict:
"""执行完整任务"""
print(f"📋 Manager: 收到任务 - {task}\n")
# 1. 分解任务
subtasks = self.decompose_task(task)
print(f"✂️ Manager: 已分解为 {len(subtasks)} 个子任务\n")
# 2. 分配并执行
results = []
for subtask in subtasks:
worker_name = subtask["assigned_to"]
if worker_name in self.workers:
print(f"👷 分配给 {worker_name}: {subtask['description']}")
worker = self.workers[worker_name]
result = worker.execute(subtask["description"])
results.append({
"subtask": subtask,
"result": result
})
print(f"✅ {worker_name} 完成\n")
# 3. 整合结果
final_result = self.synthesize_results(task, results)
return {
"task": task,
"subtasks": subtasks,
"results": results,
"final_result": final_result
}
def synthesize_results(self, original_task: str, results: List[Dict]) -> str:
"""整合各个工作者的结果"""
results_text = "\n\n".join([
f"子任务: {r['subtask']['description']}\n结果: {r['result']}"
for r in results
])
prompt = f"""
原始任务: {original_task}
各部分完成情况:
{results_text}
请将这些结果整合成一个完整、连贯的最终成果。
"""
response = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}]
)
return response.choices[0].message.content
class WorkerAgent:
"""工作者 Agent 基类"""
def __init__(self, name: str, description: str, system_prompt: str):
self.name = name
self.description = description
self.system_prompt = system_prompt
def execute(self, task: str) -> str:
"""执行任务"""
response = client.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system", "content": self.system_prompt},
{"role": "user", "content": task}
],
temperature=0.7
)
return response.choices[0].message.content
# 使用示例
if __name__ == "__main__":
# 创建管理者
manager = ManagerAgent()
# 创建专业工作者
researcher = WorkerAgent(
"Researcher",
"负责研究和收集信息",
"你是一个专业的研究员,擅长收集和整理信息。"
)
writer = WorkerAgent(
"Writer",
"负责撰写和编辑内容",
"你是一个专业的作家,擅长撰写清晰、引人入胜的内容。"
)
reviewer = WorkerAgent(
"Reviewer",
"负责审核和改进内容",
"你是一个专业的审核员,擅长发现问题并提出改进建议。"
)
# 注册工作者
manager.register_worker("Researcher", researcher)
manager.register_worker("Writer", writer)
manager.register_worker("Reviewer", reviewer)
# 执行任务
task = "写一篇关于 AI Agent 的博客文章"
result = manager.execute_task(task)
print("=" * 60)
print("最终成果:")
print("=" * 60)
print(result["final_result"])
2. 专家小组模式
# examples/stage5/expert_panel.py
from openai import OpenAI
from typing import List, Dict
import json
client = OpenAI()
class ExpertPanel:
"""专家小组 - 多个专家共同讨论决策"""
def __init__(self):
self.experts = {}
def add_expert(self, name: str, expertise: str, personality: str):
"""添加专家"""
self.experts[name] = {
"expertise": expertise,
"personality": personality,
"opinions": []
}
def get_expert_opinion(self, expert_name: str, topic: str,
previous_opinions: List[Dict] = None) -> str:
"""获取专家意见"""
expert = self.experts[expert_name]
system_prompt = f"""
你是 {expert_name},一位{expert['expertise']}专家。
性格特点:{expert['personality']}
请基于你的专业知识给出意见。
"""
# 构建上下文(包括其他专家的意见)
context = f"讨论主题:{topic}\n\n"
if previous_opinions:
context += "其他专家的意见:\n"
for opinion in previous_opinions:
context += f"\n{opinion['expert']}:{opinion['content']}\n"
context += f"\n现在轮到你发表意见,你可以同意、反对或补充其他专家的观点。"
else:
context += "你是第一个发言的专家,请给出你的专业意见。"
response = client.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": context}
],
temperature=0.8
)
return response.choices[0].message.content
def discuss(self, topic: str, rounds: int = 2) -> Dict:
"""进行多轮讨论"""
print(f"🎯 讨论主题: {topic}\n")
print("=" * 60)
all_opinions = []
for round_num in range(rounds):
print(f"\n第 {round_num + 1} 轮讨论\n")
print("-" * 60)
round_opinions = []
for expert_name in self.experts.keys():
# 获取之前的意见作为上下文
previous = all_opinions if round_num > 0 else None
opinion = self.get_expert_opinion(
expert_name, topic, previous
)
opinion_dict = {
"round": round_num + 1,
"expert": expert_name,
"content": opinion
}
round_opinions.append(opinion_dict)
all_opinions.append(opinion_dict)
print(f"\n{expert_name}:")
print(opinion)
print()
# 生成总结
summary = self.generate_summary(topic, all_opinions)
return {
"topic": topic,
"rounds": rounds,
"opinions": all_opinions,
"summary": summary
}
def generate_summary(self, topic: str, opinions: List[Dict]) -> str:
"""生成讨论总结"""
opinions_text = "\n\n".join([
f"[第{op['round']}轮] {op['expert']}:\n{op['content']}"
for op in opinions
])
prompt = f"""
讨论主题: {topic}
专家意见:
{opinions_text}
请总结这次专家讨论:
1. 主要共识点
2. 主要分歧点
3. 最有价值的建议
4. 最终结论
"""
response = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}],
temperature=0.5
)
return response.choices[0].message.content
# 使用示例
if __name__ == "__main__":
panel = ExpertPanel()
# 添加不同领域的专家
panel.add_expert(
"技术架构师",
"软件架构和系统设计",
"注重技术可行性和系统稳定性"
)
panel.add_expert(
"产品经理",
"产品规划和用户体验",
"注重用户需求和商业价值"
)
panel.add_expert(
"安全专家",
"信息安全和数据保护",
"注重安全风险和合规性"
)
# 开始讨论
topic = "是否应该在我们的产品中引入 AI Agent 功能?"
result = panel.discuss(topic, rounds=2)
print("\n" + "=" * 60)
print("讨论总结")
print("=" * 60)
print(result["summary"])
3. Self-Refine 模式
# examples/stage5/self_refine.py
from openai import OpenAI
client = OpenAI()
class SelfRefineAgent:
"""自我精炼 Agent - 通过多个角色迭代改进"""
def __init__(self, max_iterations=3):
self.max_iterations = max_iterations
def generate(self, task: str) -> str:
"""生成初始内容"""
response = client.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system", "content": "你是一个内容创作者。"},
{"role": "user", "content": task}
],
temperature=0.7
)
return response.choices[0].message.content
def critique(self, content: str, task: str) -> str:
"""批评和评估"""
prompt = f"""
原始任务: {task}
生成的内容:
{content}
请作为一个严格的评审者,指出这个内容的问题和可以改进的地方:
1. 是否完成了任务要求?
2. 内容是否清晰、准确?
3. 结构是否合理?
4. 有哪些具体的改进建议?
请给出详细、建设性的反馈。
"""
response = client.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system", "content": "你是一个专业的评审者。"},
{"role": "user", "content": prompt}
],
temperature=0.5
)
return response.choices[0].message.content
def refine(self, content: str, critique: str, task: str) -> str:
"""根据反馈改进内容"""
prompt = f"""
原始任务: {task}
当前内容:
{content}
评审意见:
{critique}
请根据评审意见改进内容,生成更好的版本。
"""
response = client.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system", "content": "你是一个内容创作者,擅长根据反馈改进作品。"},
{"role": "user", "content": prompt}
],
temperature=0.7
)
return response.choices[0].message.content
def run(self, task: str) -> Dict:
"""执行完整的自我精炼流程"""
print(f"📝 任务: {task}\n")
print("=" * 60)
# 初始生成
print("\n第 1 版本 - 初始生成")
print("-" * 60)
content = self.generate(task)
print(content)
history = [{
"version": 1,
"content": content,
"critique": None
}]
# 迭代改进
for i in range(self.max_iterations - 1):
print(f"\n{'=' * 60}")
print(f"第 {i + 2} 版本 - 评审和改进")
print("=" * 60)
# 评审
print("\n🔍 评审意见:")
print("-" * 60)
critique = self.critique(content, task)
print(critique)
# 改进
print("\n✨ 改进后的内容:")
print("-" * 60)
content = self.refine(content, critique, task)
print(content)
history.append({
"version": i + 2,
"content": content,
"critique": critique
})
return {
"task": task,
"history": history,
"final_content": content
}
# 使用示例
if __name__ == "__main__":
agent = SelfRefineAgent(max_iterations=3)
task = "写一段关于 AI Agent 应用价值的介绍(100字左右)"
result = agent.run(task)
print("\n\n" + "=" * 60)
print("最终版本")
print("=" * 60)
print(result["final_content"])
🎯 综合实践项目
多角色文档创作系统
# examples/stage5/document_creation_team.py
from openai import OpenAI
from typing import List, Dict
client = OpenAI()
class DocumentCreationTeam:
"""文档创作团队 - 多 Agent 协作"""
def __init__(self):
self.agents = {
"outliner": self.create_outliner(),
"researcher": self.create_researcher(),
"writer": self.create_writer(),
"editor": self.create_editor(),
"reviewer": self.create_reviewer()
}
def create_outliner(self):
"""创建大纲设计师"""
return {
"role": "大纲设计师",
"system_prompt": "你是一个专业的内容架构师,擅长设计文档大纲和结构。"
}
def create_researcher(self):
"""创建研究员"""
return {
"role": "研究员",
"system_prompt": "你是一个研究员,负责收集和组织相关信息。"
}
def create_writer(self):
"""创建写作者"""
return {
"role": "写作者",
"system_prompt": "你是一个专业作家,擅长将信息转化为清晰、引人入胜的文字。"
}
def create_editor(self):
"""创建编辑"""
return {
"role": "编辑",
"system_prompt": "你是一个编辑,负责优化文字表达和结构。"
}
def create_reviewer(self):
"""创建审核者"""
return {
"role": "审核者",
"system_prompt": "你是一个质量审核员,负责检查内容的准确性和完整性。"
}
def agent_execute(self, agent_key: str, task: str) -> str:
"""执行 Agent 任务"""
agent = self.agents[agent_key]
response = client.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system", "content": agent["system_prompt"]},
{"role": "user", "content": task}
],
temperature=0.7
)
return response.choices[0].message.content
def create_document(self, topic: str) -> Dict:
"""完整的文档创作流程"""
print(f"📚 开始创作文档: {topic}\n")
# 1. 设计大纲
print("步骤 1: 设计大纲")
print("=" * 60)
outline = self.agent_execute(
"outliner",
f"为'{topic}'设计一个详细的文档大纲,包括主要章节和要点。"
)
print(outline)
print()
# 2. 研究收集
print("步骤 2: 研究和收集信息")
print("=" * 60)
research = self.agent_execute(
"researcher",
f"基于以下大纲,收集相关信息和要点:\n{outline}"
)
print(research)
print()
# 3. 撰写内容
print("步骤 3: 撰写文档")
print("=" * 60)
draft = self.agent_execute(
"writer",
f"基于以下研究内容撰写文档:\n大纲:{outline}\n研究内容:{research}"
)
print(draft[:500] + "...\n")
# 4. 编辑优化
print("步骤 4: 编辑优化")
print("=" * 60)
edited = self.agent_execute(
"editor",
f"优化以下文档的表达和结构:\n{draft}"
)
print(edited[:500] + "...\n")
# 5. 最终审核
print("步骤 5: 质量审核")
print("=" * 60)
review = self.agent_execute(
"reviewer",
f"审核以下文档,给出质量评估和改进建议:\n{edited}"
)
print(review)
print()
return {
"topic": topic,
"outline": outline,
"research": research,
"draft": draft,
"edited": edited,
"review": review,
"final_document": edited
}
# 使用示例
if __name__ == "__main__":
team = DocumentCreationTeam()
result = team.create_document("AI Agent 在企业中的应用")
print("\n" + "=" * 60)
print("最终文档")
print("=" * 60)
print(result["final_document"])
📋 最佳实践
1. Agent 间通信协议
class Message:
"""Agent 间消息"""
def __init__(self, sender, receiver, content, message_type="info"):
self.sender = sender
self.receiver = receiver
self.content = content
self.message_type = message_type
self.timestamp = datetime.now()
2. 协调机制
- 同步协调:按顺序执行
- 异步协调:并行处理
- 投票机制:多数决策
- 优先级调度:按重要性排序
3. 冲突解决
def resolve_conflict(opinions: List[Dict]) -> str:
"""解决 Agent 间的意见冲突"""
# 投票、加权平均、LLM 仲裁等
pass
✅ 阶段完成检查清单
- [ ] 理解多 Agent 系统的价值和架构
- [ ] 掌握 Manager-Worker 模式
- [ ] 实现专家小组讨论系统
- [ ] 了解 Self-Refine 迭代改进模式
- [ ] 完成多角色协作项目
- [ ] 理解 Agent 间通信和协调机制
- [ ] 掌握冲突解决策略
🎯 下一步
完成本阶段后,进入 阶段 6:成熟 Agent 框架实践,学习使用主流框架构建 Agent。
💡 小贴士:多 Agent 系统就像一个团队,合理的分工和协作能发挥 1+1>2 的效果。从简单的 2-3 个 Agent 开始,逐步增加复杂度。